|
43135
|
918
|
42
|
2026-04-17T07:54:38.499522+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776412478499_m1.jpg...
|
Firefox
|
SQLite Web: db.sqlite — Personal
|
True
|
http://100.73.206.126:8767/frames_fts/
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
Steam Account Verification - [EMA DXP4800PLUS-B5F8
Steam Account Verification - [EMAIL] - Gmail
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 238,97 € (467,38 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 238,97 € (467,38 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
| Senetic
| Senetic
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Close tab
Screenpipe Dashboard
Screenpipe Dashboard
Welcome to Steam
Welcome to Steam
YouTube
YouTube
New Tab
New Tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Google Account: Lukáš Koválik ([EMAIL])
Main menu
New chat
Gemini
Temporary chat
PLUS
PLUS
Conversation with Gemini
Conversation with Gemini
Hi Lukáš
Where should we start?
Where should we start?
🖼️ Create image, button, tap to use tool
🖼️ Create image
🎸 Create music, button, tap to use tool
🎸 Create music
Boost my day, button, tap to use tool
Boost my day
Help me learn, button, tap to use tool...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Steam Account Verification - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 238,97 € (467,38 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 238,97 € (467,38 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"| Senetic","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"| Senetic","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Твърд диск, Western Digital Red 6TB Plus ( 3.5\", 256MB, 5400","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Твърд диск, Western Digital Red 6TB Plus ( 3.5\", 256MB, 5400","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Screenpipe Dashboard","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe Dashboard","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Welcome to Steam","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome to Steam","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"YouTube","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"YouTube","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Close Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AI Chat settings","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Google Account: Lukáš Koválik (kovaliklukas@gmail.com)","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Main menu","depth":12,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Temporary chat","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"PLUS","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"PLUS","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hi Lukáš","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Where should we start?","depth":22,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Where should we start?","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"🖼️ Create image, button, tap to use tool","depth":22,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"🖼️ Create image","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"🎸 Create music, button, tap to use tool","depth":22,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"🎸 Create music","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Boost my day, button, tap to use tool","depth":22,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Boost my day","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help me learn, button, tap to use tool","depth":22,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-8324480675119053289
|
-3716590350432924989
|
app_switch
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
Steam Account Verification - [EMA DXP4800PLUS-B5F8
Steam Account Verification - [EMAIL] - Gmail
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 238,97 € (467,38 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 238,97 € (467,38 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
| Senetic
| Senetic
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Close tab
Screenpipe Dashboard
Screenpipe Dashboard
Welcome to Steam
Welcome to Steam
YouTube
YouTube
New Tab
New Tab
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
AI Chat settings
Close
Google Account: Lukáš Koválik ([EMAIL])
Main menu
New chat
Gemini
Temporary chat
PLUS
PLUS
Conversation with Gemini
Conversation with Gemini
Hi Lukáš
Where should we start?
Where should we start?
🖼️ Create image, button, tap to use tool
🖼️ Create image
🎸 Create music, button, tap to use tool
🎸 Create music
Boost my day, button, tap to use tool
Boost my day
Help me learn, button, tap to use tool...
|
NULL
|
|
43176
|
920
|
4
|
2026-04-17T07:57:08.696571+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776412628696_m1.jpg...
|
Firefox
|
Meet - Backend Chapter — Work
|
True
|
meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovali meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.com...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Workers | Datadog
Platform Sprint 2 Q2 - Platform Workers | Datadog
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Close tab
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
Problem loading page
Close tab
Symfony\Component\Debug\Exception\FatalThrowableError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line
Close tab
CloudWatch | us-east-2
Close tab
Configure SSH access to multiple environment - Engineering - Confluence
Close tab
Console Home | Console Home | eu-west-1
Close tab
New Tab
Close tab
Meet - Backend Chapter
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Nikolov (Presenting, annotating)
Nikolay Nikolov (Presenting, annotating)
People
3
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Workers | Datadog","depth":4,"bounds":{"left":0.0,"top":0.072222225,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.13222222,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.13222222,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":4,"bounds":{"left":0.0,"top":0.17777778,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.17777778,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"bounds":{"left":0.0,"top":0.22333333,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.22333333,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Symfony\\Component\\Debug\\Exception\\FatalThrowableError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line","depth":4,"bounds":{"left":0.0,"top":0.2688889,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.2688889,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.31444445,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.31444445,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"bounds":{"left":0.0,"top":0.36,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.36,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Console Home | Console Home | eu-west-1","depth":4,"bounds":{"left":0.0,"top":0.40555555,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.40555555,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.4511111,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.4511111,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Meet - Backend Chapter","depth":4,"bounds":{"left":0.0,"top":0.49666667,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.49666667,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.005902778,"top":0.54444444,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.7977778,"width":0.033680554,"height":0.043333333},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8411111,"width":0.033680554,"height":0.038333334},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.8794444,"width":0.033680554,"height":0.03888889},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.91833335,"width":0.033680554,"height":0.038333334},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.95666665,"width":0.033680554,"height":0.043333333},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Nikolay Nikolov (Presenting, annotating)","depth":12,"bounds":{"left":0.07534722,"top":0.101111114,"width":0.17916666,"height":0.022222223},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Nikolov (Presenting, annotating)","depth":13,"bounds":{"left":0.07534722,"top":0.10222222,"width":0.17916666,"height":0.020555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"People","depth":15,"bounds":{"left":0.88680553,"top":0.08944444,"width":0.04097222,"height":0.04},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.9145833,"top":0.101111114,"width":0.0048611113,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Take notes with Gemini","depth":14,"bounds":{"left":0.93333334,"top":0.08944444,"width":0.025,"height":0.04},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":17,"bounds":{"left":0.9361111,"top":0.101111114,"width":0.06388891,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini","depth":22,"bounds":{"left":0.96666664,"top":0.101111114,"width":0.028125,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Gemini","depth":21,"bounds":{"left":0.96458334,"top":0.090555556,"width":0.023611112,"height":0.037777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-3862460716810854562
|
9092900982803084018
|
app_switch
|
hybrid
|
NULL
|
Workers | Datadog
Platform Sprint 2 Q2 - Platform Workers | Datadog
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Close tab
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
Problem loading page
Close tab
Symfony\Component\Debug\Exception\FatalThrowableError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line
Close tab
CloudWatch | us-east-2
Close tab
Configure SSH access to multiple environment - Engineering - Confluence
Close tab
Console Home | Console Home | eu-west-1
Close tab
New Tab
Close tab
Meet - Backend Chapter
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Nikolov (Presenting, annotating)
Nikolay Nikolov (Presenting, annotating)
People
3
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp0abl→Cmeet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.comNikolay Nikolov (Presenting, annotating)Backend Chapter • 33 m left100% <478 • Fri 17 Apr 10:57:083+PhoStorm -FleAT AccountTransformer.phpKeranei haraeio$ Debug-opportunityWiroowDebug opportunity stagesProject v€ Account.php 15.04.26, 1055, 9.14 kвActivity php© Address.php 23.03.26, 10.59, 25 kAiPrompt,php 23.03.26, 10:59, 2.54 kL©CrmEntityRepository.phpOpportunity.php© Lead phpclass Lead extends Model implementsprotected static function boot(): voidstatie::updated(static function (Lead Slead): void (COLEaU-2HaSCnangeo (SELT:EKEANUEA,KELEVANI_PIELUSY1event (new LeadUpdated(Steas)):© AutomatedReport.php 3.04.26, 139© AutomatedReportResult.php 23.03>):© Calendar php 23.03.26, 10.59, 5.17 k3© Callimport. php 23.03.26, 10.59,4.3 ka© CoachingF-eedback,php 23.03.20,1©CoschingFeedbackVisibllity.php 23protected function casts(): array© CoachingSection,php 23.03.26, 10.51© CoschingSectionCriterion.php 23.0© CoachingSectionOriterionF eedback©CoachingSectionF-eedback.php 23192© CommentAbstract.php 23.03.26,10return ['stage_id' = "integer",'converted_at' »>"datetine"'stage_updated_at' a> "datetine'.Accept Reject® Commentinterface,.php 23.03.26, 10© Contact.php 15.04.26, 10-55, 10.17 ka"renotely_created_at' a "datetine',© Device.php 23.03.26, 10.59, 3.57 k8© EmalMessage.php 23.03.26, 10:59, 9197© GenericAPrompt.php 23.03.26, 10.5© Group. php 23.03.26, 10:59, 14.29 kBpooeic rundcion dettesdsu ges cantrtoutelnbox.php 15.04.26, 1055, 5.86 кk© nboxÉmal.php 15.04.26, 10.55, 6.11 k©InboxEmalBatch.php 30.03.24, 10:30282© Invitation,php 23.03.26, 10.39, 6.88 kl© JobLog.php 23.03.26, 10-59, 2.15 kлJobTide.php 23.03.26, 10.59, 2.98 kBGet the uni to lead phote.© Language,.php 23.03.26, 10:59, 2,51 kJ© LanguageOlalect.php 23.03.26, 10.51207public function getPhotoUrlAttribute(): string© Lead.pho 13.042208©MobileSetting, php 23.03.26, 10.59, 1209© Model,php 23.03.26, 10.59, 1.88 k8218© Moment.php 23.03.26, 1059,2.78 k8213© Nudge.php 23.03.26, 10.59,7A1k8212SphotoPath = Sthis->photo_path;Il If tean photo_path is already a fully qualified URL1f (preg_natch(*/*https?:V\//S*, SphotoPath)) (SphotoUrl = SphotoPath;j else (© NudgeRun,php 23.03.26, 10.59, 3.46© Opportunity.php 17.04.28, 10.52, 16.0214© Participant.php 15.04.26, 10.55, 18.45I/ Prepend cdn base unl to photo uns1ed: Sphpto v Nocept Rla xul coobipernheBaca) : + 2 ot210es →© Partner.php 31.63.26, M.02, 5.55 kBDarmieeiAA AhA 19A1.M 1066 119LJminny(ModelsCastsDmerepooeoonl snaro you kereenOapp › app › Repositories › Crm › CrmÊntityRepository.php › © CrmEntityRepository › ® a impoUOpportunitySyncTest.testResolveAcoountidCascadeVbratsuroosRead Lead.php #L189-208The Lead model has the same issue. Let me fix it as well:0 Lead.phpFri 17 Apr 10:67+0 .mohondMNikolay NikoloyBut, what caused the bug recentClaude Opus 4.5192:1SymfonyUF UTF-8Lukas Kovalik10:57 AM | Backend Chapter...
|
NULL
|
|
43178
|
920
|
5
|
2026-04-17T07:57:10.838649+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776412630838_m1.jpg...
|
Firefox
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileBookmarksEdit→ViewHistoryProfilesQ.Tool FirefoxFileBookmarksEdit→ViewHistoryProfilesQ.ToolsWindowHelp0meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.comNikolay Nikolov (Presenting, annotating)• Backend Chapter • 33 m left100% <478 • Fri 17 Apr 10:57:103+PhpStorm -FleAT AccountTransformer.phpCeraneie hariei$ Debug-opportunityWiroowDebug opportunity stagesUOpportunitySyncTest.testResolveAcoountidProject v© Account.php 15.04.26, 10-55, 2.14 k0©Activity.php© Address.php 23.03.26, 10.59, 2.5 k8© APrompt.php 23.03.26, 10-39, 2.36 kl© AutomatedReport.php 3.04.26, 139© AutomatedReportResult.php 23.03.© Calendar php 23.03.26, 10.59, 5.17 k8© Callimport. php 23.03.26, 10.59,4.3 ka© CoachingF-eedback,php 23.03.20, 1C©CoschingFeedbackVisibllity.php 23189 €*protected function casts(): array© CoachingSection,php 23.03.26, 10.51© CoschingSectionCriterion.php 23.0© CoachingSectionOriterionF eedback192©CoachingSectionF-eedback.php 23© CommentAbstract.php 23.03.26,10return ["stage_id' "integer','converted at' a>"datetine""stago_updated_at' a "datetine',Accept Reject® Commentinterface,.php 23.03.26, 10© Contact.php 15.04.26, 10-55, 10.17 ka'renotely_created_at* = "datetine',© Device.php 23.03.26, 10.59, 3.57 k8© EmalMessage.php 23.03.26, 10:59, 9197© GenericAPrompt.php 23.03.26, 10.5© Group. php 23.03.26, 10:59, 14.29 kBpooeic tunccion gettesosu gestand doutelnbox.php 15.04.26, 1055, 5.86 кk© nboxÉmal.php 15.04.26, 10.55, 6.11 k291©InboxEmalBatch.php 30.03.24, 10:30282© Invitation,php 23.03.26, 10.59, 6.88 Ml© JobLog.php 23.03.26, 10-59, 2.15 kлJobTide.php 23.03.26, 10.59, 2.98 kB© Language.php 23.03.26, 10:59, 2.51 k© LanguageOlalect.php 23.03.26, 10.51207public function getPhotoUrlAttribute(): string© Lead.pho 13.042203©MobileSetting, php 23.03.26, 10.59, 1209© Model,php 23.03.26, 10.59, 1.88 k8218© Moment.php 23.03.26, 1059,2.78 k8213© Nudge.php 23.03.26, 10.59,7A1k8SphotoPath = Sthis->photo_path;Il If tean photo_path is already a fully qualified URL1f Cpreg,natch( pattern*/nttps?:V\//S", SphotoPath)) (SphotoUrl = SphotoPath;j else (© NudgeRun,php 23.03.26, 10.59, 3.46© Opportunity.php 17.04.28, 10.52, 16.0214© Participant.php 15.04.26, 10.55, 18.451 ede:Sphpto o Accept fla xus io de Gipiernte Bael) : +- 2 el 2 t0es →© Partner.php 31.63.26, M.02, 5.55 kBDarmieeina nhлcastsDmerepooeoondl snore youkereonOapp › app › Repositories › Crm › © CrmÊntityRepository.php › © OrmEntityRepository › ® e impo©CrmEntityRepository.phpOpportunity.php© Lead phpclass Lead extends Model implementsLnetsunDeosprotected static function boot(): voidstatio::updated(static function (Lead Stead): void {SELT::KEINUEA_KELEVANIFIELUSevent (new LeadUpdated(Steas)):Read Lead.php #L189-208The Lead model has the same issue. Let me fix it as well:0 Lead.phpBut, what caused the bug recently -lPHP. 8.3 W Wndsurf Teams192:1UF UTF-8Fri 17 Apr 10:67+0 .mMNikolay NikolovLukas Kovalik10:57 AM Backend Chapter...
|
NULL
|
-4899465654918793457
|
NULL
|
app_switch
|
ocr
|
NULL
|
FirefoxFileBookmarksEdit→ViewHistoryProfilesQ.Tool FirefoxFileBookmarksEdit→ViewHistoryProfilesQ.ToolsWindowHelp0meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.comNikolay Nikolov (Presenting, annotating)• Backend Chapter • 33 m left100% <478 • Fri 17 Apr 10:57:103+PhpStorm -FleAT AccountTransformer.phpCeraneie hariei$ Debug-opportunityWiroowDebug opportunity stagesUOpportunitySyncTest.testResolveAcoountidProject v© Account.php 15.04.26, 10-55, 2.14 k0©Activity.php© Address.php 23.03.26, 10.59, 2.5 k8© APrompt.php 23.03.26, 10-39, 2.36 kl© AutomatedReport.php 3.04.26, 139© AutomatedReportResult.php 23.03.© Calendar php 23.03.26, 10.59, 5.17 k8© Callimport. php 23.03.26, 10.59,4.3 ka© CoachingF-eedback,php 23.03.20, 1C©CoschingFeedbackVisibllity.php 23189 €*protected function casts(): array© CoachingSection,php 23.03.26, 10.51© CoschingSectionCriterion.php 23.0© CoachingSectionOriterionF eedback192©CoachingSectionF-eedback.php 23© CommentAbstract.php 23.03.26,10return ["stage_id' "integer','converted at' a>"datetine""stago_updated_at' a "datetine',Accept Reject® Commentinterface,.php 23.03.26, 10© Contact.php 15.04.26, 10-55, 10.17 ka'renotely_created_at* = "datetine',© Device.php 23.03.26, 10.59, 3.57 k8© EmalMessage.php 23.03.26, 10:59, 9197© GenericAPrompt.php 23.03.26, 10.5© Group. php 23.03.26, 10:59, 14.29 kBpooeic tunccion gettesosu gestand doutelnbox.php 15.04.26, 1055, 5.86 кk© nboxÉmal.php 15.04.26, 10.55, 6.11 k291©InboxEmalBatch.php 30.03.24, 10:30282© Invitation,php 23.03.26, 10.59, 6.88 Ml© JobLog.php 23.03.26, 10-59, 2.15 kлJobTide.php 23.03.26, 10.59, 2.98 kB© Language.php 23.03.26, 10:59, 2.51 k© LanguageOlalect.php 23.03.26, 10.51207public function getPhotoUrlAttribute(): string© Lead.pho 13.042203©MobileSetting, php 23.03.26, 10.59, 1209© Model,php 23.03.26, 10.59, 1.88 k8218© Moment.php 23.03.26, 1059,2.78 k8213© Nudge.php 23.03.26, 10.59,7A1k8SphotoPath = Sthis->photo_path;Il If tean photo_path is already a fully qualified URL1f Cpreg,natch( pattern*/nttps?:V\//S", SphotoPath)) (SphotoUrl = SphotoPath;j else (© NudgeRun,php 23.03.26, 10.59, 3.46© Opportunity.php 17.04.28, 10.52, 16.0214© Participant.php 15.04.26, 10.55, 18.451 ede:Sphpto o Accept fla xus io de Gipiernte Bael) : +- 2 el 2 t0es →© Partner.php 31.63.26, M.02, 5.55 kBDarmieeina nhлcastsDmerepooeoondl snore youkereonOapp › app › Repositories › Crm › © CrmÊntityRepository.php › © OrmEntityRepository › ® e impo©CrmEntityRepository.phpOpportunity.php© Lead phpclass Lead extends Model implementsLnetsunDeosprotected static function boot(): voidstatio::updated(static function (Lead Stead): void {SELT::KEINUEA_KELEVANIFIELUSevent (new LeadUpdated(Steas)):Read Lead.php #L189-208The Lead model has the same issue. Let me fix it as well:0 Lead.phpBut, what caused the bug recently -lPHP. 8.3 W Wndsurf Teams192:1UF UTF-8Fri 17 Apr 10:67+0 .mMNikolay NikolovLukas Kovalik10:57 AM Backend Chapter...
|
NULL
|
|
43179
|
921
|
2
|
2026-04-17T07:57:12.800351+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776412632800_m2.jpg...
|
Firefox
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileFV faVsco.jsProject vEditViewNavigateC PhpStormFileFV faVsco.jsProject vEditViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-jiminny k ~ToolsWindowHelp> D Redisv D ServiceTraits€ OpportunitySy& SyncCrmEntiti© SyncFieldsTra© WriteCrm Trait.→IUTIS•Weohook© BatchSyncCollect© BatchSyncRedisS© Client.php© ClosedDealStage6 DealFieldsService© DecorateActivity.© FieldDefinitions.p© FieldTypeConveri© HubspotClientInte© HubspotTokenMa© PayloadBuilder.pt© RemoteCrmObjec(C) ResponseNormali© Service.php© SyncFieldAction.f© SyncRelatedActiv© WebhookSyncBa1v D IntegrationApp> D Accessors~ D Api© ActionUrl.php• EnumUrllnterfa© FlowUrl.php© PageResult.ph© ProxyUrl.phpc) recuestsu lceLa kequestcxecu• RequestExecuSystemEvents© SystemUrl.phpC TokenBuilder.f• TokenBuilderlr© UrlBuilder.php> D Config> DDTO> MFilters>MJobs› _ ProspectSearchS> D ServiceTraits© DataClient.php© DecorateActivity.© LocalSearch.php© LocalSearchlntert© RemoteSearch.pr© Service.php_ ListenersMeradara[ MigrationPipedriveD SalesforceD Traits© AutomatedReportsService.php© TeamSetupController.phppnp apl.onp© AutomatedReportsCommandTest.php© TrackProviderInstalledEvent.phpC AutomatedReportsCallbackService.phpOpportunitySyncTrait.phph© SendReportJob.php© SendReportMailJob.php© ReportController.php© TokenBuilder.php• Filesystem.phpAutomatedReportsCommand.phpAskJiminnykeporscontroller.ono© AutomatedReportsSendCommand.php© Team.php© CreateActivityLoggedEvent.php© UserPilotActivityListener.phpC RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.phpsyncopoortunity.onoService.php© AutomatedReportResult.phpCc w .*O results© AutomatedReport.php1IYACreateHeldActivityEvent.phpAEVZVSA8388928758Y4875OY0070899900901902903904905906936937941942745944745949950951952953954955956957958959960961962963964Y0/trait OpportunitySyncTraitprivate function buildOpportunityData(if ($stage) {$data['stage_id'] = $stage->id;if ($businessProcess) {$recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);if ($recordType) {$data['record_type_id'] = $recordType->id;rerurn boatarLusaeesprivate function resolveBusinessProcess(?string $pipelineld): ?BusinessProcessf...}Lusagesprivate function getBusinessProcess(string $pipelineId): ?BusinessProcess{...}2 usagesprivate function resolveStage(BusinessProcess $businessProcess, Pstring $stageId): ?Stageif (empty($stageid)) {return null$cacheKey = $businessProcess->getId().if (isset($this->cachedStages[$cacheKey])) {return $this->cachedStages[$cacheKey];$stageId;sstage = schis->crmentltykepos1tory->getP1pel1nescagebyconaltlonsфbusinessprocess,cenorovoer o => nstaoelor"cype → stace..lyrc urrurtoNtiyif ($stage === null) {$this->importStages(null, $stageId);if ($stage === null) {$this->logger→>info(' [HubSpot] Stage does not exist => ' . $stageId);Helper code will nelp IDt lo understand vour Laravel apo code. Generale Don't snow Anymore loday 8.09= custom.log(° scratch_1.json= laravel.logV connect.vueA HS_local jiminny@localhost]iib crm_configurations EU]A SF [jiminny@localhost]V Onboard.vueA console [EU] x|Al console [PROD]& console SlAGING15421543-1544154515461548154915511552=155315541555155615571558E1559156015611562—1563=15641565156615671568156915701571157215731574157515761577157815791580-15861081590Ix. Aulo vfajiminny~oElee* rrom cemдUA22зSELECT * FROM crm_layout_entities WHERE crm_layoutSELECT * FROM teams WHERE id = 575;select * from opportunities where team_id = 575;=SELECT * FROM activities WHERE uvid_to_bin('96b126select * from contacts cwhere c.crm_configuration_id = 370 order by c.updaSELECT * FROM participants where activity_id = 39gSELECT * FROM participants where activity_id = 39SELECT * FROM activity_summary_logs where activitySELECT * FROM activities WHERE uvid_to_bin('c7d99FSELECT * FROM activities WHERE uuid_to_bin('2e6ff4select * from crm_profiles where crm_configurationselect * from opportunities where crm_configuratioselect * from accounts where crm_configuration_idselect * from contacts where crm_configuration_id# owner 13236 525785080# contact 116779180 665587441856 - activity - AL# contact 214247[PHONE]7 - asnosuoporuro# company 4176133 47150650569# deal 7100953 410150124747SELECTCONCAT(u.id, CASE WHEN U.id = t.owner_id THENu.email,sa.*,t.owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idJOIN teams t 1.n<->1: on t.id = u.team_idWHERE u.team_id = 400 and sa.provider = 'hubspot:select * from features;select * from team_features where feature_id = 40,select * from teams where id = 556; # owner: 18101select * from crm_configurations where id = 477;SELECT * FROM users WHERE id = 18101;SELECTCONCAT(u.id, LASE WHEN u.id = t.owner_id THENu.email,sa.*,t.owner_id FROM social_accounts saJuIn users u on u.1d = sa.soclable_1dJuir realls t us?lon t.id = u.team_idWHERE u.team_id = 556 and sa.provider = 'integrselect * from opportunities where id = 7594349;Backend Chapter - 33 m left100% C8 • Fri 17 Apr 10:57:12AutomatedReportsCommandTestCascadeAutomated Report Retrsearched impor stages in apo (43Investigating HubSpotNow let me look at the reso lveßusinessProcess path more caretully - specifically what triggers repeatedamportolages calls witnout new webnlookswreao Oooonunivsync raltonoNow can see tne oue cleary Look ar reso vestacel aulines yo-yoePoad OnnortunitvSvnc rait ohn * 1.501Found it. There are two bugs in resolvestage():Root CauseBug 1: importStages result isignored — OpportunitySyncTrait. php: 961-9690 phpif ($stage == null) ‹$this->importStages(null, $stageld); // return value discarded!if ($stage === null) { // always true - $stage was never reassigned$this->logger→>info([HubSpot) Stage does not exist = • $stageld):$this->cachedStages [$cacheKey] = $stage; // caches nullThe return value of importStages() is thrown away, $stage is never reassigned, so:1. importstages is called every time (no stage miss cached properly)null is cached - but Bug 2 means the cache never helps anywayBug 2: nult is cached - line 969 caches null for missing stages. So the next deal with the same stagewill hit the cache and get null, skip the import, but the first deal in each batch still triggers the HubSpotAPI CalIActually re-reading - the cache does prevent repeated calls within a single sync run for the same stage.But every new job/sync run resets ($cachedStages = [], so for scheduled sync jobs (e.g. SyncTeamMetadata), each run callis importStages for every deal with an unknown stageThe Real ScenarioSince vou're seeina frequent importStages calls without new webhooks, the likely triagers are-1. SyncleamMetadata Job — runs on a schedule and calls importstages( directly (syncleammetadata.php:100)2. Periodic opportunity sync - syncOpprcunicles orocesses many ceals, eaen calline resolvestaae() → tor any deal whose stage isn't in DB, importStages tires3. The fix bug: after importStages runs, $stage is still null - it never re-queries the DB - so thesace•esskodeo opoonunilv mav de skilodeo or saveo Winout stage 10 ano the next Sunc runhits the same stage again, creating an infinite loop of unnecessary importsThe Fix0 phpif ($stage === null) {sstage = schis→>importstages null, sstageld:Assien tne return value so. a te stace is usea i roune, o lleels propelly cacneo, c the oeporunityIsn't skiooed unnecessarilv.Would you like me to apply this fix?ta all**Ask anything (24L)+ <>Code Claude Sonnet 4.6Winasun lea969:20 12 charsuir-o( 4 spaces...
|
NULL
|
-3207173655443941465
|
NULL
|
app_switch
|
ocr
|
NULL
|
PhpStormFileFV faVsco.jsProject vEditViewNavigateC PhpStormFileFV faVsco.jsProject vEditViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-jiminny k ~ToolsWindowHelp> D Redisv D ServiceTraits€ OpportunitySy& SyncCrmEntiti© SyncFieldsTra© WriteCrm Trait.→IUTIS•Weohook© BatchSyncCollect© BatchSyncRedisS© Client.php© ClosedDealStage6 DealFieldsService© DecorateActivity.© FieldDefinitions.p© FieldTypeConveri© HubspotClientInte© HubspotTokenMa© PayloadBuilder.pt© RemoteCrmObjec(C) ResponseNormali© Service.php© SyncFieldAction.f© SyncRelatedActiv© WebhookSyncBa1v D IntegrationApp> D Accessors~ D Api© ActionUrl.php• EnumUrllnterfa© FlowUrl.php© PageResult.ph© ProxyUrl.phpc) recuestsu lceLa kequestcxecu• RequestExecuSystemEvents© SystemUrl.phpC TokenBuilder.f• TokenBuilderlr© UrlBuilder.php> D Config> DDTO> MFilters>MJobs› _ ProspectSearchS> D ServiceTraits© DataClient.php© DecorateActivity.© LocalSearch.php© LocalSearchlntert© RemoteSearch.pr© Service.php_ ListenersMeradara[ MigrationPipedriveD SalesforceD Traits© AutomatedReportsService.php© TeamSetupController.phppnp apl.onp© AutomatedReportsCommandTest.php© TrackProviderInstalledEvent.phpC AutomatedReportsCallbackService.phpOpportunitySyncTrait.phph© SendReportJob.php© SendReportMailJob.php© ReportController.php© TokenBuilder.php• Filesystem.phpAutomatedReportsCommand.phpAskJiminnykeporscontroller.ono© AutomatedReportsSendCommand.php© Team.php© CreateActivityLoggedEvent.php© UserPilotActivityListener.phpC RequestGenerateAskJiminnyReportJob.phpC RequestGenerateReportJob.phpsyncopoortunity.onoService.php© AutomatedReportResult.phpCc w .*O results© AutomatedReport.php1IYACreateHeldActivityEvent.phpAEVZVSA8388928758Y4875OY0070899900901902903904905906936937941942745944745949950951952953954955956957958959960961962963964Y0/trait OpportunitySyncTraitprivate function buildOpportunityData(if ($stage) {$data['stage_id'] = $stage->id;if ($businessProcess) {$recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);if ($recordType) {$data['record_type_id'] = $recordType->id;rerurn boatarLusaeesprivate function resolveBusinessProcess(?string $pipelineld): ?BusinessProcessf...}Lusagesprivate function getBusinessProcess(string $pipelineId): ?BusinessProcess{...}2 usagesprivate function resolveStage(BusinessProcess $businessProcess, Pstring $stageId): ?Stageif (empty($stageid)) {return null$cacheKey = $businessProcess->getId().if (isset($this->cachedStages[$cacheKey])) {return $this->cachedStages[$cacheKey];$stageId;sstage = schis->crmentltykepos1tory->getP1pel1nescagebyconaltlonsфbusinessprocess,cenorovoer o => nstaoelor"cype → stace..lyrc urrurtoNtiyif ($stage === null) {$this->importStages(null, $stageId);if ($stage === null) {$this->logger→>info(' [HubSpot] Stage does not exist => ' . $stageId);Helper code will nelp IDt lo understand vour Laravel apo code. Generale Don't snow Anymore loday 8.09= custom.log(° scratch_1.json= laravel.logV connect.vueA HS_local jiminny@localhost]iib crm_configurations EU]A SF [jiminny@localhost]V Onboard.vueA console [EU] x|Al console [PROD]& console SlAGING15421543-1544154515461548154915511552=155315541555155615571558E1559156015611562—1563=15641565156615671568156915701571157215731574157515761577157815791580-15861081590Ix. Aulo vfajiminny~oElee* rrom cemдUA22зSELECT * FROM crm_layout_entities WHERE crm_layoutSELECT * FROM teams WHERE id = 575;select * from opportunities where team_id = 575;=SELECT * FROM activities WHERE uvid_to_bin('96b126select * from contacts cwhere c.crm_configuration_id = 370 order by c.updaSELECT * FROM participants where activity_id = 39gSELECT * FROM participants where activity_id = 39SELECT * FROM activity_summary_logs where activitySELECT * FROM activities WHERE uvid_to_bin('c7d99FSELECT * FROM activities WHERE uuid_to_bin('2e6ff4select * from crm_profiles where crm_configurationselect * from opportunities where crm_configuratioselect * from accounts where crm_configuration_idselect * from contacts where crm_configuration_id# owner 13236 525785080# contact 116779180 665587441856 - activity - AL# contact 214247[PHONE]7 - asnosuoporuro# company 4176133 47150650569# deal 7100953 410150124747SELECTCONCAT(u.id, CASE WHEN U.id = t.owner_id THENu.email,sa.*,t.owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idJOIN teams t 1.n<->1: on t.id = u.team_idWHERE u.team_id = 400 and sa.provider = 'hubspot:select * from features;select * from team_features where feature_id = 40,select * from teams where id = 556; # owner: 18101select * from crm_configurations where id = 477;SELECT * FROM users WHERE id = 18101;SELECTCONCAT(u.id, LASE WHEN u.id = t.owner_id THENu.email,sa.*,t.owner_id FROM social_accounts saJuIn users u on u.1d = sa.soclable_1dJuir realls t us?lon t.id = u.team_idWHERE u.team_id = 556 and sa.provider = 'integrselect * from opportunities where id = 7594349;Backend Chapter - 33 m left100% C8 • Fri 17 Apr 10:57:12AutomatedReportsCommandTestCascadeAutomated Report Retrsearched impor stages in apo (43Investigating HubSpotNow let me look at the reso lveßusinessProcess path more caretully - specifically what triggers repeatedamportolages calls witnout new webnlookswreao Oooonunivsync raltonoNow can see tne oue cleary Look ar reso vestacel aulines yo-yoePoad OnnortunitvSvnc rait ohn * 1.501Found it. There are two bugs in resolvestage():Root CauseBug 1: importStages result isignored — OpportunitySyncTrait. php: 961-9690 phpif ($stage == null) ‹$this->importStages(null, $stageld); // return value discarded!if ($stage === null) { // always true - $stage was never reassigned$this->logger→>info([HubSpot) Stage does not exist = • $stageld):$this->cachedStages [$cacheKey] = $stage; // caches nullThe return value of importStages() is thrown away, $stage is never reassigned, so:1. importstages is called every time (no stage miss cached properly)null is cached - but Bug 2 means the cache never helps anywayBug 2: nult is cached - line 969 caches null for missing stages. So the next deal with the same stagewill hit the cache and get null, skip the import, but the first deal in each batch still triggers the HubSpotAPI CalIActually re-reading - the cache does prevent repeated calls within a single sync run for the same stage.But every new job/sync run resets ($cachedStages = [], so for scheduled sync jobs (e.g. SyncTeamMetadata), each run callis importStages for every deal with an unknown stageThe Real ScenarioSince vou're seeina frequent importStages calls without new webhooks, the likely triagers are-1. SyncleamMetadata Job — runs on a schedule and calls importstages( directly (syncleammetadata.php:100)2. Periodic opportunity sync - syncOpprcunicles orocesses many ceals, eaen calline resolvestaae() → tor any deal whose stage isn't in DB, importStages tires3. The fix bug: after importStages runs, $stage is still null - it never re-queries the DB - so thesace•esskodeo opoonunilv mav de skilodeo or saveo Winout stage 10 ano the next Sunc runhits the same stage again, creating an infinite loop of unnecessary importsThe Fix0 phpif ($stage === null) {sstage = schis→>importstages null, sstageld:Assien tne return value so. a te stace is usea i roune, o lleels propelly cacneo, c the oeporunityIsn't skiooed unnecessarilv.Would you like me to apply this fix?ta all**Ask anything (24L)+ <>Code Claude Sonnet 4.6Winasun lea969:20 12 charsuir-o( 4 spaces...
|
NULL
|
|
43223
|
920
|
33
|
2026-04-17T07:58:48.010120+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776412728010_m1.jpg...
|
iTerm2
|
ec2-user@ip-10-20-6-111:~
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
UW PICO 5.09 UW PICO 5.09 New Buffer
[ Read 137 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
Last login: Fri Apr 17 10:32:22 on ttys013
/Users/lukas/.zprofile:138: unmatched "
/Users/lukas/.zprofile:138: unmatched "
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ % veu
zsh: command not found: veu
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ % zp
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ % ssh jiminny-eu-ecs1
Enter MFA code for arn:aws:iam::438740370364:mfa/[EMAIL]:
Warning: Permanently added 'jiminny-eu-ecs1' (ED25519) to the list of known hosts.
A newer release of "Amazon Linux" is available.
Version 2023.10.20260105:
Version 2023.10.20260120:
Version 2023.10.20260202:
Version 2023.10.20260216:
Version 2023.10.20260302:
Version 2023.10.20260325:
Version 2023.10.20260330:
Version 2023.11.20260406:
Version 2023.11.20260413:
Version 2023.8.20250707:
Version 2023.8.20250715:
Version 2023.8.20250721:
Version 2023.8.20250808:
Version 2023.8.20250818:
Version 2023.8.20250908:
Version 2023.8.20250915:
Version 2023.9.20250929:
Version 2023.9.20251014:
Version 2023.9.20251020:
Version 2023.9.20251027:
Version 2023.9.20251105:
Version 2023.9.20251110:
Version 2023.9.20251117:
Version 2023.9.20251208:
Run "/usr/bin/dnf check-release-update" for full release and version update info
, #_
~\_ ####_
~~ \_#####\
~~ \###|
~~ \#/ ___ Amazon Linux 2023 (ECS Optimized)
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
For documentation, visit [URL_WITH_CREDENTIALS] ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook redis --key-type ids --detailed
INFO Scanning Redis keys (type: ids).
Total keys found [PASSWORD_DOTS] 87
Total IDs across all keys [PASSWORD_DOTS] 18,991
📊 Memory Overview
Total Memory [PASSWORD_DOTS] 1.17 MB
ids keys [PASSWORD_DOTS] 1.17 MB
batch_sync_deal:ids:338:all (Formalize - 432)
Config ID: 338
Type: set
Memory: 582.22 KB
TTL: 23h 26m 22s
Count: 9314
Sample: 36225705250, 29787925122, 329967686878
batch_sync_contact:ids:439:all (Log My Care - 522)
Config ID: 439
Type: set
Memory: 203.66 KB
TTL: 15h 27m 1s
Count: 3257
Sample: 4723151, 569384381669, 751397913846
batch_sync_contact:ids:370:all (Buynomics - 462)
Config ID: 370
Type: set
Memory: 159.54 KB
TTL: 23h 58m 24s
Count: 2551
Sample: 7855597, 214629714698, 1081551
batch_sync_company:ids:439:all (Log My Care - 522)
Config ID: 439
Type: set
Memory: 143.97 KB
TTL: 15h 26m 38s
Count: 2302
Sample: 97509907664, 287839612106, 13347420118
batch_sync_company:ids:370:all (Buynomics - 462)
Config ID: 370
Type: set
Memory: 28.54 KB
TTL: 23h 57m 58s
Count: 455
Sample: 53416555927, 5299782086, 48272143029
batch_sync_company:ids:346:all (Global Expansion - 444)
Config ID: 346
Type: set
Memory: 17.66 KB
TTL: 23h 59m 57s
Count: 281
Sample: 54084980525, 31037091957, 16036051109
batch_sync_contact:ids:346:all (Global Expansion - 444)
Config ID: 346
Type: set
Memory: 12.6 KB
TTL: 23h 59m 57s
Count: 200
Sample: 216133633092, 216059621965, 216123582828
batch_sync_contact:ids:373:all (KPSBremen.de - 465)
Config ID: 373
Type: set
Memory: 4.35 KB
TTL: 23h 42m 32s
Count: 68
Sample: 751746229489, 662801482974, 751204849893
batch_sync_company:ids:449:all (SiSU Health UK - 531)
Config ID: 449
Type: set
Memory: 3.6 KB
TTL: 8h 7m 26s
Count: 56
Sample: 293769448657, 7905289206, 6994524653
batch_sync_contact:ids:449:all (SiSU Health UK - 531)
Config ID: 449
Type: set
Memory: 3.47 KB
TTL: 22h 45m 52s
Count: 54
Sample: 730208, 752394791155, 759217738995
batch_sync_deal:ids:439:all (Log My Care - 522)
Config ID: 439
Type: set
Memory: 3.47 KB
TTL: 9h 4m 51s
Count: 54
Sample: 364507398345, 494814103757, 494016526555
batch_sync_company:ids:373:all (KPSBremen.de - 465)
Config ID: 373
Type: set
Memory: 3.41 KB
TTL: 23h 55m 1s
Count: 53
Sample: 399250577648, 426553672928, 379424069826
batch_sync_deal:ids:449:all (SiSU Health UK - 531)
Config ID: 449
Type: set
Memory: 3.04 KB
TTL: 8h 7m 33s
Count: 47
Sample: 498503490753, 498500636859, 498501354684
batch_sync_contact:ids:331:all (The National College - 416)
Config ID: 331
Type: set
Memory: 1.6 KB
TTL: 23h 59m 35s
Count: 24
Sample: 753335460029, 759353955559, 600494578893
batch_sync_company:ids:331:all (The National College - 416)
Config ID: 331
Type: set
Memory: 1.47 KB
TTL: 23h 59m 22s
Count: 22
Sample: 23755815000, 5684894521, 3972787939
batch_sync_deal:ids:331:all (The National College - 416)
Config ID: 331
Type: set
Memory: 1.47 KB
TTL: 23h 55m 17s
Count: 22
Sample: 499035527382, 494192151741, 499111919842
batch_sync_contact:ids:488:all (MakeMyHouseGreen - 567)
Config ID: 488
Type: set
Memory: 1.41 KB
TTL: 23h 57m 17s
Count: 21
Sample: 935601, 4269001, 2258
batch_sync_contact:ids:170:all (LutherOne - 199)
Config ID: 170
Type: set
Memory: 996 B
TTL: 23h 59m 49s
Count: 14
Sample: 6438163, 18894909, 131340729177
batch_sync_contact:ids:364:all (Lead Forensics - 190)
Config ID: 364
Type: set
Memory: 932 B
TTL: 23h 56m 58s
Count: 13
Sample: 103762162328, 103730206004, 103746035125
batch_sync_contact:ids:124:all (Intruder - 149)
Config ID: 124
Type: set
Memory: 868 B
TTL: 23h 53m 21s
Count: 12
Sample: 209000212364, 72073201, 32825651463
batch_sync_contact:ids:70:all (Scoro - 93)
Config ID: 70
Type: set
Memory: 804 B
TTL: 23h 49m 7s
Count: 11
Sample: 548911252691, 549509632216, 549499217106
batch_sync_contact:ids:483:all (Veremark - 561)
Config ID: 483
Type: set
Memory: 804 B
TTL: 23h 55m 11s
Count: 11
Sample: 215753056547, 215474268483, 215540281168
batch_sync_contact:ids:363:all (Global Group - 456)
Config ID: 363
Type: set
Memory: 548 B
TTL: 23h 57m 2s
Count: 7
Sample: 156053546908, 14789232785, 1569201
batch_sync_deal:ids:455:all (Argos Security - 537)
Config ID: 455
Type: set
Memory: 548 B
TTL: 23h 54m 15s
Count: 7
Sample: 498986026223, 17924102876, 498928162009
batch_sync_deal:ids:461:all (Fieldly - 543)
Config ID: 461
Type: set
Memory: 548 B
TTL: 23h 59m 34s
Count: 7
Sample: 498984577267, 499024879840, 496749330660
batch_sync_company:ids:465:all (Spotler - 545)
Config ID: 465
Type: set
Memory: 484 B
TTL: 23h 53m 55s
Count: 6
Sample: 12886901694, 47800033493, 426487803113
batch_sync_company:ids:483:all (Veremark - 561)
Config ID: 483
Type: set
Memory: 484 B
TTL: 23h 53m 12s
Count: 6
Sample: 54056532238, 25291493956, 52568117585
batch_sync_contact:ids:465:all (Spotler - 545)
Config ID: 465
Type: set
Memory: 484 B
TTL: 23h 53m 55s
Count: 6
Sample: 25784346850, 758403684599, 758356838593
batch_sync_contact:ids:96:all (Nourish Care - 119)
Config ID: 96
Type: set
Memory: 420 B
TTL: 23h 51m 15s
Count: 5
Sample: 759339342027, 6476279789, 759338177732
batch_sync_deal:ids:241:all (PatentRenewal.com ApS - 306)
Config ID: 241
Type: set
Memory: 420 B
TTL: 23h 59m 34s
Count: 5
Sample: 57554678843, 59164863320, 40205117839
batch_sync_company:ids:175:all (Team iAM - 203)
Config ID: 175
Type: set
Memory: 356 B
TTL: 23h 52m 11s
Count: 4
Sample: 31289463313, 53432109235, 47337393078
batch_sync_contact:ids:197:all (Kindly - 264)
Config ID: 197
Type: set
Memory: 356 B
TTL: 23h 56m 33s
Count: 4
Sample: 759337959662, 759340603582, 759336916201
batch_sync_contact:ids:308:all (Foodles - 380)
Config ID: 308
Type: set
Memory: 356 B
TTL: 23h 47m 13s
Count: 4
Sample: 209605481386, 216074957452, 216074957451
batch_sync_contact:ids:461:all (Fieldly - 543)
Config ID: 461
Type: set
Memory: 356 B
TTL: 23h 59m 38s
Count: 4
Sample: 758403694783, 6338351, 755171302642
batch_sync_contact:ids:485:all (LATUS Group - 563)
Config ID: 485
Type: set
Memory: 356 B
TTL: 23h 59m 51s
Count: 4
Sample: 216014615839, 216124673101, 215534275979
batch_sync_company:ids:170:all (LutherOne - 199)
Config ID: 170
Type: set
Memory: 292 B
TTL: 23h 55m 25s
Count: 3
Sample: 5061344699, 8979817578, 53544705830
batch_sync_company:ids:197:all (Kindly - 264)
Config ID: 197
Type: set
Memory: 292 B
TTL: 23h 56m 26s
Count: 3
Sample: 426652716232, 426652949738, 426671486159
batch_sync_company:ids:436:all (Moxso - 519)
Config ID: 436
Type: set
Memory: 292 B
TTL: 23h 54m 5s
Count: 3
Sample: 5637526753, 9027001061, 426485659872
batch_sync_company:ids:455:all (Argos Security - 537)
Config ID: 455
Type: set
Memory: 292 B
TTL: 23h 49m 25s
Count: 3
Sample: 12009203674, 12897632476, 331995461840
batch_sync_contact:ids:130:all (Latana Brand Tracking - 155)
Config ID: 130
Type: set
Memory: 292 B
TTL: 23h 44m 14s
Count: 3
Sample: 216074963815, 216074963816, 216074963817
batch_sync_contact:ids:175:all (Team iAM - 203)
Config ID: 175
Type: set
Memory: 292 B
TTL: 23h 52m 37s
Count: 3
Sample: 212581164888, 216121454962, 216121861967
batch_sync_contact:ids:455:all (Argos Security - 537)
Config ID: 455
Type: set
Memory: 292 B
TTL: 23h 49m 25s
Count: 3
Sample: 15081981630, 28607253707, 589985456367
batch_sync_deal:ids:465:all (Spotler - 545)
Config ID: 465
Type: set
Memory: 292 B
TTL: 23h 54m 43s
Count: 3
Sample: 498984572105, 498986026222, 498987447516
batch_sync_company:ids:70:all (Scoro - 93)
Config ID: 70
Type: set
Memory: 228 B
TTL: 23h 48m 59s
Count: 2
Sample: 308374847674, 426652674241
batch_sync_company:ids:461:all (Fieldly - 543)
Config ID: 461
Type: set
Memory: 228 B
TTL: 23h 57m 6s
Count: 2
Sample: 612188920, 1045770343
batch_sync_contact:ids:112:all (Switchee - 137)
Config ID: 112
Type: set
Memory: 228 B
TTL: 23h 50m 12s
Count: 2
Sample: 216074959999, 216074960000
batch_sync_contact:ids:201:all (THRIVE - 266)
Config ID: 201
Type: set
Memory: 228 B
TTL: 23h 59m 17s
Count: 2
Sample: 17229652, 23550651
batch_sync_contact:ids:253:all (Zymego - 322)
Config ID: 253
Type: set
Memory: 228 B
TTL: 23h 48m 32s
Count: 2
Sample: 9236122316, 108257234125
batch_sync_contact:ids:307:all (Story Terrace Inc - 379)
Config ID: 307
Type: set
Memory: 228 B
TTL: 23h 54m 36s
Count: 2
Sample: 216118037022, 216120038928
batch_sync_contact:ids:319:all (MySalesCoach - 400)
Config ID: 319
Type: set
Memory: 228 B
TTL: 23h 51m 16s
Count: 2
Sample: 191355036878, 759224982717
batch_sync_contact:ids:335:all (Eletive - 429)
Config ID: 335
Type: set
Memory: 228 B
TTL: 23h 58m 13s
Count: 2
Sample: 159795767866, 757397522679
batch_sync_contact:ids:339:all (inspera.no - 436)
Config ID: 339
Type: set
Memory: 228 B
TTL: 23h 55m 54s
Count: 2
Sample: 183336486505, 216074960287
batch_sync_contact:ids:412:all (Antavo - 500)
Config ID: 412
Type: set
Memory: 228 B
TTL: 23h 50m 30s
Count: 2
Sample: 644080299229, 705317319867
batch_sync_deal:ids:96:all (Nourish Care - 119)
Config ID: 96
Type: set
Memory: 228 B
TTL: 23h 51m 21s
Count: 2
Sample: 13955519955, 499101468869
batch_sync_deal:ids:253:all (Zymego - 322)
Config ID: 253
Type: set
Memory: 228 B
TTL: 23h 49m 0s
Count: 2
Sample: 499101779135, 499117828335
batch_sync_company:ids:95:all (Cronofy - 118)
Config ID: 95
Type: set
Memory: 164 B
TTL: 23h 44m 9s
Count: 1
Sample: 54084980481
batch_sync_company:ids:96:all (Nourish Care - 119)
Config ID: 96
Type: set
Memory: 164 B
TTL: 23h 51m 18s
Count: 1
Sample: 231946184895
batch_sync_company:ids:112:all (Switchee - 137)
Config ID: 112
Type: set
Memory: 164 B
TTL: 23h 45m 50s
Count: 1
Sample: 30902131597
batch_sync_company:ids:124:all (Intruder - 149)
Config ID: 124
Type: set
Memory: 164 B
TTL: 23h 49m 59s
Count: 1
Sample: 19200117829
batch_sync_company:ids:130:all (Latana Brand Tracking - 155)
Config ID: 130
Type: set
Memory: 164 B
TTL: 23h 43m 46s
Count: 1
Sample: 3412118684
batch_sync_company:ids:191:all (Orlo - 253)
Config ID: 191
Type: set
Memory: 164 B
TTL: 23h 53m 53s
Count: 1
Sample: 2492067355
batch_sync_company:ids:200:all (Jobadder - 265)
Config ID: 200
Type: set
Memory: 164 B
TTL: 23h 41m 16s
Count: 1
Sample: 54051603071
batch_sync_company:ids:253:all (Zymego - 322)
Config ID: 253
Type: set
Memory: 164 B
TTL: 23h 48m 34s
Count: 1
Sample: 45363246315
batch_sync_company:ids:295:all (APLYiD - 367)
Config ID: 295
Type: set
Memory: 164 B
TTL: 23h 43m 38s
Count: 1
Sample: 426645956821
batch_sync_company:ids:308:all (Foodles - 380)
Config ID: 308
Type: set
Memory: 164 B
TTL: 23h 43m 36s
Count: 1
Sample: 4623764126
batch_sync_company:ids:485:all (LATUS Group - 563)
Config ID: 485
Type: set
Memory: 164 B
TTL: 23h 59m 51s
Count: 1
Sample: 16393088676
batch_sync_contact:ids:81:all (Hurree - 104)
Config ID: 81
Type: set
Memory: 164 B
TTL: 23h 52m 48s
Count: 1
Sample: 216123172492
batch_sync_contact:ids:86:all (Teamtailor - 109)
Config ID: 86
Type: set
Memory: 164 B
TTL: 5h 35m 55s
Count: 1
Sample: 128480851
batch_sync_contact:ids:95:all (Cronofy - 118)
Config ID: 95
Type: set
Memory: 164 B
TTL: 23h 44m 9s
Count: 1
Sample: 216119828808
batch_sync_contact:ids:191:all (Orlo - 253)
Config ID: 191
Type: set
Memory: 164 B
TTL: 23h 43m 42s
Count: 1
Sample: 185805924409
batch_sync_contact:ids:200:all (Jobadder - 265)
Config ID: 200
Type: set
Memory: 164 B
TTL: 23h 41m 16s
Count: 1
Sample: 216122837601
batch_sync_contact:ids:255:all (Screendragon - 324)
Config ID: 255
Type: set
Memory: 164 B
TTL: 23h 44m 22s
Count: 1
Sample: 215982276420
batch_sync_contact:ids:278:all (Akixi - 348)
Config ID: 278
Type: set
Memory: 164 B
TTL: 23h 46m 52s
Count: 1
Sample: 758404365499
batch_sync_contact:ids:284:all (Brickflow (Property Funding Hub Ltd) - 354)
Config ID: 284
Type: set
Memory: 164 B
TTL: 23h 44m 47s
Count: 1
Sample: 195262486661
batch_sync_contact:ids:295:all (APLYiD - 367)
Config ID: 295
Type: set
Memory: 164 B
TTL: 23h 44m 11s
Count: 1
Sample: 759223062753
batch_sync_contact:ids:322:all (Talkative - 403)
Config ID: 322
Type: set
Memory: 164 B
TTL: 23h 56m 55s
Count: 1
Sample: 751262016755
batch_sync_contact:ids:367:all (Sensat - 459)
Config ID: 367
Type: set
Memory: 164 B
TTL: 23h 51m 33s
Count: 1
Sample: 215694537008
batch_sync_contact:ids:403:all (Fundrella - 491)
Config ID: 403
Type: set
Memory: 164 B
TTL: 23h 43m 28s
Count: 1
Sample: 147101
batch_sync_contact:ids:436:all (Moxso - 519)
Config ID: 436
Type: set
Memory: 164 B
TTL: 23h 54m 15s
Count: 1
Sample: 294701
batch_sync_contact:ids:491:all (CreateFuture - 570)
Config ID: 491
Type: set
Memory: 164 B
TTL: 23h 51m 48s
Count: 1
Sample: 214629839743
batch_sync_deal:ids:191:all (Orlo - 253)
Config ID: 191
Type: set
Memory: 164 B
TTL: 23h 54m 11s
Count: 1
Sample: 59230347609
batch_sync_deal:ids:200:all (Jobadder - 265)
Config ID: 200
Type: set
Memory: 164 B
TTL: 23h 50m 5s
Count: 1
Sample: 58878310503
batch_sync_deal:ids:255:all (Screendragon - 324)
Config ID: 255
Type: set
Memory: 164 B
TTL: 23h 44m 20s
Count: 1
Sample: 59243074931
batch_sync_deal:ids:335:all (Eletive - 429)
Config ID: 335
Type: set
Memory: 164 B
TTL: 23h 39m 13s
Count: 1
Sample: 498499653826
batch_sync_deal:ids:370:all (Buynomics - 462)
Config ID: 370
Type: set
Memory: 164 B
TTL: 5h 19m 0s
Count: 1
Sample: 10644871427
batch_sync_deal:ids:373:all (KPSBremen.de - 465)
Config ID: 373
Type: set
Memory: 164 B
TTL: 2h 41m 0s
Count: 1
Sample: 493652735187
batch_sync_deal:ids:483:all (Veremark - 561)
Config ID: 483
Type: set
Memory: 164 B
TTL: 23h 47m 59s
Count: 1
Sample: 59186288665
root@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook redis --key-type ids --detailed -T 459
INFO Scanning Redis keys (type: ids).
Total keys found [PASSWORD_DOTS] 1
Total IDs across all keys [PASSWORD_DOTS] 1
📊 Memory Overview
Total Memory [PASSWORD_DOTS] 164 B
ids keys [PASSWORD_DOTS] 164 B
batch_sync_contact:ids:367:all (Sensat - 459)
Config ID: 367
Type: set
Memory: 164 B
TTL: 23h 51m 6s
Count: 1
Sample: 215694537008
root@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook metrics -T 459
INFO Webhook Metrics — 2026-04-17.
📊 Webhook Metrics Summary
==========================================
Date: 2026-04-17
Filters: Config: 367
Total Teams: 1
Total Webhooks: 7
🏢 Config 367 (Sensat - 459) - 7 webhooks
📦 contact: 6 webhooks
🔔 property_change: 6 events, 5 properties
📦 deal: 1 webhooks
🔔 property_change: 1 events, 1 properties
root@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook metrics -T 459 --from 2026-04-15
INFO Managing webhook metrics for date range.
Date Range [PASSWORD_DOTS] 2026-04-15 to 2026-04-17
Config ID [PASSWORD_DOTS] 367
📊 Range Summary
Date Range [PASSWORD_DOTS] 2026-04-15 to 2026-04-17
Total Days [PASSWORD_DOTS] 3
Oldest Data Age [PASSWORD_DOTS] 2.0 days ago
Total Webhooks [PASSWORD_DOTS] 1,065,651
Daily Average [PASSWORD_DOTS] 355,217.00
Active Companies [PASSWORD_DOTS] 89
🏢 Company Details
Company 367 (Sensat - 459)
Total Webhooks: 796
Days Active: 3/3
Daily Average: 265.33
root@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook metrics -T 459 --from 2026-04-15 -D
INFO Managing webhook metrics for date range.
Date Range [PASSWORD_DOTS] 2026-04-15 to 2026-04-17
Config ID [PASSWORD_DOTS] 367
📊 Range Summary
Date Range [PASSWORD_DOTS] 2026-04-15 to 2026-04-17
Total Days [PASSWORD_DOTS] 3
Oldest Data Age [PASSWORD_DOTS] 2.0 days ago
Total Webhooks [PASSWORD_DOTS] 1,065,677
Daily Average [PASSWORD_DOTS] 355,225.67
Active Companies [PASSWORD_DOTS] 89
📅 Daily Breakdown
2026-04-15: 335,647 webhooks, 88 companies active
2026-04-16: 671,679 webhooks, 88 companies active
2026-04-17: 58,351 webhooks, 68 companies active
🏢 Company Details
Company 367 (Sensat - 459)
Total Webhooks: 796
Days Active: 3/3
Daily Average: 265.33
company (114 total, avg: 38)
association_change: 92 total, avg: 46, active: 2 days
creation: 3 total, avg: 1.5, active: 2 days
property_change: 19 total, avg: 9.5, active: 2 days
Unique properties: 4
Top properties: hubspot_owner_id(12), domain(3), name(3), phone(1)
deal (164 total, avg: 54.67)
property_change: 164 total, avg: 54.67, active: 3 days
Unique properties: 8
Top properties: notes_last_updated(134), closedate(7), dealstage(5), hs_deal_stage_probability(5), hs_manual_forecast_category(5)
contact (518 total, avg: 172.67)
property_change: 390 total, avg: 130, active: 3 days
Unique properties: 9
Top properties: hubspot_owner_id(186), firstname(35), email(35), associatedcompanyid(33), country(33)
creation: 36 total, avg: 18, active: 2 days
association_change: 92 total, avg: 46, active: 2 days
root@67e84f80b9d1:/home/jiminny#
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
✳ Review screenpipe usage and Boosteroid integration (claude)
Close Tab
ec2-user@ip-10-30-159-186:~ (nc)
Close Tab
ec2-user@ip-10-20-6-111:~ (nc)
Close Tab
⌥⌘1
ec2-user@ip-10-20-6-111:~...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 137 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \nLast login: Fri Apr 17 10:32:22 on ttys013\n/Users/lukas/.zprofile:138: unmatched \"\n/Users/lukas/.zprofile:138: unmatched \"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ % veu\nzsh: command not found: veu\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ % zp\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ % ssh jiminny-eu-ecs1\nEnter MFA code for arn:aws:iam::438740370364:mfa/lukas.kovalik@jiminny.com: \nWarning: Permanently added 'jiminny-eu-ecs1' (ED25519) to the list of known hosts.\n\nA newer release of \"Amazon Linux\" is available.\n Version 2023.10.20260105:\n Version 2023.10.20260120:\n Version 2023.10.20260202:\n Version 2023.10.20260216:\n Version 2023.10.20260302:\n Version 2023.10.20260325:\n Version 2023.10.20260330:\n Version 2023.11.20260406:\n Version 2023.11.20260413:\n Version 2023.8.20250707:\n Version 2023.8.20250715:\n Version 2023.8.20250721:\n Version 2023.8.20250808:\n Version 2023.8.20250818:\n Version 2023.8.20250908:\n Version 2023.8.20250915:\n Version 2023.9.20250929:\n Version 2023.9.20251014:\n Version 2023.9.20251020:\n Version 2023.9.20251027:\n Version 2023.9.20251105:\n Version 2023.9.20251110:\n Version 2023.9.20251117:\n Version 2023.9.20251208:\nRun \"/usr/bin/dnf check-release-update\" for full release and version update info\n , #_\n ~\\_ ####_\n ~~ \\_#####\\\n ~~ \\###|\n ~~ \\#/ ___ Amazon Linux 2023 (ECS Optimized)\n ~~ V~' '->\n ~~~ /\n ~~._. _/\n _/ _/\n _/m/'\n\nFor documentation, visit http://aws.amazon.com/documentation/ecs\nLast login: Thu Apr 16 11:09:44 2026 from 10.20.163.228\n[ec2-user@ip-10-20-6-111 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook redis --key-type ids --detailed \n\n INFO Scanning Redis keys (type: ids). \n\n\n Total keys found .............................................................................................................................. 87 \n Total IDs across all keys ................................................................................................................. 18,991 \n\n📊\u0000 Memory Overview\n Total Memory ............................................................................................................................. 1.17 MB \n ids keys ................................................................................................................................. 1.17 MB \n\nbatch_sync_deal:ids:338:all (Formalize - 432)\n Config ID: 338\n Type: set\n Memory: 582.22 KB\n TTL: 23h 26m 22s\n Count: 9314\n Sample: 36225705250, 29787925122, 329967686878\n\nbatch_sync_contact:ids:439:all (Log My Care - 522)\n Config ID: 439\n Type: set\n Memory: 203.66 KB\n TTL: 15h 27m 1s\n Count: 3257\n Sample: 4723151, 569384381669, 751397913846\n\nbatch_sync_contact:ids:370:all (Buynomics - 462)\n Config ID: 370\n Type: set\n Memory: 159.54 KB\n TTL: 23h 58m 24s\n Count: 2551\n Sample: 7855597, 214629714698, 1081551\n\nbatch_sync_company:ids:439:all (Log My Care - 522)\n Config ID: 439\n Type: set\n Memory: 143.97 KB\n TTL: 15h 26m 38s\n Count: 2302\n Sample: 97509907664, 287839612106, 13347420118\n\nbatch_sync_company:ids:370:all (Buynomics - 462)\n Config ID: 370\n Type: set\n Memory: 28.54 KB\n TTL: 23h 57m 58s\n Count: 455\n Sample: 53416555927, 5299782086, 48272143029\n\nbatch_sync_company:ids:346:all (Global Expansion - 444)\n Config ID: 346\n Type: set\n Memory: 17.66 KB\n TTL: 23h 59m 57s\n Count: 281\n Sample: 54084980525, 31037091957, 16036051109\n\nbatch_sync_contact:ids:346:all (Global Expansion - 444)\n Config ID: 346\n Type: set\n Memory: 12.6 KB\n TTL: 23h 59m 57s\n Count: 200\n Sample: 216133633092, 216059621965, 216123582828\n\nbatch_sync_contact:ids:373:all (KPSBremen.de - 465)\n Config ID: 373\n Type: set\n Memory: 4.35 KB\n TTL: 23h 42m 32s\n Count: 68\n Sample: 751746229489, 662801482974, 751204849893\n\nbatch_sync_company:ids:449:all (SiSU Health UK - 531)\n Config ID: 449\n Type: set\n Memory: 3.6 KB\n TTL: 8h 7m 26s\n Count: 56\n Sample: 293769448657, 7905289206, 6994524653\n\nbatch_sync_contact:ids:449:all (SiSU Health UK - 531)\n Config ID: 449\n Type: set\n Memory: 3.47 KB\n TTL: 22h 45m 52s\n Count: 54\n Sample: 730208, 752394791155, 759217738995\n\nbatch_sync_deal:ids:439:all (Log My Care - 522)\n Config ID: 439\n Type: set\n Memory: 3.47 KB\n TTL: 9h 4m 51s\n Count: 54\n Sample: 364507398345, 494814103757, 494016526555\n\nbatch_sync_company:ids:373:all (KPSBremen.de - 465)\n Config ID: 373\n Type: set\n Memory: 3.41 KB\n TTL: 23h 55m 1s\n Count: 53\n Sample: 399250577648, 426553672928, 379424069826\n\nbatch_sync_deal:ids:449:all (SiSU Health UK - 531)\n Config ID: 449\n Type: set\n Memory: 3.04 KB\n TTL: 8h 7m 33s\n Count: 47\n Sample: 498503490753, 498500636859, 498501354684\n\nbatch_sync_contact:ids:331:all (The National College - 416)\n Config ID: 331\n Type: set\n Memory: 1.6 KB\n TTL: 23h 59m 35s\n Count: 24\n Sample: 753335460029, 759353955559, 600494578893\n\nbatch_sync_company:ids:331:all (The National College - 416)\n Config ID: 331\n Type: set\n Memory: 1.47 KB\n TTL: 23h 59m 22s\n Count: 22\n Sample: 23755815000, 5684894521, 3972787939\n\nbatch_sync_deal:ids:331:all (The National College - 416)\n Config ID: 331\n Type: set\n Memory: 1.47 KB\n TTL: 23h 55m 17s\n Count: 22\n Sample: 499035527382, 494192151741, 499111919842\n\nbatch_sync_contact:ids:488:all (MakeMyHouseGreen - 567)\n Config ID: 488\n Type: set\n Memory: 1.41 KB\n TTL: 23h 57m 17s\n Count: 21\n Sample: 935601, 4269001, 2258\n\nbatch_sync_contact:ids:170:all (LutherOne - 199)\n Config ID: 170\n Type: set\n Memory: 996 B\n TTL: 23h 59m 49s\n Count: 14\n Sample: 6438163, 18894909, 131340729177\n\nbatch_sync_contact:ids:364:all (Lead Forensics - 190)\n Config ID: 364\n Type: set\n Memory: 932 B\n TTL: 23h 56m 58s\n Count: 13\n Sample: 103762162328, 103730206004, 103746035125\n\nbatch_sync_contact:ids:124:all (Intruder - 149)\n Config ID: 124\n Type: set\n Memory: 868 B\n TTL: 23h 53m 21s\n Count: 12\n Sample: 209000212364, 72073201, 32825651463\n\nbatch_sync_contact:ids:70:all (Scoro - 93)\n Config ID: 70\n Type: set\n Memory: 804 B\n TTL: 23h 49m 7s\n Count: 11\n Sample: 548911252691, 549509632216, 549499217106\n\nbatch_sync_contact:ids:483:all (Veremark - 561)\n Config ID: 483\n Type: set\n Memory: 804 B\n TTL: 23h 55m 11s\n Count: 11\n Sample: 215753056547, 215474268483, 215540281168\n\nbatch_sync_contact:ids:363:all (Global Group - 456)\n Config ID: 363\n Type: set\n Memory: 548 B\n TTL: 23h 57m 2s\n Count: 7\n Sample: 156053546908, 14789232785, 1569201\n\nbatch_sync_deal:ids:455:all (Argos Security - 537)\n Config ID: 455\n Type: set\n Memory: 548 B\n TTL: 23h 54m 15s\n Count: 7\n Sample: 498986026223, 17924102876, 498928162009\n\nbatch_sync_deal:ids:461:all (Fieldly - 543)\n Config ID: 461\n Type: set\n Memory: 548 B\n TTL: 23h 59m 34s\n Count: 7\n Sample: 498984577267, 499024879840, 496749330660\n\nbatch_sync_company:ids:465:all (Spotler - 545)\n Config ID: 465\n Type: set\n Memory: 484 B\n TTL: 23h 53m 55s\n Count: 6\n Sample: 12886901694, 47800033493, 426487803113\n\nbatch_sync_company:ids:483:all (Veremark - 561)\n Config ID: 483\n Type: set\n Memory: 484 B\n TTL: 23h 53m 12s\n Count: 6\n Sample: 54056532238, 25291493956, 52568117585\n\nbatch_sync_contact:ids:465:all (Spotler - 545)\n Config ID: 465\n Type: set\n Memory: 484 B\n TTL: 23h 53m 55s\n Count: 6\n Sample: 25784346850, 758403684599, 758356838593\n\nbatch_sync_contact:ids:96:all (Nourish Care - 119)\n Config ID: 96\n Type: set\n Memory: 420 B\n TTL: 23h 51m 15s\n Count: 5\n Sample: 759339342027, 6476279789, 759338177732\n\nbatch_sync_deal:ids:241:all (PatentRenewal.com ApS - 306)\n Config ID: 241\n Type: set\n Memory: 420 B\n TTL: 23h 59m 34s\n Count: 5\n Sample: 57554678843, 59164863320, 40205117839\n\nbatch_sync_company:ids:175:all (Team iAM - 203)\n Config ID: 175\n Type: set\n Memory: 356 B\n TTL: 23h 52m 11s\n Count: 4\n Sample: 31289463313, 53432109235, 47337393078\n\nbatch_sync_contact:ids:197:all (Kindly - 264)\n Config ID: 197\n Type: set\n Memory: 356 B\n TTL: 23h 56m 33s\n Count: 4\n Sample: 759337959662, 759340603582, 759336916201\n\nbatch_sync_contact:ids:308:all (Foodles - 380)\n Config ID: 308\n Type: set\n Memory: 356 B\n TTL: 23h 47m 13s\n Count: 4\n Sample: 209605481386, 216074957452, 216074957451\n\nbatch_sync_contact:ids:461:all (Fieldly - 543)\n Config ID: 461\n Type: set\n Memory: 356 B\n TTL: 23h 59m 38s\n Count: 4\n Sample: 758403694783, 6338351, 755171302642\n\nbatch_sync_contact:ids:485:all (LATUS Group - 563)\n Config ID: 485\n Type: set\n Memory: 356 B\n TTL: 23h 59m 51s\n Count: 4\n Sample: 216014615839, 216124673101, 215534275979\n\nbatch_sync_company:ids:170:all (LutherOne - 199)\n Config ID: 170\n Type: set\n Memory: 292 B\n TTL: 23h 55m 25s\n Count: 3\n Sample: 5061344699, 8979817578, 53544705830\n\nbatch_sync_company:ids:197:all (Kindly - 264)\n Config ID: 197\n Type: set\n Memory: 292 B\n TTL: 23h 56m 26s\n Count: 3\n Sample: 426652716232, 426652949738, 426671486159\n\nbatch_sync_company:ids:436:all (Moxso - 519)\n Config ID: 436\n Type: set\n Memory: 292 B\n TTL: 23h 54m 5s\n Count: 3\n Sample: 5637526753, 9027001061, 426485659872\n\nbatch_sync_company:ids:455:all (Argos Security - 537)\n Config ID: 455\n Type: set\n Memory: 292 B\n TTL: 23h 49m 25s\n Count: 3\n Sample: 12009203674, 12897632476, 331995461840\n\nbatch_sync_contact:ids:130:all (Latana Brand Tracking - 155)\n Config ID: 130\n Type: set\n Memory: 292 B\n TTL: 23h 44m 14s\n Count: 3\n Sample: 216074963815, 216074963816, 216074963817\n\nbatch_sync_contact:ids:175:all (Team iAM - 203)\n Config ID: 175\n Type: set\n Memory: 292 B\n TTL: 23h 52m 37s\n Count: 3\n Sample: 212581164888, 216121454962, 216121861967\n\nbatch_sync_contact:ids:455:all (Argos Security - 537)\n Config ID: 455\n Type: set\n Memory: 292 B\n TTL: 23h 49m 25s\n Count: 3\n Sample: 15081981630, 28607253707, 589985456367\n\nbatch_sync_deal:ids:465:all (Spotler - 545)\n Config ID: 465\n Type: set\n Memory: 292 B\n TTL: 23h 54m 43s\n Count: 3\n Sample: 498984572105, 498986026222, 498987447516\n\nbatch_sync_company:ids:70:all (Scoro - 93)\n Config ID: 70\n Type: set\n Memory: 228 B\n TTL: 23h 48m 59s\n Count: 2\n Sample: 308374847674, 426652674241\n\nbatch_sync_company:ids:461:all (Fieldly - 543)\n Config ID: 461\n Type: set\n Memory: 228 B\n TTL: 23h 57m 6s\n Count: 2\n Sample: 612188920, 1045770343\n\nbatch_sync_contact:ids:112:all (Switchee - 137)\n Config ID: 112\n Type: set\n Memory: 228 B\n TTL: 23h 50m 12s\n Count: 2\n Sample: 216074959999, 216074960000\n\nbatch_sync_contact:ids:201:all (THRIVE - 266)\n Config ID: 201\n Type: set\n Memory: 228 B\n TTL: 23h 59m 17s\n Count: 2\n Sample: 17229652, 23550651\n\nbatch_sync_contact:ids:253:all (Zymego - 322)\n Config ID: 253\n Type: set\n Memory: 228 B\n TTL: 23h 48m 32s\n Count: 2\n Sample: 9236122316, 108257234125\n\nbatch_sync_contact:ids:307:all (Story Terrace Inc - 379)\n Config ID: 307\n Type: set\n Memory: 228 B\n TTL: 23h 54m 36s\n Count: 2\n Sample: 216118037022, 216120038928\n\nbatch_sync_contact:ids:319:all (MySalesCoach - 400)\n Config ID: 319\n Type: set\n Memory: 228 B\n TTL: 23h 51m 16s\n Count: 2\n Sample: 191355036878, 759224982717\n\nbatch_sync_contact:ids:335:all (Eletive - 429)\n Config ID: 335\n Type: set\n Memory: 228 B\n TTL: 23h 58m 13s\n Count: 2\n Sample: 159795767866, 757397522679\n\nbatch_sync_contact:ids:339:all (inspera.no - 436)\n Config ID: 339\n Type: set\n Memory: 228 B\n TTL: 23h 55m 54s\n Count: 2\n Sample: 183336486505, 216074960287\n\nbatch_sync_contact:ids:412:all (Antavo - 500)\n Config ID: 412\n Type: set\n Memory: 228 B\n TTL: 23h 50m 30s\n Count: 2\n Sample: 644080299229, 705317319867\n\nbatch_sync_deal:ids:96:all (Nourish Care - 119)\n Config ID: 96\n Type: set\n Memory: 228 B\n TTL: 23h 51m 21s\n Count: 2\n Sample: 13955519955, 499101468869\n\nbatch_sync_deal:ids:253:all (Zymego - 322)\n Config ID: 253\n Type: set\n Memory: 228 B\n TTL: 23h 49m 0s\n Count: 2\n Sample: 499101779135, 499117828335\n\nbatch_sync_company:ids:95:all (Cronofy - 118)\n Config ID: 95\n Type: set\n Memory: 164 B\n TTL: 23h 44m 9s\n Count: 1\n Sample: 54084980481\n\nbatch_sync_company:ids:96:all (Nourish Care - 119)\n Config ID: 96\n Type: set\n Memory: 164 B\n TTL: 23h 51m 18s\n Count: 1\n Sample: 231946184895\n\nbatch_sync_company:ids:112:all (Switchee - 137)\n Config ID: 112\n Type: set\n Memory: 164 B\n TTL: 23h 45m 50s\n Count: 1\n Sample: 30902131597\n\nbatch_sync_company:ids:124:all (Intruder - 149)\n Config ID: 124\n Type: set\n Memory: 164 B\n TTL: 23h 49m 59s\n Count: 1\n Sample: 19200117829\n\nbatch_sync_company:ids:130:all (Latana Brand Tracking - 155)\n Config ID: 130\n Type: set\n Memory: 164 B\n TTL: 23h 43m 46s\n Count: 1\n Sample: 3412118684\n\nbatch_sync_company:ids:191:all (Orlo - 253)\n Config ID: 191\n Type: set\n Memory: 164 B\n TTL: 23h 53m 53s\n Count: 1\n Sample: 2492067355\n\nbatch_sync_company:ids:200:all (Jobadder - 265)\n Config ID: 200\n Type: set\n Memory: 164 B\n TTL: 23h 41m 16s\n Count: 1\n Sample: 54051603071\n\nbatch_sync_company:ids:253:all (Zymego - 322)\n Config ID: 253\n Type: set\n Memory: 164 B\n TTL: 23h 48m 34s\n Count: 1\n Sample: 45363246315\n\nbatch_sync_company:ids:295:all (APLYiD - 367)\n Config ID: 295\n Type: set\n Memory: 164 B\n TTL: 23h 43m 38s\n Count: 1\n Sample: 426645956821\n\nbatch_sync_company:ids:308:all (Foodles - 380)\n Config ID: 308\n Type: set\n Memory: 164 B\n TTL: 23h 43m 36s\n Count: 1\n Sample: 4623764126\n\nbatch_sync_company:ids:485:all (LATUS Group - 563)\n Config ID: 485\n Type: set\n Memory: 164 B\n TTL: 23h 59m 51s\n Count: 1\n Sample: 16393088676\n\nbatch_sync_contact:ids:81:all (Hurree - 104)\n Config ID: 81\n Type: set\n Memory: 164 B\n TTL: 23h 52m 48s\n Count: 1\n Sample: 216123172492\n\nbatch_sync_contact:ids:86:all (Teamtailor - 109)\n Config ID: 86\n Type: set\n Memory: 164 B\n TTL: 5h 35m 55s\n Count: 1\n Sample: 128480851\n\nbatch_sync_contact:ids:95:all (Cronofy - 118)\n Config ID: 95\n Type: set\n Memory: 164 B\n TTL: 23h 44m 9s\n Count: 1\n Sample: 216119828808\n\nbatch_sync_contact:ids:191:all (Orlo - 253)\n Config ID: 191\n Type: set\n Memory: 164 B\n TTL: 23h 43m 42s\n Count: 1\n Sample: 185805924409\n\nbatch_sync_contact:ids:200:all (Jobadder - 265)\n Config ID: 200\n Type: set\n Memory: 164 B\n TTL: 23h 41m 16s\n Count: 1\n Sample: 216122837601\n\nbatch_sync_contact:ids:255:all (Screendragon - 324)\n Config ID: 255\n Type: set\n Memory: 164 B\n TTL: 23h 44m 22s\n Count: 1\n Sample: 215982276420\n\nbatch_sync_contact:ids:278:all (Akixi - 348)\n Config ID: 278\n Type: set\n Memory: 164 B\n TTL: 23h 46m 52s\n Count: 1\n Sample: 758404365499\n\nbatch_sync_contact:ids:284:all (Brickflow (Property Funding Hub Ltd) - 354)\n Config ID: 284\n Type: set\n Memory: 164 B\n TTL: 23h 44m 47s\n Count: 1\n Sample: 195262486661\n\nbatch_sync_contact:ids:295:all (APLYiD - 367)\n Config ID: 295\n Type: set\n Memory: 164 B\n TTL: 23h 44m 11s\n Count: 1\n Sample: 759223062753\n\nbatch_sync_contact:ids:322:all (Talkative - 403)\n Config ID: 322\n Type: set\n Memory: 164 B\n TTL: 23h 56m 55s\n Count: 1\n Sample: 751262016755\n\nbatch_sync_contact:ids:367:all (Sensat - 459)\n Config ID: 367\n Type: set\n Memory: 164 B\n TTL: 23h 51m 33s\n Count: 1\n Sample: 215694537008\n\nbatch_sync_contact:ids:403:all (Fundrella - 491)\n Config ID: 403\n Type: set\n Memory: 164 B\n TTL: 23h 43m 28s\n Count: 1\n Sample: 147101\n\nbatch_sync_contact:ids:436:all (Moxso - 519)\n Config ID: 436\n Type: set\n Memory: 164 B\n TTL: 23h 54m 15s\n Count: 1\n Sample: 294701\n\nbatch_sync_contact:ids:491:all (CreateFuture - 570)\n Config ID: 491\n Type: set\n Memory: 164 B\n TTL: 23h 51m 48s\n Count: 1\n Sample: 214629839743\n\nbatch_sync_deal:ids:191:all (Orlo - 253)\n Config ID: 191\n Type: set\n Memory: 164 B\n TTL: 23h 54m 11s\n Count: 1\n Sample: 59230347609\n\nbatch_sync_deal:ids:200:all (Jobadder - 265)\n Config ID: 200\n Type: set\n Memory: 164 B\n TTL: 23h 50m 5s\n Count: 1\n Sample: 58878310503\n\nbatch_sync_deal:ids:255:all (Screendragon - 324)\n Config ID: 255\n Type: set\n Memory: 164 B\n TTL: 23h 44m 20s\n Count: 1\n Sample: 59243074931\n\nbatch_sync_deal:ids:335:all (Eletive - 429)\n Config ID: 335\n Type: set\n Memory: 164 B\n TTL: 23h 39m 13s\n Count: 1\n Sample: 498499653826\n\nbatch_sync_deal:ids:370:all (Buynomics - 462)\n Config ID: 370\n Type: set\n Memory: 164 B\n TTL: 5h 19m 0s\n Count: 1\n Sample: 10644871427\n\nbatch_sync_deal:ids:373:all (KPSBremen.de - 465)\n Config ID: 373\n Type: set\n Memory: 164 B\n TTL: 2h 41m 0s\n Count: 1\n Sample: 493652735187\n\nbatch_sync_deal:ids:483:all (Veremark - 561)\n Config ID: 483\n Type: set\n Memory: 164 B\n TTL: 23h 47m 59s\n Count: 1\n Sample: 59186288665\n\nroot@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook redis --key-type ids --detailed -T 459\n\n INFO Scanning Redis keys (type: ids). \n\n\n Total keys found ............................................................................................................................... 1 \n Total IDs across all keys ...................................................................................................................... 1 \n\n📊\u0000 Memory Overview\n Total Memory ............................................................................................................................... 164 B \n ids keys ................................................................................................................................... 164 B \n\nbatch_sync_contact:ids:367:all (Sensat - 459)\n Config ID: 367\n Type: set\n Memory: 164 B\n TTL: 23h 51m 6s\n Count: 1\n Sample: 215694537008\n\nroot@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook metrics -T 459\n\n INFO Webhook Metrics — 2026-04-17. \n\n📊\u0000 Webhook Metrics Summary\n==========================================\nDate: 2026-04-17\nFilters: Config: 367\nTotal Teams: 1\nTotal Webhooks: 7\n\n🏢\u0000 Config 367 (Sensat - 459) - 7 webhooks\n 📦\u0000 contact: 6 webhooks\n 🔔\u0000 property_change: 6 events, 5 properties\n 📦\u0000 deal: 1 webhooks\n 🔔\u0000 property_change: 1 events, 1 properties\n\nroot@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook metrics -T 459 --from 2026-04-15\n\n INFO Managing webhook metrics for date range. \n\n Date Range .............................................................................................................. 2026-04-15 to 2026-04-17 \n Config ID .................................................................................................................................... 367 \n\n📊\u0000 Range Summary\n Date Range .............................................................................................................. 2026-04-15 to 2026-04-17 \n Total Days ..................................................................................................................................... 3 \n Oldest Data Age ..................................................................................................................... 2.0 days ago \n Total Webhooks ......................................................................................................................... 1,065,651 \n Daily Average ......................................................................................................................... 355,217.00 \n Active Companies .............................................................................................................................. 89 \n\n🏢\u0000 Company Details\n\n Company 367 (Sensat - 459)\n Total Webhooks: 796\n Days Active: 3/3\n Daily Average: 265.33\nroot@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook metrics -T 459 --from 2026-04-15 -D\n\n INFO Managing webhook metrics for date range. \n\n Date Range .............................................................................................................. 2026-04-15 to 2026-04-17 \n Config ID .................................................................................................................................... 367 \n\n📊\u0000 Range Summary\n Date Range .............................................................................................................. 2026-04-15 to 2026-04-17 \n Total Days ..................................................................................................................................... 3 \n Oldest Data Age ..................................................................................................................... 2.0 days ago \n Total Webhooks ......................................................................................................................... 1,065,677 \n Daily Average ......................................................................................................................... 355,225.67 \n Active Companies .............................................................................................................................. 89 \n\n📅\u0000 Daily Breakdown\n 2026-04-15: 335,647 webhooks, 88 companies active\n 2026-04-16: 671,679 webhooks, 88 companies active\n 2026-04-17: 58,351 webhooks, 68 companies active\n\n🏢\u0000 Company Details\n\n Company 367 (Sensat - 459)\n Total Webhooks: 796\n Days Active: 3/3\n Daily Average: 265.33\n company (114 total, avg: 38)\n association_change: 92 total, avg: 46, active: 2 days\n creation: 3 total, avg: 1.5, active: 2 days\n property_change: 19 total, avg: 9.5, active: 2 days\n Unique properties: 4\n Top properties: hubspot_owner_id(12), domain(3), name(3), phone(1)\n deal (164 total, avg: 54.67)\n property_change: 164 total, avg: 54.67, active: 3 days\n Unique properties: 8\n Top properties: notes_last_updated(134), closedate(7), dealstage(5), hs_deal_stage_probability(5), hs_manual_forecast_category(5)\n contact (518 total, avg: 172.67)\n property_change: 390 total, avg: 130, active: 3 days\n Unique properties: 9\n Top properties: hubspot_owner_id(186), firstname(35), email(35), associatedcompanyid(33), country(33)\n creation: 36 total, avg: 18, active: 2 days\n association_change: 92 total, avg: 46, active: 2 days\nroot@67e84f80b9d1:/home/jiminny#","depth":4,"value":"UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 137 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \nLast login: Fri Apr 17 10:32:22 on ttys013\n/Users/lukas/.zprofile:138: unmatched \"\n/Users/lukas/.zprofile:138: unmatched \"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ % veu\nzsh: command not found: veu\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ % zp\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ % ssh jiminny-eu-ecs1\nEnter MFA code for arn:aws:iam::438740370364:mfa/lukas.kovalik@jiminny.com: \nWarning: Permanently added 'jiminny-eu-ecs1' (ED25519) to the list of known hosts.\n\nA newer release of \"Amazon Linux\" is available.\n Version 2023.10.20260105:\n Version 2023.10.20260120:\n Version 2023.10.20260202:\n Version 2023.10.20260216:\n Version 2023.10.20260302:\n Version 2023.10.20260325:\n Version 2023.10.20260330:\n Version 2023.11.20260406:\n Version 2023.11.20260413:\n Version 2023.8.20250707:\n Version 2023.8.20250715:\n Version 2023.8.20250721:\n Version 2023.8.20250808:\n Version 2023.8.20250818:\n Version 2023.8.20250908:\n Version 2023.8.20250915:\n Version 2023.9.20250929:\n Version 2023.9.20251014:\n Version 2023.9.20251020:\n Version 2023.9.20251027:\n Version 2023.9.20251105:\n Version 2023.9.20251110:\n Version 2023.9.20251117:\n Version 2023.9.20251208:\nRun \"/usr/bin/dnf check-release-update\" for full release and version update info\n , #_\n ~\\_ ####_\n ~~ \\_#####\\\n ~~ \\###|\n ~~ \\#/ ___ Amazon Linux 2023 (ECS Optimized)\n ~~ V~' '->\n ~~~ /\n ~~._. _/\n _/ _/\n _/m/'\n\nFor documentation, visit http://aws.amazon.com/documentation/ecs\nLast login: Thu Apr 16 11:09:44 2026 from 10.20.163.228\n[ec2-user@ip-10-20-6-111 ~]$ docker exec -it $(docker ps --format \"{{.ID}}\" --filter \"name=ecs-worker\" | head -1) /bin/bash -c \"cd /home/jiminny && bash\"\nroot@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook redis --key-type ids --detailed \n\n INFO Scanning Redis keys (type: ids). \n\n\n Total keys found .............................................................................................................................. 87 \n Total IDs across all keys ................................................................................................................. 18,991 \n\n📊\u0000 Memory Overview\n Total Memory ............................................................................................................................. 1.17 MB \n ids keys ................................................................................................................................. 1.17 MB \n\nbatch_sync_deal:ids:338:all (Formalize - 432)\n Config ID: 338\n Type: set\n Memory: 582.22 KB\n TTL: 23h 26m 22s\n Count: 9314\n Sample: 36225705250, 29787925122, 329967686878\n\nbatch_sync_contact:ids:439:all (Log My Care - 522)\n Config ID: 439\n Type: set\n Memory: 203.66 KB\n TTL: 15h 27m 1s\n Count: 3257\n Sample: 4723151, 569384381669, 751397913846\n\nbatch_sync_contact:ids:370:all (Buynomics - 462)\n Config ID: 370\n Type: set\n Memory: 159.54 KB\n TTL: 23h 58m 24s\n Count: 2551\n Sample: 7855597, 214629714698, 1081551\n\nbatch_sync_company:ids:439:all (Log My Care - 522)\n Config ID: 439\n Type: set\n Memory: 143.97 KB\n TTL: 15h 26m 38s\n Count: 2302\n Sample: 97509907664, 287839612106, 13347420118\n\nbatch_sync_company:ids:370:all (Buynomics - 462)\n Config ID: 370\n Type: set\n Memory: 28.54 KB\n TTL: 23h 57m 58s\n Count: 455\n Sample: 53416555927, 5299782086, 48272143029\n\nbatch_sync_company:ids:346:all (Global Expansion - 444)\n Config ID: 346\n Type: set\n Memory: 17.66 KB\n TTL: 23h 59m 57s\n Count: 281\n Sample: 54084980525, 31037091957, 16036051109\n\nbatch_sync_contact:ids:346:all (Global Expansion - 444)\n Config ID: 346\n Type: set\n Memory: 12.6 KB\n TTL: 23h 59m 57s\n Count: 200\n Sample: 216133633092, 216059621965, 216123582828\n\nbatch_sync_contact:ids:373:all (KPSBremen.de - 465)\n Config ID: 373\n Type: set\n Memory: 4.35 KB\n TTL: 23h 42m 32s\n Count: 68\n Sample: 751746229489, 662801482974, 751204849893\n\nbatch_sync_company:ids:449:all (SiSU Health UK - 531)\n Config ID: 449\n Type: set\n Memory: 3.6 KB\n TTL: 8h 7m 26s\n Count: 56\n Sample: 293769448657, 7905289206, 6994524653\n\nbatch_sync_contact:ids:449:all (SiSU Health UK - 531)\n Config ID: 449\n Type: set\n Memory: 3.47 KB\n TTL: 22h 45m 52s\n Count: 54\n Sample: 730208, 752394791155, 759217738995\n\nbatch_sync_deal:ids:439:all (Log My Care - 522)\n Config ID: 439\n Type: set\n Memory: 3.47 KB\n TTL: 9h 4m 51s\n Count: 54\n Sample: 364507398345, 494814103757, 494016526555\n\nbatch_sync_company:ids:373:all (KPSBremen.de - 465)\n Config ID: 373\n Type: set\n Memory: 3.41 KB\n TTL: 23h 55m 1s\n Count: 53\n Sample: 399250577648, 426553672928, 379424069826\n\nbatch_sync_deal:ids:449:all (SiSU Health UK - 531)\n Config ID: 449\n Type: set\n Memory: 3.04 KB\n TTL: 8h 7m 33s\n Count: 47\n Sample: 498503490753, 498500636859, 498501354684\n\nbatch_sync_contact:ids:331:all (The National College - 416)\n Config ID: 331\n Type: set\n Memory: 1.6 KB\n TTL: 23h 59m 35s\n Count: 24\n Sample: 753335460029, 759353955559, 600494578893\n\nbatch_sync_company:ids:331:all (The National College - 416)\n Config ID: 331\n Type: set\n Memory: 1.47 KB\n TTL: 23h 59m 22s\n Count: 22\n Sample: 23755815000, 5684894521, 3972787939\n\nbatch_sync_deal:ids:331:all (The National College - 416)\n Config ID: 331\n Type: set\n Memory: 1.47 KB\n TTL: 23h 55m 17s\n Count: 22\n Sample: 499035527382, 494192151741, 499111919842\n\nbatch_sync_contact:ids:488:all (MakeMyHouseGreen - 567)\n Config ID: 488\n Type: set\n Memory: 1.41 KB\n TTL: 23h 57m 17s\n Count: 21\n Sample: 935601, 4269001, 2258\n\nbatch_sync_contact:ids:170:all (LutherOne - 199)\n Config ID: 170\n Type: set\n Memory: 996 B\n TTL: 23h 59m 49s\n Count: 14\n Sample: 6438163, 18894909, 131340729177\n\nbatch_sync_contact:ids:364:all (Lead Forensics - 190)\n Config ID: 364\n Type: set\n Memory: 932 B\n TTL: 23h 56m 58s\n Count: 13\n Sample: 103762162328, 103730206004, 103746035125\n\nbatch_sync_contact:ids:124:all (Intruder - 149)\n Config ID: 124\n Type: set\n Memory: 868 B\n TTL: 23h 53m 21s\n Count: 12\n Sample: 209000212364, 72073201, 32825651463\n\nbatch_sync_contact:ids:70:all (Scoro - 93)\n Config ID: 70\n Type: set\n Memory: 804 B\n TTL: 23h 49m 7s\n Count: 11\n Sample: 548911252691, 549509632216, 549499217106\n\nbatch_sync_contact:ids:483:all (Veremark - 561)\n Config ID: 483\n Type: set\n Memory: 804 B\n TTL: 23h 55m 11s\n Count: 11\n Sample: 215753056547, 215474268483, 215540281168\n\nbatch_sync_contact:ids:363:all (Global Group - 456)\n Config ID: 363\n Type: set\n Memory: 548 B\n TTL: 23h 57m 2s\n Count: 7\n Sample: 156053546908, 14789232785, 1569201\n\nbatch_sync_deal:ids:455:all (Argos Security - 537)\n Config ID: 455\n Type: set\n Memory: 548 B\n TTL: 23h 54m 15s\n Count: 7\n Sample: 498986026223, 17924102876, 498928162009\n\nbatch_sync_deal:ids:461:all (Fieldly - 543)\n Config ID: 461\n Type: set\n Memory: 548 B\n TTL: 23h 59m 34s\n Count: 7\n Sample: 498984577267, 499024879840, 496749330660\n\nbatch_sync_company:ids:465:all (Spotler - 545)\n Config ID: 465\n Type: set\n Memory: 484 B\n TTL: 23h 53m 55s\n Count: 6\n Sample: 12886901694, 47800033493, 426487803113\n\nbatch_sync_company:ids:483:all (Veremark - 561)\n Config ID: 483\n Type: set\n Memory: 484 B\n TTL: 23h 53m 12s\n Count: 6\n Sample: 54056532238, 25291493956, 52568117585\n\nbatch_sync_contact:ids:465:all (Spotler - 545)\n Config ID: 465\n Type: set\n Memory: 484 B\n TTL: 23h 53m 55s\n Count: 6\n Sample: 25784346850, 758403684599, 758356838593\n\nbatch_sync_contact:ids:96:all (Nourish Care - 119)\n Config ID: 96\n Type: set\n Memory: 420 B\n TTL: 23h 51m 15s\n Count: 5\n Sample: 759339342027, 6476279789, 759338177732\n\nbatch_sync_deal:ids:241:all (PatentRenewal.com ApS - 306)\n Config ID: 241\n Type: set\n Memory: 420 B\n TTL: 23h 59m 34s\n Count: 5\n Sample: 57554678843, 59164863320, 40205117839\n\nbatch_sync_company:ids:175:all (Team iAM - 203)\n Config ID: 175\n Type: set\n Memory: 356 B\n TTL: 23h 52m 11s\n Count: 4\n Sample: 31289463313, 53432109235, 47337393078\n\nbatch_sync_contact:ids:197:all (Kindly - 264)\n Config ID: 197\n Type: set\n Memory: 356 B\n TTL: 23h 56m 33s\n Count: 4\n Sample: 759337959662, 759340603582, 759336916201\n\nbatch_sync_contact:ids:308:all (Foodles - 380)\n Config ID: 308\n Type: set\n Memory: 356 B\n TTL: 23h 47m 13s\n Count: 4\n Sample: 209605481386, 216074957452, 216074957451\n\nbatch_sync_contact:ids:461:all (Fieldly - 543)\n Config ID: 461\n Type: set\n Memory: 356 B\n TTL: 23h 59m 38s\n Count: 4\n Sample: 758403694783, 6338351, 755171302642\n\nbatch_sync_contact:ids:485:all (LATUS Group - 563)\n Config ID: 485\n Type: set\n Memory: 356 B\n TTL: 23h 59m 51s\n Count: 4\n Sample: 216014615839, 216124673101, 215534275979\n\nbatch_sync_company:ids:170:all (LutherOne - 199)\n Config ID: 170\n Type: set\n Memory: 292 B\n TTL: 23h 55m 25s\n Count: 3\n Sample: 5061344699, 8979817578, 53544705830\n\nbatch_sync_company:ids:197:all (Kindly - 264)\n Config ID: 197\n Type: set\n Memory: 292 B\n TTL: 23h 56m 26s\n Count: 3\n Sample: 426652716232, 426652949738, 426671486159\n\nbatch_sync_company:ids:436:all (Moxso - 519)\n Config ID: 436\n Type: set\n Memory: 292 B\n TTL: 23h 54m 5s\n Count: 3\n Sample: 5637526753, 9027001061, 426485659872\n\nbatch_sync_company:ids:455:all (Argos Security - 537)\n Config ID: 455\n Type: set\n Memory: 292 B\n TTL: 23h 49m 25s\n Count: 3\n Sample: 12009203674, 12897632476, 331995461840\n\nbatch_sync_contact:ids:130:all (Latana Brand Tracking - 155)\n Config ID: 130\n Type: set\n Memory: 292 B\n TTL: 23h 44m 14s\n Count: 3\n Sample: 216074963815, 216074963816, 216074963817\n\nbatch_sync_contact:ids:175:all (Team iAM - 203)\n Config ID: 175\n Type: set\n Memory: 292 B\n TTL: 23h 52m 37s\n Count: 3\n Sample: 212581164888, 216121454962, 216121861967\n\nbatch_sync_contact:ids:455:all (Argos Security - 537)\n Config ID: 455\n Type: set\n Memory: 292 B\n TTL: 23h 49m 25s\n Count: 3\n Sample: 15081981630, 28607253707, 589985456367\n\nbatch_sync_deal:ids:465:all (Spotler - 545)\n Config ID: 465\n Type: set\n Memory: 292 B\n TTL: 23h 54m 43s\n Count: 3\n Sample: 498984572105, 498986026222, 498987447516\n\nbatch_sync_company:ids:70:all (Scoro - 93)\n Config ID: 70\n Type: set\n Memory: 228 B\n TTL: 23h 48m 59s\n Count: 2\n Sample: 308374847674, 426652674241\n\nbatch_sync_company:ids:461:all (Fieldly - 543)\n Config ID: 461\n Type: set\n Memory: 228 B\n TTL: 23h 57m 6s\n Count: 2\n Sample: 612188920, 1045770343\n\nbatch_sync_contact:ids:112:all (Switchee - 137)\n Config ID: 112\n Type: set\n Memory: 228 B\n TTL: 23h 50m 12s\n Count: 2\n Sample: 216074959999, 216074960000\n\nbatch_sync_contact:ids:201:all (THRIVE - 266)\n Config ID: 201\n Type: set\n Memory: 228 B\n TTL: 23h 59m 17s\n Count: 2\n Sample: 17229652, 23550651\n\nbatch_sync_contact:ids:253:all (Zymego - 322)\n Config ID: 253\n Type: set\n Memory: 228 B\n TTL: 23h 48m 32s\n Count: 2\n Sample: 9236122316, 108257234125\n\nbatch_sync_contact:ids:307:all (Story Terrace Inc - 379)\n Config ID: 307\n Type: set\n Memory: 228 B\n TTL: 23h 54m 36s\n Count: 2\n Sample: 216118037022, 216120038928\n\nbatch_sync_contact:ids:319:all (MySalesCoach - 400)\n Config ID: 319\n Type: set\n Memory: 228 B\n TTL: 23h 51m 16s\n Count: 2\n Sample: 191355036878, 759224982717\n\nbatch_sync_contact:ids:335:all (Eletive - 429)\n Config ID: 335\n Type: set\n Memory: 228 B\n TTL: 23h 58m 13s\n Count: 2\n Sample: 159795767866, 757397522679\n\nbatch_sync_contact:ids:339:all (inspera.no - 436)\n Config ID: 339\n Type: set\n Memory: 228 B\n TTL: 23h 55m 54s\n Count: 2\n Sample: 183336486505, 216074960287\n\nbatch_sync_contact:ids:412:all (Antavo - 500)\n Config ID: 412\n Type: set\n Memory: 228 B\n TTL: 23h 50m 30s\n Count: 2\n Sample: 644080299229, 705317319867\n\nbatch_sync_deal:ids:96:all (Nourish Care - 119)\n Config ID: 96\n Type: set\n Memory: 228 B\n TTL: 23h 51m 21s\n Count: 2\n Sample: 13955519955, 499101468869\n\nbatch_sync_deal:ids:253:all (Zymego - 322)\n Config ID: 253\n Type: set\n Memory: 228 B\n TTL: 23h 49m 0s\n Count: 2\n Sample: 499101779135, 499117828335\n\nbatch_sync_company:ids:95:all (Cronofy - 118)\n Config ID: 95\n Type: set\n Memory: 164 B\n TTL: 23h 44m 9s\n Count: 1\n Sample: 54084980481\n\nbatch_sync_company:ids:96:all (Nourish Care - 119)\n Config ID: 96\n Type: set\n Memory: 164 B\n TTL: 23h 51m 18s\n Count: 1\n Sample: 231946184895\n\nbatch_sync_company:ids:112:all (Switchee - 137)\n Config ID: 112\n Type: set\n Memory: 164 B\n TTL: 23h 45m 50s\n Count: 1\n Sample: 30902131597\n\nbatch_sync_company:ids:124:all (Intruder - 149)\n Config ID: 124\n Type: set\n Memory: 164 B\n TTL: 23h 49m 59s\n Count: 1\n Sample: 19200117829\n\nbatch_sync_company:ids:130:all (Latana Brand Tracking - 155)\n Config ID: 130\n Type: set\n Memory: 164 B\n TTL: 23h 43m 46s\n Count: 1\n Sample: 3412118684\n\nbatch_sync_company:ids:191:all (Orlo - 253)\n Config ID: 191\n Type: set\n Memory: 164 B\n TTL: 23h 53m 53s\n Count: 1\n Sample: 2492067355\n\nbatch_sync_company:ids:200:all (Jobadder - 265)\n Config ID: 200\n Type: set\n Memory: 164 B\n TTL: 23h 41m 16s\n Count: 1\n Sample: 54051603071\n\nbatch_sync_company:ids:253:all (Zymego - 322)\n Config ID: 253\n Type: set\n Memory: 164 B\n TTL: 23h 48m 34s\n Count: 1\n Sample: 45363246315\n\nbatch_sync_company:ids:295:all (APLYiD - 367)\n Config ID: 295\n Type: set\n Memory: 164 B\n TTL: 23h 43m 38s\n Count: 1\n Sample: 426645956821\n\nbatch_sync_company:ids:308:all (Foodles - 380)\n Config ID: 308\n Type: set\n Memory: 164 B\n TTL: 23h 43m 36s\n Count: 1\n Sample: 4623764126\n\nbatch_sync_company:ids:485:all (LATUS Group - 563)\n Config ID: 485\n Type: set\n Memory: 164 B\n TTL: 23h 59m 51s\n Count: 1\n Sample: 16393088676\n\nbatch_sync_contact:ids:81:all (Hurree - 104)\n Config ID: 81\n Type: set\n Memory: 164 B\n TTL: 23h 52m 48s\n Count: 1\n Sample: 216123172492\n\nbatch_sync_contact:ids:86:all (Teamtailor - 109)\n Config ID: 86\n Type: set\n Memory: 164 B\n TTL: 5h 35m 55s\n Count: 1\n Sample: 128480851\n\nbatch_sync_contact:ids:95:all (Cronofy - 118)\n Config ID: 95\n Type: set\n Memory: 164 B\n TTL: 23h 44m 9s\n Count: 1\n Sample: 216119828808\n\nbatch_sync_contact:ids:191:all (Orlo - 253)\n Config ID: 191\n Type: set\n Memory: 164 B\n TTL: 23h 43m 42s\n Count: 1\n Sample: 185805924409\n\nbatch_sync_contact:ids:200:all (Jobadder - 265)\n Config ID: 200\n Type: set\n Memory: 164 B\n TTL: 23h 41m 16s\n Count: 1\n Sample: 216122837601\n\nbatch_sync_contact:ids:255:all (Screendragon - 324)\n Config ID: 255\n Type: set\n Memory: 164 B\n TTL: 23h 44m 22s\n Count: 1\n Sample: 215982276420\n\nbatch_sync_contact:ids:278:all (Akixi - 348)\n Config ID: 278\n Type: set\n Memory: 164 B\n TTL: 23h 46m 52s\n Count: 1\n Sample: 758404365499\n\nbatch_sync_contact:ids:284:all (Brickflow (Property Funding Hub Ltd) - 354)\n Config ID: 284\n Type: set\n Memory: 164 B\n TTL: 23h 44m 47s\n Count: 1\n Sample: 195262486661\n\nbatch_sync_contact:ids:295:all (APLYiD - 367)\n Config ID: 295\n Type: set\n Memory: 164 B\n TTL: 23h 44m 11s\n Count: 1\n Sample: 759223062753\n\nbatch_sync_contact:ids:322:all (Talkative - 403)\n Config ID: 322\n Type: set\n Memory: 164 B\n TTL: 23h 56m 55s\n Count: 1\n Sample: 751262016755\n\nbatch_sync_contact:ids:367:all (Sensat - 459)\n Config ID: 367\n Type: set\n Memory: 164 B\n TTL: 23h 51m 33s\n Count: 1\n Sample: 215694537008\n\nbatch_sync_contact:ids:403:all (Fundrella - 491)\n Config ID: 403\n Type: set\n Memory: 164 B\n TTL: 23h 43m 28s\n Count: 1\n Sample: 147101\n\nbatch_sync_contact:ids:436:all (Moxso - 519)\n Config ID: 436\n Type: set\n Memory: 164 B\n TTL: 23h 54m 15s\n Count: 1\n Sample: 294701\n\nbatch_sync_contact:ids:491:all (CreateFuture - 570)\n Config ID: 491\n Type: set\n Memory: 164 B\n TTL: 23h 51m 48s\n Count: 1\n Sample: 214629839743\n\nbatch_sync_deal:ids:191:all (Orlo - 253)\n Config ID: 191\n Type: set\n Memory: 164 B\n TTL: 23h 54m 11s\n Count: 1\n Sample: 59230347609\n\nbatch_sync_deal:ids:200:all (Jobadder - 265)\n Config ID: 200\n Type: set\n Memory: 164 B\n TTL: 23h 50m 5s\n Count: 1\n Sample: 58878310503\n\nbatch_sync_deal:ids:255:all (Screendragon - 324)\n Config ID: 255\n Type: set\n Memory: 164 B\n TTL: 23h 44m 20s\n Count: 1\n Sample: 59243074931\n\nbatch_sync_deal:ids:335:all (Eletive - 429)\n Config ID: 335\n Type: set\n Memory: 164 B\n TTL: 23h 39m 13s\n Count: 1\n Sample: 498499653826\n\nbatch_sync_deal:ids:370:all (Buynomics - 462)\n Config ID: 370\n Type: set\n Memory: 164 B\n TTL: 5h 19m 0s\n Count: 1\n Sample: 10644871427\n\nbatch_sync_deal:ids:373:all (KPSBremen.de - 465)\n Config ID: 373\n Type: set\n Memory: 164 B\n TTL: 2h 41m 0s\n Count: 1\n Sample: 493652735187\n\nbatch_sync_deal:ids:483:all (Veremark - 561)\n Config ID: 483\n Type: set\n Memory: 164 B\n TTL: 23h 47m 59s\n Count: 1\n Sample: 59186288665\n\nroot@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook redis --key-type ids --detailed -T 459\n\n INFO Scanning Redis keys (type: ids). \n\n\n Total keys found ............................................................................................................................... 1 \n Total IDs across all keys ...................................................................................................................... 1 \n\n📊\u0000 Memory Overview\n Total Memory ............................................................................................................................... 164 B \n ids keys ................................................................................................................................... 164 B \n\nbatch_sync_contact:ids:367:all (Sensat - 459)\n Config ID: 367\n Type: set\n Memory: 164 B\n TTL: 23h 51m 6s\n Count: 1\n Sample: 215694537008\n\nroot@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook metrics -T 459\n\n INFO Webhook Metrics — 2026-04-17. \n\n📊\u0000 Webhook Metrics Summary\n==========================================\nDate: 2026-04-17\nFilters: Config: 367\nTotal Teams: 1\nTotal Webhooks: 7\n\n🏢\u0000 Config 367 (Sensat - 459) - 7 webhooks\n 📦\u0000 contact: 6 webhooks\n 🔔\u0000 property_change: 6 events, 5 properties\n 📦\u0000 deal: 1 webhooks\n 🔔\u0000 property_change: 1 events, 1 properties\n\nroot@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook metrics -T 459 --from 2026-04-15\n\n INFO Managing webhook metrics for date range. \n\n Date Range .............................................................................................................. 2026-04-15 to 2026-04-17 \n Config ID .................................................................................................................................... 367 \n\n📊\u0000 Range Summary\n Date Range .............................................................................................................. 2026-04-15 to 2026-04-17 \n Total Days ..................................................................................................................................... 3 \n Oldest Data Age ..................................................................................................................... 2.0 days ago \n Total Webhooks ......................................................................................................................... 1,065,651 \n Daily Average ......................................................................................................................... 355,217.00 \n Active Companies .............................................................................................................................. 89 \n\n🏢\u0000 Company Details\n\n Company 367 (Sensat - 459)\n Total Webhooks: 796\n Days Active: 3/3\n Daily Average: 265.33\nroot@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook metrics -T 459 --from 2026-04-15 -D\n\n INFO Managing webhook metrics for date range. \n\n Date Range .............................................................................................................. 2026-04-15 to 2026-04-17 \n Config ID .................................................................................................................................... 367 \n\n📊\u0000 Range Summary\n Date Range .............................................................................................................. 2026-04-15 to 2026-04-17 \n Total Days ..................................................................................................................................... 3 \n Oldest Data Age ..................................................................................................................... 2.0 days ago \n Total Webhooks ......................................................................................................................... 1,065,677 \n Daily Average ......................................................................................................................... 355,225.67 \n Active Companies .............................................................................................................................. 89 \n\n📅\u0000 Daily Breakdown\n 2026-04-15: 335,647 webhooks, 88 companies active\n 2026-04-16: 671,679 webhooks, 88 companies active\n 2026-04-17: 58,351 webhooks, 68 companies active\n\n🏢\u0000 Company Details\n\n Company 367 (Sensat - 459)\n Total Webhooks: 796\n Days Active: 3/3\n Daily Average: 265.33\n company (114 total, avg: 38)\n association_change: 92 total, avg: 46, active: 2 days\n creation: 3 total, avg: 1.5, active: 2 days\n property_change: 19 total, avg: 9.5, active: 2 days\n Unique properties: 4\n Top properties: hubspot_owner_id(12), domain(3), name(3), phone(1)\n deal (164 total, avg: 54.67)\n property_change: 164 total, avg: 54.67, active: 3 days\n Unique properties: 8\n Top properties: notes_last_updated(134), closedate(7), dealstage(5), hs_deal_stage_probability(5), hs_manual_forecast_category(5)\n contact (518 total, avg: 172.67)\n property_change: 390 total, avg: 130, active: 3 days\n Unique properties: 9\n Top properties: hubspot_owner_id(186), firstname(35), email(35), associatedcompanyid(33), country(33)\n creation: 36 total, avg: 18, active: 2 days\n association_change: 92 total, avg: 46, active: 2 days\nroot@67e84f80b9d1:/home/jiminny#","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.00069444446,"top":0.06,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.0048611113,"top":0.064444445,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.12361111,"top":0.06,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.12777779,"top":0.064444445,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.24652778,"top":0.06,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.25069445,"top":0.064444445,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.36944443,"top":0.06,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.37361112,"top":0.064444445,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.4923611,"top":0.06,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.4965278,"top":0.064444445,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Review screenpipe usage and Boosteroid integration (claude)","depth":2,"bounds":{"left":0.61527777,"top":0.06,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.61944443,"top":0.064444445,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-159-186:~ (nc)","depth":2,"bounds":{"left":0.73819447,"top":0.06,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.7423611,"top":0.064444445,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-20-6-111:~ (nc)","depth":2,"bounds":{"left":0.8611111,"top":0.06,"width":0.12291667,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.86527777,"top":0.064444445,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.95555556,"top":0.033333335,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"ec2-user@ip-10-20-6-111:~","depth":1,"bounds":{"left":0.43611112,"top":0.034444444,"width":0.12916666,"height":0.017777778},"role_description":"text"}]...
|
-2337461687480936
|
-4666508300195287295
|
app_switch
|
accessibility
|
NULL
|
UW PICO 5.09 UW PICO 5.09 New Buffer
[ Read 137 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
Last login: Fri Apr 17 10:32:22 on ttys013
/Users/lukas/.zprofile:138: unmatched "
/Users/lukas/.zprofile:138: unmatched "
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ % veu
zsh: command not found: veu
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ % zp
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ % ssh jiminny-eu-ecs1
Enter MFA code for arn:aws:iam::438740370364:mfa/[EMAIL]:
Warning: Permanently added 'jiminny-eu-ecs1' (ED25519) to the list of known hosts.
A newer release of "Amazon Linux" is available.
Version 2023.10.20260105:
Version 2023.10.20260120:
Version 2023.10.20260202:
Version 2023.10.20260216:
Version 2023.10.20260302:
Version 2023.10.20260325:
Version 2023.10.20260330:
Version 2023.11.20260406:
Version 2023.11.20260413:
Version 2023.8.20250707:
Version 2023.8.20250715:
Version 2023.8.20250721:
Version 2023.8.20250808:
Version 2023.8.20250818:
Version 2023.8.20250908:
Version 2023.8.20250915:
Version 2023.9.20250929:
Version 2023.9.20251014:
Version 2023.9.20251020:
Version 2023.9.20251027:
Version 2023.9.20251105:
Version 2023.9.20251110:
Version 2023.9.20251117:
Version 2023.9.20251208:
Run "/usr/bin/dnf check-release-update" for full release and version update info
, #_
~\_ ####_
~~ \_#####\
~~ \###|
~~ \#/ ___ Amazon Linux 2023 (ECS Optimized)
~~ V~' '->
~~~ /
~~._. _/
_/ _/
_/m/'
For documentation, visit [URL_WITH_CREDENTIALS] ~]$ docker exec -it $(docker ps --format "{{.ID}}" --filter "name=ecs-worker" | head -1) /bin/bash -c "cd /home/jiminny && bash"
root@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook redis --key-type ids --detailed
INFO Scanning Redis keys (type: ids).
Total keys found [PASSWORD_DOTS] 87
Total IDs across all keys [PASSWORD_DOTS] 18,991
📊 Memory Overview
Total Memory [PASSWORD_DOTS] 1.17 MB
ids keys [PASSWORD_DOTS] 1.17 MB
batch_sync_deal:ids:338:all (Formalize - 432)
Config ID: 338
Type: set
Memory: 582.22 KB
TTL: 23h 26m 22s
Count: 9314
Sample: 36225705250, 29787925122, 329967686878
batch_sync_contact:ids:439:all (Log My Care - 522)
Config ID: 439
Type: set
Memory: 203.66 KB
TTL: 15h 27m 1s
Count: 3257
Sample: 4723151, 569384381669, 751397913846
batch_sync_contact:ids:370:all (Buynomics - 462)
Config ID: 370
Type: set
Memory: 159.54 KB
TTL: 23h 58m 24s
Count: 2551
Sample: 7855597, 214629714698, 1081551
batch_sync_company:ids:439:all (Log My Care - 522)
Config ID: 439
Type: set
Memory: 143.97 KB
TTL: 15h 26m 38s
Count: 2302
Sample: 97509907664, 287839612106, 13347420118
batch_sync_company:ids:370:all (Buynomics - 462)
Config ID: 370
Type: set
Memory: 28.54 KB
TTL: 23h 57m 58s
Count: 455
Sample: 53416555927, 5299782086, 48272143029
batch_sync_company:ids:346:all (Global Expansion - 444)
Config ID: 346
Type: set
Memory: 17.66 KB
TTL: 23h 59m 57s
Count: 281
Sample: 54084980525, 31037091957, 16036051109
batch_sync_contact:ids:346:all (Global Expansion - 444)
Config ID: 346
Type: set
Memory: 12.6 KB
TTL: 23h 59m 57s
Count: 200
Sample: 216133633092, 216059621965, 216123582828
batch_sync_contact:ids:373:all (KPSBremen.de - 465)
Config ID: 373
Type: set
Memory: 4.35 KB
TTL: 23h 42m 32s
Count: 68
Sample: 751746229489, 662801482974, 751204849893
batch_sync_company:ids:449:all (SiSU Health UK - 531)
Config ID: 449
Type: set
Memory: 3.6 KB
TTL: 8h 7m 26s
Count: 56
Sample: 293769448657, 7905289206, 6994524653
batch_sync_contact:ids:449:all (SiSU Health UK - 531)
Config ID: 449
Type: set
Memory: 3.47 KB
TTL: 22h 45m 52s
Count: 54
Sample: 730208, 752394791155, 759217738995
batch_sync_deal:ids:439:all (Log My Care - 522)
Config ID: 439
Type: set
Memory: 3.47 KB
TTL: 9h 4m 51s
Count: 54
Sample: 364507398345, 494814103757, 494016526555
batch_sync_company:ids:373:all (KPSBremen.de - 465)
Config ID: 373
Type: set
Memory: 3.41 KB
TTL: 23h 55m 1s
Count: 53
Sample: 399250577648, 426553672928, 379424069826
batch_sync_deal:ids:449:all (SiSU Health UK - 531)
Config ID: 449
Type: set
Memory: 3.04 KB
TTL: 8h 7m 33s
Count: 47
Sample: 498503490753, 498500636859, 498501354684
batch_sync_contact:ids:331:all (The National College - 416)
Config ID: 331
Type: set
Memory: 1.6 KB
TTL: 23h 59m 35s
Count: 24
Sample: 753335460029, 759353955559, 600494578893
batch_sync_company:ids:331:all (The National College - 416)
Config ID: 331
Type: set
Memory: 1.47 KB
TTL: 23h 59m 22s
Count: 22
Sample: 23755815000, 5684894521, 3972787939
batch_sync_deal:ids:331:all (The National College - 416)
Config ID: 331
Type: set
Memory: 1.47 KB
TTL: 23h 55m 17s
Count: 22
Sample: 499035527382, 494192151741, 499111919842
batch_sync_contact:ids:488:all (MakeMyHouseGreen - 567)
Config ID: 488
Type: set
Memory: 1.41 KB
TTL: 23h 57m 17s
Count: 21
Sample: 935601, 4269001, 2258
batch_sync_contact:ids:170:all (LutherOne - 199)
Config ID: 170
Type: set
Memory: 996 B
TTL: 23h 59m 49s
Count: 14
Sample: 6438163, 18894909, 131340729177
batch_sync_contact:ids:364:all (Lead Forensics - 190)
Config ID: 364
Type: set
Memory: 932 B
TTL: 23h 56m 58s
Count: 13
Sample: 103762162328, 103730206004, 103746035125
batch_sync_contact:ids:124:all (Intruder - 149)
Config ID: 124
Type: set
Memory: 868 B
TTL: 23h 53m 21s
Count: 12
Sample: 209000212364, 72073201, 32825651463
batch_sync_contact:ids:70:all (Scoro - 93)
Config ID: 70
Type: set
Memory: 804 B
TTL: 23h 49m 7s
Count: 11
Sample: 548911252691, 549509632216, 549499217106
batch_sync_contact:ids:483:all (Veremark - 561)
Config ID: 483
Type: set
Memory: 804 B
TTL: 23h 55m 11s
Count: 11
Sample: 215753056547, 215474268483, 215540281168
batch_sync_contact:ids:363:all (Global Group - 456)
Config ID: 363
Type: set
Memory: 548 B
TTL: 23h 57m 2s
Count: 7
Sample: 156053546908, 14789232785, 1569201
batch_sync_deal:ids:455:all (Argos Security - 537)
Config ID: 455
Type: set
Memory: 548 B
TTL: 23h 54m 15s
Count: 7
Sample: 498986026223, 17924102876, 498928162009
batch_sync_deal:ids:461:all (Fieldly - 543)
Config ID: 461
Type: set
Memory: 548 B
TTL: 23h 59m 34s
Count: 7
Sample: 498984577267, 499024879840, 496749330660
batch_sync_company:ids:465:all (Spotler - 545)
Config ID: 465
Type: set
Memory: 484 B
TTL: 23h 53m 55s
Count: 6
Sample: 12886901694, 47800033493, 426487803113
batch_sync_company:ids:483:all (Veremark - 561)
Config ID: 483
Type: set
Memory: 484 B
TTL: 23h 53m 12s
Count: 6
Sample: 54056532238, 25291493956, 52568117585
batch_sync_contact:ids:465:all (Spotler - 545)
Config ID: 465
Type: set
Memory: 484 B
TTL: 23h 53m 55s
Count: 6
Sample: 25784346850, 758403684599, 758356838593
batch_sync_contact:ids:96:all (Nourish Care - 119)
Config ID: 96
Type: set
Memory: 420 B
TTL: 23h 51m 15s
Count: 5
Sample: 759339342027, 6476279789, 759338177732
batch_sync_deal:ids:241:all (PatentRenewal.com ApS - 306)
Config ID: 241
Type: set
Memory: 420 B
TTL: 23h 59m 34s
Count: 5
Sample: 57554678843, 59164863320, 40205117839
batch_sync_company:ids:175:all (Team iAM - 203)
Config ID: 175
Type: set
Memory: 356 B
TTL: 23h 52m 11s
Count: 4
Sample: 31289463313, 53432109235, 47337393078
batch_sync_contact:ids:197:all (Kindly - 264)
Config ID: 197
Type: set
Memory: 356 B
TTL: 23h 56m 33s
Count: 4
Sample: 759337959662, 759340603582, 759336916201
batch_sync_contact:ids:308:all (Foodles - 380)
Config ID: 308
Type: set
Memory: 356 B
TTL: 23h 47m 13s
Count: 4
Sample: 209605481386, 216074957452, 216074957451
batch_sync_contact:ids:461:all (Fieldly - 543)
Config ID: 461
Type: set
Memory: 356 B
TTL: 23h 59m 38s
Count: 4
Sample: 758403694783, 6338351, 755171302642
batch_sync_contact:ids:485:all (LATUS Group - 563)
Config ID: 485
Type: set
Memory: 356 B
TTL: 23h 59m 51s
Count: 4
Sample: 216014615839, 216124673101, 215534275979
batch_sync_company:ids:170:all (LutherOne - 199)
Config ID: 170
Type: set
Memory: 292 B
TTL: 23h 55m 25s
Count: 3
Sample: 5061344699, 8979817578, 53544705830
batch_sync_company:ids:197:all (Kindly - 264)
Config ID: 197
Type: set
Memory: 292 B
TTL: 23h 56m 26s
Count: 3
Sample: 426652716232, 426652949738, 426671486159
batch_sync_company:ids:436:all (Moxso - 519)
Config ID: 436
Type: set
Memory: 292 B
TTL: 23h 54m 5s
Count: 3
Sample: 5637526753, 9027001061, 426485659872
batch_sync_company:ids:455:all (Argos Security - 537)
Config ID: 455
Type: set
Memory: 292 B
TTL: 23h 49m 25s
Count: 3
Sample: 12009203674, 12897632476, 331995461840
batch_sync_contact:ids:130:all (Latana Brand Tracking - 155)
Config ID: 130
Type: set
Memory: 292 B
TTL: 23h 44m 14s
Count: 3
Sample: 216074963815, 216074963816, 216074963817
batch_sync_contact:ids:175:all (Team iAM - 203)
Config ID: 175
Type: set
Memory: 292 B
TTL: 23h 52m 37s
Count: 3
Sample: 212581164888, 216121454962, 216121861967
batch_sync_contact:ids:455:all (Argos Security - 537)
Config ID: 455
Type: set
Memory: 292 B
TTL: 23h 49m 25s
Count: 3
Sample: 15081981630, 28607253707, 589985456367
batch_sync_deal:ids:465:all (Spotler - 545)
Config ID: 465
Type: set
Memory: 292 B
TTL: 23h 54m 43s
Count: 3
Sample: 498984572105, 498986026222, 498987447516
batch_sync_company:ids:70:all (Scoro - 93)
Config ID: 70
Type: set
Memory: 228 B
TTL: 23h 48m 59s
Count: 2
Sample: 308374847674, 426652674241
batch_sync_company:ids:461:all (Fieldly - 543)
Config ID: 461
Type: set
Memory: 228 B
TTL: 23h 57m 6s
Count: 2
Sample: 612188920, 1045770343
batch_sync_contact:ids:112:all (Switchee - 137)
Config ID: 112
Type: set
Memory: 228 B
TTL: 23h 50m 12s
Count: 2
Sample: 216074959999, 216074960000
batch_sync_contact:ids:201:all (THRIVE - 266)
Config ID: 201
Type: set
Memory: 228 B
TTL: 23h 59m 17s
Count: 2
Sample: 17229652, 23550651
batch_sync_contact:ids:253:all (Zymego - 322)
Config ID: 253
Type: set
Memory: 228 B
TTL: 23h 48m 32s
Count: 2
Sample: 9236122316, 108257234125
batch_sync_contact:ids:307:all (Story Terrace Inc - 379)
Config ID: 307
Type: set
Memory: 228 B
TTL: 23h 54m 36s
Count: 2
Sample: 216118037022, 216120038928
batch_sync_contact:ids:319:all (MySalesCoach - 400)
Config ID: 319
Type: set
Memory: 228 B
TTL: 23h 51m 16s
Count: 2
Sample: 191355036878, 759224982717
batch_sync_contact:ids:335:all (Eletive - 429)
Config ID: 335
Type: set
Memory: 228 B
TTL: 23h 58m 13s
Count: 2
Sample: 159795767866, 757397522679
batch_sync_contact:ids:339:all (inspera.no - 436)
Config ID: 339
Type: set
Memory: 228 B
TTL: 23h 55m 54s
Count: 2
Sample: 183336486505, 216074960287
batch_sync_contact:ids:412:all (Antavo - 500)
Config ID: 412
Type: set
Memory: 228 B
TTL: 23h 50m 30s
Count: 2
Sample: 644080299229, 705317319867
batch_sync_deal:ids:96:all (Nourish Care - 119)
Config ID: 96
Type: set
Memory: 228 B
TTL: 23h 51m 21s
Count: 2
Sample: 13955519955, 499101468869
batch_sync_deal:ids:253:all (Zymego - 322)
Config ID: 253
Type: set
Memory: 228 B
TTL: 23h 49m 0s
Count: 2
Sample: 499101779135, 499117828335
batch_sync_company:ids:95:all (Cronofy - 118)
Config ID: 95
Type: set
Memory: 164 B
TTL: 23h 44m 9s
Count: 1
Sample: 54084980481
batch_sync_company:ids:96:all (Nourish Care - 119)
Config ID: 96
Type: set
Memory: 164 B
TTL: 23h 51m 18s
Count: 1
Sample: 231946184895
batch_sync_company:ids:112:all (Switchee - 137)
Config ID: 112
Type: set
Memory: 164 B
TTL: 23h 45m 50s
Count: 1
Sample: 30902131597
batch_sync_company:ids:124:all (Intruder - 149)
Config ID: 124
Type: set
Memory: 164 B
TTL: 23h 49m 59s
Count: 1
Sample: 19200117829
batch_sync_company:ids:130:all (Latana Brand Tracking - 155)
Config ID: 130
Type: set
Memory: 164 B
TTL: 23h 43m 46s
Count: 1
Sample: 3412118684
batch_sync_company:ids:191:all (Orlo - 253)
Config ID: 191
Type: set
Memory: 164 B
TTL: 23h 53m 53s
Count: 1
Sample: 2492067355
batch_sync_company:ids:200:all (Jobadder - 265)
Config ID: 200
Type: set
Memory: 164 B
TTL: 23h 41m 16s
Count: 1
Sample: 54051603071
batch_sync_company:ids:253:all (Zymego - 322)
Config ID: 253
Type: set
Memory: 164 B
TTL: 23h 48m 34s
Count: 1
Sample: 45363246315
batch_sync_company:ids:295:all (APLYiD - 367)
Config ID: 295
Type: set
Memory: 164 B
TTL: 23h 43m 38s
Count: 1
Sample: 426645956821
batch_sync_company:ids:308:all (Foodles - 380)
Config ID: 308
Type: set
Memory: 164 B
TTL: 23h 43m 36s
Count: 1
Sample: 4623764126
batch_sync_company:ids:485:all (LATUS Group - 563)
Config ID: 485
Type: set
Memory: 164 B
TTL: 23h 59m 51s
Count: 1
Sample: 16393088676
batch_sync_contact:ids:81:all (Hurree - 104)
Config ID: 81
Type: set
Memory: 164 B
TTL: 23h 52m 48s
Count: 1
Sample: 216123172492
batch_sync_contact:ids:86:all (Teamtailor - 109)
Config ID: 86
Type: set
Memory: 164 B
TTL: 5h 35m 55s
Count: 1
Sample: 128480851
batch_sync_contact:ids:95:all (Cronofy - 118)
Config ID: 95
Type: set
Memory: 164 B
TTL: 23h 44m 9s
Count: 1
Sample: 216119828808
batch_sync_contact:ids:191:all (Orlo - 253)
Config ID: 191
Type: set
Memory: 164 B
TTL: 23h 43m 42s
Count: 1
Sample: 185805924409
batch_sync_contact:ids:200:all (Jobadder - 265)
Config ID: 200
Type: set
Memory: 164 B
TTL: 23h 41m 16s
Count: 1
Sample: 216122837601
batch_sync_contact:ids:255:all (Screendragon - 324)
Config ID: 255
Type: set
Memory: 164 B
TTL: 23h 44m 22s
Count: 1
Sample: 215982276420
batch_sync_contact:ids:278:all (Akixi - 348)
Config ID: 278
Type: set
Memory: 164 B
TTL: 23h 46m 52s
Count: 1
Sample: 758404365499
batch_sync_contact:ids:284:all (Brickflow (Property Funding Hub Ltd) - 354)
Config ID: 284
Type: set
Memory: 164 B
TTL: 23h 44m 47s
Count: 1
Sample: 195262486661
batch_sync_contact:ids:295:all (APLYiD - 367)
Config ID: 295
Type: set
Memory: 164 B
TTL: 23h 44m 11s
Count: 1
Sample: 759223062753
batch_sync_contact:ids:322:all (Talkative - 403)
Config ID: 322
Type: set
Memory: 164 B
TTL: 23h 56m 55s
Count: 1
Sample: 751262016755
batch_sync_contact:ids:367:all (Sensat - 459)
Config ID: 367
Type: set
Memory: 164 B
TTL: 23h 51m 33s
Count: 1
Sample: 215694537008
batch_sync_contact:ids:403:all (Fundrella - 491)
Config ID: 403
Type: set
Memory: 164 B
TTL: 23h 43m 28s
Count: 1
Sample: 147101
batch_sync_contact:ids:436:all (Moxso - 519)
Config ID: 436
Type: set
Memory: 164 B
TTL: 23h 54m 15s
Count: 1
Sample: 294701
batch_sync_contact:ids:491:all (CreateFuture - 570)
Config ID: 491
Type: set
Memory: 164 B
TTL: 23h 51m 48s
Count: 1
Sample: 214629839743
batch_sync_deal:ids:191:all (Orlo - 253)
Config ID: 191
Type: set
Memory: 164 B
TTL: 23h 54m 11s
Count: 1
Sample: 59230347609
batch_sync_deal:ids:200:all (Jobadder - 265)
Config ID: 200
Type: set
Memory: 164 B
TTL: 23h 50m 5s
Count: 1
Sample: 58878310503
batch_sync_deal:ids:255:all (Screendragon - 324)
Config ID: 255
Type: set
Memory: 164 B
TTL: 23h 44m 20s
Count: 1
Sample: 59243074931
batch_sync_deal:ids:335:all (Eletive - 429)
Config ID: 335
Type: set
Memory: 164 B
TTL: 23h 39m 13s
Count: 1
Sample: 498499653826
batch_sync_deal:ids:370:all (Buynomics - 462)
Config ID: 370
Type: set
Memory: 164 B
TTL: 5h 19m 0s
Count: 1
Sample: 10644871427
batch_sync_deal:ids:373:all (KPSBremen.de - 465)
Config ID: 373
Type: set
Memory: 164 B
TTL: 2h 41m 0s
Count: 1
Sample: 493652735187
batch_sync_deal:ids:483:all (Veremark - 561)
Config ID: 483
Type: set
Memory: 164 B
TTL: 23h 47m 59s
Count: 1
Sample: 59186288665
root@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook redis --key-type ids --detailed -T 459
INFO Scanning Redis keys (type: ids).
Total keys found [PASSWORD_DOTS] 1
Total IDs across all keys [PASSWORD_DOTS] 1
📊 Memory Overview
Total Memory [PASSWORD_DOTS] 164 B
ids keys [PASSWORD_DOTS] 164 B
batch_sync_contact:ids:367:all (Sensat - 459)
Config ID: 367
Type: set
Memory: 164 B
TTL: 23h 51m 6s
Count: 1
Sample: 215694537008
root@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook metrics -T 459
INFO Webhook Metrics — 2026-04-17.
📊 Webhook Metrics Summary
==========================================
Date: 2026-04-17
Filters: Config: 367
Total Teams: 1
Total Webhooks: 7
🏢 Config 367 (Sensat - 459) - 7 webhooks
📦 contact: 6 webhooks
🔔 property_change: 6 events, 5 properties
📦 deal: 1 webhooks
🔔 property_change: 1 events, 1 properties
root@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook metrics -T 459 --from 2026-04-15
INFO Managing webhook metrics for date range.
Date Range [PASSWORD_DOTS] 2026-04-15 to 2026-04-17
Config ID [PASSWORD_DOTS] 367
📊 Range Summary
Date Range [PASSWORD_DOTS] 2026-04-15 to 2026-04-17
Total Days [PASSWORD_DOTS] 3
Oldest Data Age [PASSWORD_DOTS] 2.0 days ago
Total Webhooks [PASSWORD_DOTS] 1,065,651
Daily Average [PASSWORD_DOTS] 355,217.00
Active Companies [PASSWORD_DOTS] 89
🏢 Company Details
Company 367 (Sensat - 459)
Total Webhooks: 796
Days Active: 3/3
Daily Average: 265.33
root@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook metrics -T 459 --from 2026-04-15 -D
INFO Managing webhook metrics for date range.
Date Range [PASSWORD_DOTS] 2026-04-15 to 2026-04-17
Config ID [PASSWORD_DOTS] 367
📊 Range Summary
Date Range [PASSWORD_DOTS] 2026-04-15 to 2026-04-17
Total Days [PASSWORD_DOTS] 3
Oldest Data Age [PASSWORD_DOTS] 2.0 days ago
Total Webhooks [PASSWORD_DOTS] 1,065,677
Daily Average [PASSWORD_DOTS] 355,225.67
Active Companies [PASSWORD_DOTS] 89
📅 Daily Breakdown
2026-04-15: 335,647 webhooks, 88 companies active
2026-04-16: 671,679 webhooks, 88 companies active
2026-04-17: 58,351 webhooks, 68 companies active
🏢 Company Details
Company 367 (Sensat - 459)
Total Webhooks: 796
Days Active: 3/3
Daily Average: 265.33
company (114 total, avg: 38)
association_change: 92 total, avg: 46, active: 2 days
creation: 3 total, avg: 1.5, active: 2 days
property_change: 19 total, avg: 9.5, active: 2 days
Unique properties: 4
Top properties: hubspot_owner_id(12), domain(3), name(3), phone(1)
deal (164 total, avg: 54.67)
property_change: 164 total, avg: 54.67, active: 3 days
Unique properties: 8
Top properties: notes_last_updated(134), closedate(7), dealstage(5), hs_deal_stage_probability(5), hs_manual_forecast_category(5)
contact (518 total, avg: 172.67)
property_change: 390 total, avg: 130, active: 3 days
Unique properties: 9
Top properties: hubspot_owner_id(186), firstname(35), email(35), associatedcompanyid(33), country(33)
creation: 36 total, avg: 18, active: 2 days
association_change: 92 total, avg: 46, active: 2 days
root@67e84f80b9d1:/home/jiminny#
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
✳ Review screenpipe usage and Boosteroid integration (claude)
Close Tab
ec2-user@ip-10-30-159-186:~ (nc)
Close Tab
ec2-user@ip-10-20-6-111:~ (nc)
Close Tab
⌥⌘1
ec2-user@ip-10-20-6-111:~...
|
NULL
|
|
43224
|
921
|
19
|
2026-04-17T07:58:46.757809+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776412726757_m2.jpg...
|
Firefox
|
Meet - Backend Chapter — Work
|
True
|
meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovali meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.com...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Workers | Datadog
Platform Sprint 2 Q2 - Platform Workers | Datadog
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Close tab
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
Problem loading page
Close tab
Symfony\Component\Debug\Exception\FatalThrowableError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line
Close tab
CloudWatch | us-east-2
Close tab
Configure SSH access to multiple environment - Engineering - Confluence
Close tab
Console Home | Console Home | eu-west-1
Close tab
New Tab
Close tab
Meet - Backend Chapter...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Workers | Datadog","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.018945312,"height":-0.045138836},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.018945312,"height":-0.08263886},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.23398438,"top":1.0,"width":0.005859375,"height":-0.08263886},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Symfony\\Component\\Debug\\Exception\\FatalThrowableError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Console Home | Console Home | eu-west-1","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Meet - Backend Chapter","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true}]...
|
2452931407015322489
|
-706931660339072270
|
app_switch
|
hybrid
|
NULL
|
Workers | Datadog
Platform Sprint 2 Q2 - Platform Workers | Datadog
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Close tab
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
Problem loading page
Close tab
Symfony\Component\Debug\Exception\FatalThrowableError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line
Close tab
CloudWatch | us-east-2
Close tab
Configure SSH access to multiple environment - Engineering - Confluence
Close tab
Console Home | Console Home | eu-west-1
Close tab
New Tab
Close tab
Meet - Backend Chapter
PhpStormFileFV faVsco.js vProjectvM-INIERNAL WE.HOOK S-1UPEjiminny_storageM+ Icenses.moMIMakerlepackage-lock.ison= phostan.neon.dist= phpstan-baseline.neon<phpunit.xmlTe raw_sql_query.sqlM+ README.mdsonar-project.properties=test.py‹> Untitled Diagram.xmlus vetur.config.jsM+ WEbnOOK HILICKING_IMPLE› ih External Librariesv E° Scratches and Consolesv D Database ConsolesV AEUA console [EU]A DEAL RISKS [EU]A DI [EU]EditViewNavigateCodeLaravelRefactorToolsWindowHelp#11894 on JY-18909-automated-reports-ask-jiminny k ~© AutomatedReportsService.phpC TeamSetupController.phppnp apl.onp© AutomatedReportsCommandTest.php© CreateHeldActivityEvent.phpC ActivityLogged.phpAulomaleakeporscallbackservice.ono© SendReportJob.php© SendReportMailJob.php© ReportController.php© TokenBuilder.php• Filesystem.phpAutomatedReportsCommand.phpAskJiminnykeporscontroller.ono© AutomatedReportsSendCommand.php© Team.php© TrackProviderInstalledEvent.php© CreateActivityLoggedEvent.phpC RequestGenerateAskJiminnyReportJob.php© AutomatedReportsRepository.php© UserPilotActivityListener.phplibd# Backend Chapter • 32 m leftAAutomatedReportsCommandTest-100% CS•8•Fri 17 Apr 10:58:46E custom.log(iii crm configurations [EUl= laravel.logA SF [jiminny@localhost]C" scratch_1.jsonV connect.vueV Onboard.vueconsole PRODL console [STAGING]A HS_local [iminny@localhost]Al console [EU] X15831584© RequestGenerateReportJob.php© SyncOpportunity.phpOpportunitySyncTrait.php x© Service.php© AutomatedReportResult.php1585© AutomatedReport.php1586"podcast_audio_url"Cc Wu resuitsT15871588trait OpportunitySyncTrait1589A32 X2 X19 A V1590private function updateOpportunity(string Scrmid, array Sproperties, array Sassociations): Opportunitycril orowoer o = oorillorE1591=1592=15931594Ix. Aulo vCONCAT(u.id, CASE WHEN U.id = t.owner_id THEN ' (owner)' ELSE "' END) AS user_id,U.emall,sa.*.t.owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable idJOIN teams t 1.n<->1: on t.id = u.team_idWHERE u.team_id = 556 and sa.provider = 'integration-app';Eajiminny v026 49 422 Х 3 X103 ^8071810811812813814815816$values = array_merge($attributes, $data);$opportunity = $this->crmEntityRepository->upsert0pportunity($attributes, $values);$this->importExternalFieldData($properties, $opportunity->getId());$this->update0pportunityAssociations($opportunity, $associations);15961598E1590select * from opportunities where id = 7594349;select * from teams where id = 459;SELECTCONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE "' END) AS user_id,u.email,sa.*,t.owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idJOIN teams tI.ns"l on c.10 = U.ceall 10WHERE U.team_id = 459 and sa.provider = 'hubspot';Services+,o, c|v D DatabaseV AEUc consoe s 400msfị crm_configurations 1 s 504 msv A jiminny@localhost4 SFA HS_localV A PROD4, console 1 s 806 msV A STAGINGA console,, DockerCSVPS3.Nprovider_user_idI provider_user_tokenprovider_refresh_token• expiresIn refresh token expiresproviderI stateI auth_scopeI retry_afterI created_atupdated_atprovider_user_token_encryptedprovider_refresh_token_encryptedI encryption_key (Hex)• sociable_typeowner_idFirefox4318355CLgaitTZMxIZQLNQML8kQEwrAgwACAKUAhI.na1-8238-b045-4568-867a-048eb2318684BAQEDBxirrMOBIJPJhwIo1KwCMhSZIBAwPHxCHFPaK4Jy9e8SsUIFuToyQLNQML8kQEwrA{UACBKGawEFThv1GK702QDDkBrfE8PBSGSgNUYTFSAFoAYABok8mHAnAAeAA1776413740<null>hubspotconnected<null>SIULL7079-04-0179992026-04-17 07:45:40eyJpdiI6IlhBeFNWUW5B0U1zRHFjaWJFMDYxUGc9PSIsInZhbHVlIj0iazB4U2dVUXp0Mkо5cTg50GhHR1E2WmNRUm92YjVPbzhHTk9KRkRucXJSd1pCcXgх0W1pb2ZpRXFWNXc0QWN2b0dtL3BBcjhkN21WK®ZHNDF4NmpsQW9nSHNZWkxU0DUyZmFyc2ZvVDVIM1JoaThGTDBNd®V6V20zd2...eYJpd¡I6IjYyVFM2Ny9xUGw4VWRjTnpGbLBKRkE9PSIsInZhbHVLIjoiT1RDVis1RGVTeWVMK0I0VWZjQSIsIm1hYy[6IjUyZTM5ZmM0YjU5MWQ2ZjQ5NmQ0MWM2M2Q10GRjZGFmZjA2ZjAyMmQzZTQ4MjhkNm.…OxoooSo0oo 5o/ o/or-ollYrolurYoraLLSFEWALEELPAGBAFSGUSZAABLUSAYAOUIВ040 0,А Ва Ат 40 а 0 0 48 0 750 94013user14839O, E,T row retrieved stardSUM: 0 6:1 W Windsurf Teams1596:12uir-o...
|
NULL
|
|
43247
|
920
|
45
|
2026-04-17T07:59:26.067690+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776412766067_m1.jpg...
|
Firefox
|
Meet - Backend Chapter — Work
|
True
|
meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovali meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.com...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Workers | Datadog
Platform Sprint 2 Q2 - Platform Workers | Datadog
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Close tab
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
Problem loading page
Close tab
Symfony\Component\Debug\Exception\FatalThrowableError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line
Close tab
CloudWatch | us-east-2
Close tab
Configure SSH access to multiple environment - Engineering - Confluence
Close tab
Console Home | Console Home | eu-west-1
Close tab
New Tab
Close tab
Meet - Backend Chapter
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Nikolov (Presenting, annotating)
Nikolay Nikolov (Presenting, annotating)
People
3
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Lukas Kovalik
Others might see more of your background. Click to view your full video.
10:59
AM
Backend Chapter
Backend Chapter
Audio settings
Turn off microphone
Video settings
Turn off camera...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Workers | Datadog","depth":4,"bounds":{"left":0.0,"top":0.072222225,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.13222222,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.13222222,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":4,"bounds":{"left":0.0,"top":0.17777778,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.17777778,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"bounds":{"left":0.0,"top":0.22333333,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.22333333,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Symfony\\Component\\Debug\\Exception\\FatalThrowableError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line","depth":4,"bounds":{"left":0.0,"top":0.2688889,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.2688889,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.31444445,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.31444445,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"bounds":{"left":0.0,"top":0.36,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.36,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Console Home | Console Home | eu-west-1","depth":4,"bounds":{"left":0.0,"top":0.40555555,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.40555555,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.4511111,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.4511111,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Meet - Backend Chapter","depth":4,"bounds":{"left":0.0,"top":0.49666667,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.49666667,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.005902778,"top":0.54444444,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.7977778,"width":0.033680554,"height":0.043333333},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8411111,"width":0.033680554,"height":0.038333334},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.8794444,"width":0.033680554,"height":0.03888889},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.91833335,"width":0.033680554,"height":0.038333334},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.95666665,"width":0.033680554,"height":0.043333333},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Nikolay Nikolov (Presenting, annotating)","depth":12,"bounds":{"left":0.07534722,"top":0.101111114,"width":0.17916666,"height":0.022222223},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Nikolov (Presenting, annotating)","depth":13,"bounds":{"left":0.07534722,"top":0.10222222,"width":0.17916666,"height":0.020555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"People","depth":15,"bounds":{"left":0.88680553,"top":0.08944444,"width":0.04097222,"height":0.04},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.9145833,"top":0.101111114,"width":0.0048611113,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Take notes with Gemini","depth":14,"bounds":{"left":0.93333334,"top":0.08944444,"width":0.025,"height":0.04},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":17,"bounds":{"left":0.9361111,"top":0.101111114,"width":0.06388891,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini","depth":22,"bounds":{"left":0.96666664,"top":0.101111114,"width":0.028125,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Gemini","depth":21,"bounds":{"left":0.96458334,"top":0.090555556,"width":0.023611112,"height":0.037777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.5798611,"top":0.61,"width":0.14652778,"height":0.08888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.72430557,"top":0.625,"width":0.08090278,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.7017361,"top":0.6205556,"width":0.11076389,"height":0.05666667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zoom in","depth":13,"bounds":{"left":0.63090277,"top":0.78333336,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open in new window","depth":13,"bounds":{"left":0.6642361,"top":0.78333336,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Enter Full Screen","depth":13,"bounds":{"left":0.69756943,"top":0.78333336,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.9201389,"top":0.36666667,"width":0.079861104,"height":0.07722222},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":1.0,"top":0.38166666,"width":-0.064236164,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":1.0,"top":0.3772222,"width":-0.042013884,"height":0.045},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":17,"bounds":{"left":0.75590277,"top":0.485,"width":0.07847222,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":1.0,"top":0.75333333,"width":-0.0006943941,"height":0.07722222},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.92743057,"top":0.7683333,"width":0.07256943,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.9079861,"top":0.7638889,"width":0.092013896,"height":0.045},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"bounds":{"left":0.75590277,"top":0.87166667,"width":0.06875,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Others might see more of your background. Click to view your full video.","depth":14,"bounds":{"left":0.9614583,"top":0.86722225,"width":0.019444445,"height":0.031111112},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"10:59","depth":12,"bounds":{"left":0.050347224,"top":0.9444444,"width":0.027777778,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AM","depth":12,"bounds":{"left":0.081597224,"top":0.9444444,"width":0.017708333,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Backend Chapter","depth":12,"bounds":{"left":0.11666667,"top":0.9111111,"width":0.090277776,"height":0.08888888},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Backend Chapter","depth":15,"bounds":{"left":0.11666667,"top":0.9444444,"width":0.090277776,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Audio settings","depth":13,"bounds":{"left":0.32118055,"top":0.9288889,"width":0.06111111,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn off microphone","depth":13,"bounds":{"left":0.34895834,"top":0.9288889,"width":0.033333335,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Video settings","depth":13,"bounds":{"left":0.38784721,"top":0.9288889,"width":0.06111111,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn off camera","depth":13,"bounds":{"left":0.415625,"top":0.9288889,"width":0.033333335,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-6131238486682112467
|
-6453404014619690186
|
app_switch
|
hybrid
|
NULL
|
Workers | Datadog
Platform Sprint 2 Q2 - Platform Workers | Datadog
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Close tab
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
Problem loading page
Close tab
Symfony\Component\Debug\Exception\FatalThrowableError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line
Close tab
CloudWatch | us-east-2
Close tab
Configure SSH access to multiple environment - Engineering - Confluence
Close tab
Console Home | Console Home | eu-west-1
Close tab
New Tab
Close tab
Meet - Backend Chapter
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Nikolov (Presenting, annotating)
Nikolay Nikolov (Presenting, annotating)
People
3
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Lukas Kovalik
Others might see more of your background. Click to view your full video.
10:59
AM
Backend Chapter
Backend Chapter
Audio settings
Turn off microphone
Video settings
Turn off camera
iTerm2ShellEditViewSessionScriptsProfilesWindowHelpBackend Chapter • 31 m left100% (47 8• Fri 17 Apr 10:59:25ec2-user@ip-10-20-6-111:~DOCKER• ₴1DEV (-zsh)882APP (-zsh)|X3-zshX4Days Active: 3/3rootesr.y Asobst: 205.3%minnyit phe artisan crm-hubspot-nebhook metrics -T A59 .-From 2026-04-15 - 0root@67e84f80b9d1:/home/jiminny# php artisan crm:hubspot-webhook metrics -T 459 --from 2026-04-15 -D•95* Review screenp...• X6ec2-user@ip-10-30-...$7INFOManaging webhook metrics for date range.Date RangeConfig IDIll Range SummaryDate RangeTotal DaysOldest Data AgeTotal WebhooksDaily AverageActive Companiesiz Daily Breakdown2026-04-15:335,647 webhooks, 88 companies active2026-04-16: 671,679 webhooks, 88 companies active2026-04-17: 58,351 webhooks, 68 companies activeCompany Details2026-04-15 to2026-04-173672026-04-15 to 2026-04-1732.0 days ago1,065,677355,225.6789Company 367 (Sensat - 459)Total Webhooks: 796Days Active: 3/3Daily Average: 265.33company (114 total, avg: 38)association_change: 92 total, avg: 46, active: 2 dayscreation: 3 total, avg: 1.5, active: 2 daysproperty_change: 19 total, avg: 9.5, active: 2 daysUnique properties: 4Top properties: hubspot_owner_id(12), domain(3), name(3), phone(1)deal (164 total, avg: 54.67)property_change: 164 total, avg: 54.67, active: 3 daysUnique properties: 8Top properties: notes_last_updated(134), closedate(7), dealstage(5), hs_deal_stage_probability(5), hs_manual_forecast_category(5)contact (518 total, avg: 172.67)property_change:390 total, avg: 130, active: 3 daysUnique properties: 9Top properties: hubspot_owner_id(186), firstname(35), email(35),associatedcompanyid(33), country(33)creation: 36 total, avg: 18, active: 2 daysassociation_change: 92 total, avg: 46, active: 2 daysroot@67e84f80b9d1:/home/jiminny#1881ec2-user@ip-10-20-...88...
|
NULL
|
|
43248
|
921
|
31
|
2026-04-17T07:59:26.112221+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776412766112_m2.jpg...
|
Firefox
|
Meet - Backend Chapter — Work
|
True
|
meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovali meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.com...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Workers | Datadog
Platform Sprint 2 Q2 - Platform Workers | Datadog
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Close tab
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
Problem loading page
Close tab
Symfony\Component\Debug\Exception\FatalThrowableError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line
Close tab
CloudWatch | us-east-2
Close tab
Configure SSH access to multiple environment - Engineering - Confluence
Close tab
Console Home | Console Home | eu-west-1
Close tab
New Tab
Close tab
Meet - Backend Chapter
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Nikolov (Presenting, annotating)
Nikolay Nikolov (Presenting, annotating)
People
3
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Lukas Kovalik
Others might see more of your background. Click to view your full video.
10:59
AM
Backend Chapter
Backend Chapter
Audio settings
Turn off microphone
Video settings
Turn off camera
Nikolay Nikolov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
The presentation by Nikolay Nikolov was added to the main screen. The presentation by Nikolay Nikolov is on the main screen....
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Workers | Datadog","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.018945312,"height":-0.045138836},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.018945312,"height":-0.08263886},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.23398438,"top":1.0,"width":0.005859375,"height":-0.08263886},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Symfony\\Component\\Debug\\Exception\\FatalThrowableError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Console Home | Console Home | eu-west-1","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Meet - Backend Chapter","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Nikolay Nikolov (Presenting, annotating)","depth":12,"bounds":{"left":0.27558595,"top":1.0,"width":0.10078125,"height":-0.063194394},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Nikolov (Presenting, annotating)","depth":13,"bounds":{"left":0.27558595,"top":1.0,"width":0.10078125,"height":-0.06388891},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"People","depth":15,"bounds":{"left":0.7320312,"top":1.0,"width":0.023046875,"height":-0.05590272},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.7476562,"top":1.0,"width":0.002734375,"height":-0.063194394},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Take notes with Gemini","depth":14,"bounds":{"left":0.75820315,"top":1.0,"width":0.0140625,"height":-0.05590272},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":17,"bounds":{"left":0.7597656,"top":1.0,"width":0.051171876,"height":-0.063194394},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini","depth":22,"bounds":{"left":0.7769531,"top":1.0,"width":0.015820313,"height":-0.063194394},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Gemini","depth":21,"bounds":{"left":0.7757813,"top":1.0,"width":0.01328125,"height":-0.056597233},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zoom in","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open in new window","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Enter Full Screen","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Others might see more of your background. Click to view your full video.","depth":14,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"10:59","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AM","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Backend Chapter","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Backend Chapter","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Audio settings","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn off microphone","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Video settings","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn off camera","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Nikolay Nikolov is presenting","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Send a reaction","depth":12,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn on captions","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Raise hand (ctrl + ⌘ + h)","depth":12,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More options","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Leave call","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Meeting details","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat with everyone","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Meeting tools","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"The presentation by Nikolay Nikolov was added to the main screen. The presentation by Nikolay Nikolov is on the main screen.","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
2453541045214975099
|
-6453394943648760972
|
app_switch
|
hybrid
|
NULL
|
Workers | Datadog
Platform Sprint 2 Q2 - Platform Workers | Datadog
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Close tab
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
Problem loading page
Close tab
Symfony\Component\Debug\Exception\FatalThrowableError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line
Close tab
CloudWatch | us-east-2
Close tab
Configure SSH access to multiple environment - Engineering - Confluence
Close tab
Console Home | Console Home | eu-west-1
Close tab
New Tab
Close tab
Meet - Backend Chapter
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Nikolov (Presenting, annotating)
Nikolay Nikolov (Presenting, annotating)
People
3
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Lukas Kovalik
Others might see more of your background. Click to view your full video.
10:59
AM
Backend Chapter
Backend Chapter
Audio settings
Turn off microphone
Video settings
Turn off camera
Nikolay Nikolov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
The presentation by Nikolay Nikolov was added to the main screen. The presentation by Nikolay Nikolov is on the main screen.
PostmanlViewWindowHelolog Hubspot vrour team is now on tne Free pran with traamin, rou retain earung raccess and ouner members are read-oniy. view team permissions to see wno can eait, or upgrade to restore collaporationotl next orselPos. search dealsPosl kead a batch or obePusl kead a batch or as!eGEl KeadEngagementsread call{{baseUrl}} /crm/v3/objects/deal/480171536586= DocsParamsAuthorization•Headers 8BodyScriptsSettingsAuth lyoeTokenbearer lokenThe authorization header will be automatically generated when you send the request.Learn more about Bearer Token authorization.Backend Chapter • 31 m left100% C28 • Fri 17 Apr 10:59:25Q Searchoel keacutl ceucnoacementveraven nuos./apl.nuoaol.cu(a) SaveNo environmentyShare18SendiCookies;AI› Associations› Associations V4CMs - URL Redirects AP Collection› Companies> COMPAREContacts• Cky Odlects› CRM Owners> CRM Pipelines› Dealsv EngagementsOLD ENCAGEMENTSdET list meetingsPosT search moditied comoaniesPOST search tasksGET read call> POST search callsder list callsPOSt meetings scheduledde cel meeunePost get link to task> POST Create Contact with Association› Hubspot> Journal & webhoooks v4OAULN› Properties> RESEARCH> SFARCH$I›lickelsv Useturositiler per comoany oniy ooen deal stacesGET engagements old associated by dealGET engagements old associated by company> Ger get history of property - deal stageGET get usersGer sr oaun› GET Meeting outcomes per meeting› GET Read all properties new> GET Read all properties oldde ole call alsposttionsGET list with associationsGET list engagements oldGET recent engagementsGET get dealser cer cnoacementwoPATCH https://api.hubapi.com/engagements/v1/engagements/249273...Parchmos.aoi.nuoaelcom/crm/vs/odlec.s/meetinos/2402/30973PATCH https://api.hubapi.com/engagements/v1/engagements/249273...ENVIRONMENIS>SPECSELOWSlConnect Git ? Console-lermina.TLOKeIVariables in requestG tokenbaseUrl› All variablesCLOaILI 2MXIZOINGMIOKOEWIAO...https://api.hubapi.comPSNFirefox© Send + Get a successful responseSend + Visualize response*& Send + Write testsVault Tools & 000...
|
NULL
|
|
43252
|
921
|
33
|
2026-04-17T07:59:30.403479+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776412770403_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AutomatedReportsCommandTest
Run 'AutomatedReportsCommandTest'
Debug 'AutomatedReportsCommandTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Show Replace Field
Search History
"podcast_audio_url"
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
0 results
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Code changed:
Hide
Sync Changes
Hide This Notification
32...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.03046875,"top":0.017361112,"width":0.0453125,"height":0.022222223},"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"bounds":{"left":0.07578125,"top":0.017361112,"width":0.14960937,"height":0.022222223},"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.78515625,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AutomatedReportsCommandTest","depth":6,"bounds":{"left":0.803125,"top":0.017361112,"width":0.09765625,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AutomatedReportsCommandTest'","depth":6,"bounds":{"left":0.9007813,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AutomatedReportsCommandTest'","depth":6,"bounds":{"left":0.9140625,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9273437,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96015626,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9734375,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9867188,"top":0.017361112,"width":0.013281226,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"bounds":{"left":0.12382813,"top":0.19930555,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.13867188,"top":0.19861111,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"podcast_audio_url\"","depth":4,"bounds":{"left":0.1515625,"top":0.19861111,"width":0.06367187,"height":0.013888889},"value":"\"podcast_audio_url\"","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.22578125,"top":0.19861111,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"bounds":{"left":0.2375,"top":0.19861111,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"bounds":{"left":0.24765626,"top":0.19861111,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"bounds":{"left":0.2578125,"top":0.19861111,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"0 results","depth":4,"bounds":{"left":0.27382812,"top":0.19791667,"width":0.030078124,"height":0.015277778},"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.30390626,"top":0.19722222,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.3140625,"top":0.19722222,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"bounds":{"left":0.32421875,"top":0.19722222,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"bounds":{"left":0.334375,"top":0.19722222,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.46640626,"top":0.19722222,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.049609374,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"32","depth":4,"bounds":{"left":0.42539063,"top":0.22430556,"width":0.012109375,"height":0.013194445},"role_description":"text"}]...
|
-3103415742087239625
|
-8250237716689468602
|
app_switch
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AutomatedReportsCommandTest
Run 'AutomatedReportsCommandTest'
Debug 'AutomatedReportsCommandTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Show Replace Field
Search History
"podcast_audio_url"
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
0 results
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Code changed:
Hide
Sync Changes
Hide This Notification
32
PostmanlViewWindowHeloog Hubspot vrour team is now on tne Free pran with traamin, rou retain earung raccess and ouner members are read-oniy. view team permissions to see wno can eait, or upgrade to restore collaporationV COLLECTIONS› Associations› Associations V4CMs - URL Redirects AP Collection› Companies> COMPAREContacts• Cky Odlects› CRM Owners> CRM Pipelines› Dealsv EngagementsOLD ENCAGEMENTSdET list meetingsPosT search moditied comoaniesPOSt search tasksGET read call> POST search callsder list callsPOSt meetings scheduledde eel meeunePost get link to task> POST Create Contact with Association› Hubspot> Journal & webhoooks v4OAULN› Properties> RESEARCH> SFARCH›lickelsv Useturusitiler per comoany only ooen deal stacesGET engagements old associated by dealGET engagements old associated by company> Ger get history of property - deal stageGET get usersGer sr oaun› GET Meeting outcomes per meeting› GET Read all properties new> GET Read all properties oldotl next orselPos. search dealsPosl kead a batch or obePusl kead a bateh or as!eEngagementsread call{{baseUrl}} /crm/v3/objects/deal/480171536586= DocsParamsAuthorization•Headers 8BodyScriptsSettingsAuth lyoeTokenbearer lokenThe authorization header will be automatically generated when you send the request.Learn more about Bearer Token authorization.$1de ole call alsposttionsGET list with associationsGET list engagements oldGET recent engagementsGET get dealser cer cnoadementwoPATCH https://api.hubapi.com/engagements/v1/engagements/249273...Parchmos.aoi.nuoaelcom/crm/vs/odlec.s/meetinos/2402/30973PATCH https://api.hubapi.com/engagements/v1/engagements/249273...ENVIRONMENIS>SPECSELOWSE Connect Git E Console-lermina.PSPhpStormQ SearchGEl Keadoel keacTLOKeIutl ceucnoacementveraven nuos./apl.nuoaol.cu(a) SaveBackend Chapter • 31 m left100% C28 • Fri 17 Apr 10:59:29No environmenty;AIShare18Variables in requestSendiG tokenCLOaILI 2MXIZOINGMIOKOEWIAO...G baseUrlhttps://api.hubapi.comCookies› All variablesN© Send + Get a successful responseSend + Visualize response*& Send + Write testsVault Tools 000...
|
NULL
|
|
43259
|
920
|
51
|
2026-04-17T07:59:40.353690+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776412780353_m1.jpg...
|
Firefox
|
Meet - Backend Chapter — Work
|
True
|
meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovali meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.com...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Workers | Datadog
Platform Sprint 2 Q2 - Platform Workers | Datadog
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Close tab
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
Problem loading page
Close tab
Symfony\Component\Debug\Exception\FatalThrowableError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line
Close tab
CloudWatch | us-east-2
Close tab
Configure SSH access to multiple environment - Engineering - Confluence
Close tab
Console Home | Console Home | eu-west-1
Close tab
New Tab
Close tab
Meet - Backend Chapter
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Nikolov (Presenting, annotating)
Nikolay Nikolov (Presenting, annotating)
People
3
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Unpin Nikolay Nikolov's presentation from your main screen
You can't unmute someone else's presentation
More options for Nikolay Nikolov
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Pin Nikolay Nikolov to your main screen
Mute Nikolay Nikolov's microphone
More options for Nikolay Nikolov
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
You’re continuously framed
Backgrounds and effects
More options for Lukas Kovalik
Lukas Kovalik
Others might see more of your background. Click to view your full video.
10:59
AM
Backend Chapter
Backend Chapter
Audio settings
Turn off microphone
Video settings
Turn off camera
Nikolay Nikolov is presenting...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Workers | Datadog","depth":4,"bounds":{"left":0.0,"top":0.072222225,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.13222222,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.13222222,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":4,"bounds":{"left":0.0,"top":0.17777778,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.17777778,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"bounds":{"left":0.0,"top":0.22333333,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.22333333,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Symfony\\Component\\Debug\\Exception\\FatalThrowableError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line","depth":4,"bounds":{"left":0.0,"top":0.2688889,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.2688889,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.31444445,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.31444445,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"bounds":{"left":0.0,"top":0.36,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.36,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Console Home | Console Home | eu-west-1","depth":4,"bounds":{"left":0.0,"top":0.40555555,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.40555555,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.4511111,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.4511111,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Meet - Backend Chapter","depth":4,"bounds":{"left":0.0,"top":0.49666667,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.49666667,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.005902778,"top":0.54444444,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.7977778,"width":0.033680554,"height":0.043333333},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8411111,"width":0.033680554,"height":0.038333334},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.8794444,"width":0.033680554,"height":0.03888889},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.91833335,"width":0.033680554,"height":0.038333334},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.95666665,"width":0.033680554,"height":0.043333333},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Nikolay Nikolov (Presenting, annotating)","depth":12,"bounds":{"left":0.07534722,"top":0.101111114,"width":0.17916666,"height":0.022222223},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Nikolov (Presenting, annotating)","depth":13,"bounds":{"left":0.07534722,"top":0.10222222,"width":0.17916666,"height":0.020555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"People","depth":15,"bounds":{"left":0.88680553,"top":0.08944444,"width":0.04097222,"height":0.04},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.9145833,"top":0.101111114,"width":0.0048611113,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Take notes with Gemini","depth":14,"bounds":{"left":0.93333334,"top":0.08944444,"width":0.025,"height":0.04},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":17,"bounds":{"left":0.9361111,"top":0.101111114,"width":0.06388891,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini","depth":22,"bounds":{"left":0.96666664,"top":0.101111114,"width":0.028125,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Gemini","depth":21,"bounds":{"left":0.96458334,"top":0.090555556,"width":0.023611112,"height":0.037777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.5798611,"top":0.61,"width":0.14652778,"height":0.08888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.72430557,"top":0.625,"width":0.08090278,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.7017361,"top":0.6205556,"width":0.11076389,"height":0.05666667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unpin Nikolay Nikolov's presentation from your main screen","depth":13,"bounds":{"left":0.34618056,"top":0.5088889,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"You can't unmute someone else's presentation","depth":13,"bounds":{"left":0.37395832,"top":0.50666666,"width":0.030555556,"height":0.04888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More options for Nikolay Nikolov","depth":13,"bounds":{"left":0.4045139,"top":0.5088889,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Zoom in","depth":13,"bounds":{"left":0.63090277,"top":0.78333336,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open in new window","depth":13,"bounds":{"left":0.6642361,"top":0.78333336,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Enter Full Screen","depth":13,"bounds":{"left":0.69756943,"top":0.78333336,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.9201389,"top":0.36666667,"width":0.079861104,"height":0.07722222},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":1.0,"top":0.38166666,"width":-0.064236164,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":1.0,"top":0.3772222,"width":-0.042013884,"height":0.045},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pin Nikolay Nikolov to your main screen","depth":13,"bounds":{"left":0.82395834,"top":0.31555554,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Mute Nikolay Nikolov's microphone","depth":13,"bounds":{"left":0.8517361,"top":0.31333333,"width":0.030555556,"height":0.04888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More options for Nikolay Nikolov","depth":13,"bounds":{"left":0.8822917,"top":0.31555554,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":17,"bounds":{"left":0.75590277,"top":0.485,"width":0.07847222,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":1.0,"top":0.75333333,"width":-0.0006943941,"height":0.07722222},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.92743057,"top":0.7683333,"width":0.07256943,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.9079861,"top":0.7638889,"width":0.092013896,"height":0.045},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"You’re continuously framed","depth":13,"bounds":{"left":0.82256943,"top":0.7,"width":0.030555556,"height":0.04888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Backgrounds and effects","depth":13,"bounds":{"left":0.853125,"top":0.7,"width":0.030555556,"height":0.04888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More options for Lukas Kovalik","depth":13,"bounds":{"left":0.8836806,"top":0.7022222,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"bounds":{"left":0.75590277,"top":0.87166667,"width":0.06875,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Others might see more of your background. Click to view your full video.","depth":14,"bounds":{"left":0.9614583,"top":0.86722225,"width":0.019444445,"height":0.031111112},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"10:59","depth":12,"bounds":{"left":0.050347224,"top":0.9444444,"width":0.027777778,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AM","depth":12,"bounds":{"left":0.081597224,"top":0.9444444,"width":0.017708333,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Backend Chapter","depth":12,"bounds":{"left":0.11666667,"top":0.9111111,"width":0.090277776,"height":0.08888888},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Backend Chapter","depth":15,"bounds":{"left":0.11666667,"top":0.9444444,"width":0.090277776,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Audio settings","depth":13,"bounds":{"left":0.32118055,"top":0.9288889,"width":0.06111111,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn off microphone","depth":13,"bounds":{"left":0.34895834,"top":0.9288889,"width":0.033333335,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Video settings","depth":13,"bounds":{"left":0.38784721,"top":0.9288889,"width":0.06111111,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn off camera","depth":13,"bounds":{"left":0.415625,"top":0.9288889,"width":0.033333335,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Nikolay Nikolov is presenting","depth":12,"bounds":{"left":0.45451388,"top":0.9288889,"width":0.03888889,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-4360578129290982292
|
-6453401884315911376
|
app_switch
|
hybrid
|
NULL
|
Workers | Datadog
Platform Sprint 2 Q2 - Platform Workers | Datadog
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Close tab
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
Problem loading page
Close tab
Symfony\Component\Debug\Exception\FatalThrowableError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line
Close tab
CloudWatch | us-east-2
Close tab
Configure SSH access to multiple environment - Engineering - Confluence
Close tab
Console Home | Console Home | eu-west-1
Close tab
New Tab
Close tab
Meet - Backend Chapter
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Nikolov (Presenting, annotating)
Nikolay Nikolov (Presenting, annotating)
People
3
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Unpin Nikolay Nikolov's presentation from your main screen
You can't unmute someone else's presentation
More options for Nikolay Nikolov
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Pin Nikolay Nikolov to your main screen
Mute Nikolay Nikolov's microphone
More options for Nikolay Nikolov
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
You’re continuously framed
Backgrounds and effects
More options for Lukas Kovalik
Lukas Kovalik
Others might see more of your background. Click to view your full video.
10:59
AM
Backend Chapter
Backend Chapter
Audio settings
Turn off microphone
Video settings
Turn off camera
Nikolay Nikolov is presenting
FirefoxFileEditViewHistoryBookmarksProfiles→ToolsWindowHelp> 0.ladlBackend Chapter • 31m leftmeet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.comNikolay Nikolov (Presenting, annotating)100% 1978 • Fri 17 Apr 10:59:39=3B+ьcalwowohttps://github.com/jiminny/app/commit/6b85272ad481136889d0701ba49138935f93520bTO0ODebug crm-sync...E Workers |Datadog C RefineSentryjiminny /app 8‹> Code17 Pull requests6. AgentsActions0 WikiSecurity and qualitye Insights@ SettingsCommit 6b85272LakyLak committed 3 weeks agoJY-19666 add casting on objectP naster (#11796)Q Filter files...• fй app/Services/Crm/Hubspot/...B OpportunitySyncTrait.phpFri 17 Apr 10:50L Al BookmarxsLa Learnl Al Chapter home@ Review( Rev Prophet|Q Type to search+ -1 file changed +1-1 lines changedv app/Services/Cra/Hubspot/ServiceTraits/OpportunitySyncTrait.php ÷00 -454,7 +454,7 00 private function batchSyncCrnobjects(string SobjectType, array Scraids): array4>41Sthis->client->getContactsByIds(Schunk, Sthis-456459>getContactFields()):foreach (sobjects as Sobjectid « SobjectData) ‹Sthis->inportCrn0bject(SobjectType, Sobjectid, SobjectData,Ssyncobjects):sthis->logger->info('[' • Sthis->getDisplayhane() • '] Batchsynced. SobjectType,lComments o455456457459•D Browse files1 parent daefb8ß connit 6685272Q Search within codestnss-scisent gercontactsoyzostschunk, Schas">getContactFields()):foreach (Sobjects as sobjectid « SobjectData) ‹|sthis-simportCrnobject(SobjectType, |(string) sobjectid,sobjectbata, Ssync0bjects);sthis->logper->info('l' • Sthis->getDisplayNane() • '] Batchsynced Sobjecttype,& Lock conversationNikolay Nikolovmeet.google.com is sharing your screen.Lukas Kovalik10:59 AM | Backend Chapter...
|
NULL
|
|
43269
|
921
|
41
|
2026-04-17T07:59:59.669413+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776412799669_m2.jpg...
|
PhpStorm
|
faVsco.js – console [EU]
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AutomatedReportsCommandTest
Run 'AutomatedReportsCommandTest'
Debug 'AutomatedReportsCommandTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Show Replace Field
Search History
"podcast_audio_url"
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
0 results
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Code changed:
Hide
Sync Changes
Hide This Notification
32
2
19
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot\ServiceTraits;
use Carbon\Carbon;
use HubSpot\Client\Crm\Deals\Model\CollectionResponseAssociatedId;
use Jiminny\Exceptions\InvalidArgumentException;
use Jiminny\Models\Account;
use Exception;
use Jiminny\Component\DealInsights\Forecast\Forecast;
use Jiminny\Jobs\Crm\MatchActivitiesToNewOpportunity;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\BusinessProcess;
use Jiminny\Exceptions\CrmException;
use Jiminny\Models\Opportunity;
use Illuminate\Support\Collection;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\CrmEntityRepository;
use Jiminny\Services\Crm\Hubspot\DealFieldsService;
use Jiminny\Services\Crm\Hubspot\OpportunitySyncStrategy\HubspotSingleSyncStrategy;
use Jiminny\Services\Crm\Hubspot\WebhookSyncBatchProcessor;
use Jiminny\Services\Crm\OpportunitySyncStrategyResolver;
use Jiminny\Utils\CurrencyFormatter;
/**
* Optimized sync methods for better performance
* These methods can be integrated into SyncCrmEntitiesTrait for significant performance gains
*/
trait OpportunitySyncTrait
{
private const int BATCH_SIZE = 100;
private const int BATCH_PROCESS_SIZE = 800;
protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;
protected CrmEntityRepository $crmEntityRepository;
protected DealFieldsService $dealFieldsService;
private ?array $cachedClosedDealStages = null;
private array $cachedBusinessProcesses = [];
private array $cachedStages = [];
public function syncOpportunities(array $parameters, ?string $strategy = null): int
{
$strategies = $this->opportunitySyncStrategyResolver->getStrategies($this->config, $strategy);
$parameters['config'] = $this->config;
$syncCount = 0;
$reportedTotal = 0;
$lastSyncedId = [];
try {
foreach ($strategies as $strategyName => $syncStrategy) {
$this->logger->info(
'[' . $this->getDisplayName() . '] Syncing opportunities using strategy: ' .
$strategyName
);
$total = 0;
$lastId = null;
$buffer = [];
// HubspotWebhookBatchSyncStrategy returns empty generator, this is for other strategies
foreach ($syncStrategy->fetchOpportunities($parameters, $total, $lastId) as $hsOpportunity) {
$buffer[] = $hsOpportunity;
// process every 800 rows (fits < 1 000 association limit)
if (\count($buffer) >= self::BATCH_PROCESS_SIZE) {
$syncCount += $this->processOpportunityBatch($buffer);
$buffer = [];
}
}
// leftovers
if ($buffer) {
$syncCount += $this->processOpportunityBatch($buffer);
}
$reportedTotal += $total;
$lastSyncedId = $lastId;
}
} catch (\HubSpot\Client\Crm\Deals\ApiException | CrmException $e) {
$this->handleSyncException($e, $parameters);
}
$this->logger->info(
'[HubSpot] Synced opportunities',
[
'team' => $this->team->getId(),
'sync_count' => $syncCount,
'total' => $reportedTotal,
'last_synced_id' => $lastSyncedId,
]
);
return $reportedTotal;
}
private function handleSyncException(\Throwable $e, array $parameters): void
{
if (($parameters['since'] ?? null) instanceof Carbon) {
$parameters['since'] = $parameters['since']->toDateTimeString();
}
$parameters['config'] = $this->config->getId();
$this->logger->warning('[' . $this->getDisplayName() . '] Sync opportunities failed', [
'teamId' => $this->team->getUuid(),
'parameters' => $parameters,
'reason' => $e->getMessage(),
]);
}
/**
* @inheritdoc
*/
public function syncOpportunity(string $crmId): ?Opportunity
{
$strategy = $this->opportunitySyncStrategyResolver->resolve(
$this->config,
OpportunitySyncStrategyResolver::SINGLE_SYNC_OPPORTUNITY_STRATEGY,
);
$parameters = [
'config' => $this->config,
'crm_id' => $crmId,
];
try {
if (! $strategy instanceof HubspotSingleSyncStrategy) {
throw new InvalidArgumentException('Strategy must by HubspotSingleSyncStrategy');
}
$hsOpportunity = $strategy->fetchOpportunity($parameters);
} catch (\HubSpot\Client\Crm\Deals\ApiException $e) {
$this->logger->info('[' . $this->getDisplayName() . '] Opportunity not found', [
'teamId' => $this->team->getUuid(),
'crmId' => $crmId,
'reason' => $e->getMessage(),
]);
return null;
}
$hsOpportunity['associations'] = $this->convertDealAssociations($hsOpportunity['associations'] ?? []);
return $this->importOrUpdateOpportunity($hsOpportunity);
}
/**
* Process webhook-collected opportunity batches.
*
* Drains Redis sets containing company CRM IDs collected from webhook events
* and dispatches ImportOpportunityBatch jobs for batch processing.
*
* @return int Number of opportunity IDs dispatched to jobs
*/
public function batchSyncOpportunities(): int
{
$configId = $this->team->getCrmConfiguration()->getId();
return $this->batchProcessor->processBatchesForObjectType(
WebhookSyncBatchProcessor::OBJECT_TYPE_DEAL,
$configId
);
}
/**
* Import a batch of opportunities by their CRM IDs.
* Fetches opportunity data from HubSpot API and delegates to importOpportunityBatch().
*
* @param array<string> $crmIds HubSpot deal CRM IDs
*
* @return array{success: array, failed_ids: array, errors?: array<string, string>}
*/
public function importOpportunityBatchByIds(array $crmIds): array
{
$fields = $this->dealFieldsService->getFieldsForConfiguration($this->config);
$allDeals = [];
foreach (array_chunk($crmIds, self::BATCH_SIZE) as $chunk) {
$deals = $this->client->getOpportunitiesByIds($chunk, $fields);
foreach ($deals as $deal) {
$allDeals[] = $deal;
}
}
// IDs not returned by HubSpot are likely deleted or inaccessible deals.
// These are not failures — retrying won't bring them back.
$fetchedIds = array_map('strval', array_column($allDeals, 'id'));
$notFoundIds = array_values(array_diff(array_map('strval', $crmIds), $fetchedIds));
if (! empty($notFoundIds)) {
$this->logger->info('[' . $this->getDisplayName() . '] CRM IDs not found in HubSpot (likely deleted)', [
'teamId' => $this->team->getId(),
'notFoundCount' => \count($notFoundIds),
'notFoundIds' => $notFoundIds,
'requestedCount' => \count($crmIds),
'fetchedCount' => \count($allDeals),
]);
}
if (empty($allDeals)) {
return ['success' => [], 'failed_ids' => []];
}
return $this->importOpportunityBatch($allDeals);
}
private function getClosedDealStages(): array
{
if ($this->cachedClosedDealStages !== null) {
return $this->cachedClosedDealStages;
}
$stages = $this->crmEntityRepository->getOpportunityClosedStages($this->config);
$data = [
'lost' => [],
'won' => [],
];
foreach ($stages as $stage) {
if ($stage->probability == 0.00) {
$data['lost'][] = $stage->crm_provider_id;
}
if ($stage->probability == 100.00) {
$data['won'][] = $stage->crm_provider_id;
}
}
$this->cachedClosedDealStages = $data;
return $data;
}
/**
* Import deals into the database with pre-fetched associations.
*
* API calls here (getAssociationsData, getExistingOpportunityCrmIds) are NOT
* caught — if they throw, the exception propagates to ImportOpportunityBatch::handle()
* where Laravel retries the whole job with backoff. After all retries exhausted,
* failed() requeues all IDs to Redis.
*
* The per-deal loop catches exceptions individually. A deal can end up in three states:
* - success: imported/updated successfully
* - failed_ids: exception thrown (DB constraint violation, corrupt data, etc.)
* These are permanent issues — retrying won't fix them.
* - skipped (null): missing dependencies (no account, unknown pipeline/stage).
* This is acceptable — the deal cannot be imported until those exist.
*/
private function importOpportunityBatch(array $deals): array
{
$syncedOpportunities = [
'success' => [],
'failed_ids' => [],
];
$dealIds = array_column($deals, 'id');
// Shared association/existing-ID preparation is batch-level state. If it fails, rethrow so the
// queue job retries the whole batch and eventually requeues all deal IDs back to Redis.
try {
$companyAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'companies');
$contactAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'contacts');
$associationsData = $this->prepareAssociatedEntities($companyAssociations, $contactAssociations);
$existingCrmIds = $this->crmEntityRepository->getExistingOpportunityCrmIds(
$this->config,
array_map('strval', $dealIds)
);
$existingCrmIdSet = array_flip($existingCrmIds);
} catch (\Throwable $e) {
$this->logger->error('[' . $this->getDisplayName() . '] Failed to fetch associations or existing IDs', [
'teamId' => $this->team->getId(),
'dealCount' => count($dealIds),
'error' => $e->getMessage(),
]);
throw $e;
}
foreach ($deals as $deal) {
try {
$deal['associations'] = $this->prepareAssociationsForOpportunity(
$deal['id'],
$companyAssociations,
$contactAssociations,
$associationsData
);
$syncedOpportunity = $this->importOrUpdateOpportunity(
$deal,
isset($existingCrmIdSet[(string) $deal['id']])
);
if ($syncedOpportunity) {
$syncedOpportunities['success'][] = $syncedOpportunity;
}
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to import opportunity', [
'teamId' => $this->team->getId(),
'crmId' => $deal['id'],
'error' => $e->getMessage(),
]);
$syncedOpportunities['failed_ids'][] = $deal['id'];
$syncedOpportunities['errors'][$deal['id']] = $e->getMessage();
}
}
return $syncedOpportunities;
}
/**
* Prepare associated entities for opportunities with optimized batch processing
* Returns structured data with CRM ID to DB ID mappings for each opportunity
*/
private function prepareAssociatedEntities(array $companyAssociations, array $contactAssociations): array
{
// Step 1: Collect all unique company and contact IDs from associations
$allCompanyIds = $this->flattenAssociationIds($companyAssociations);
$allContactIds = $this->flattenAssociationIds($contactAssociations);
// Step 2: Batch sync missing entities and get CRM ID to DB ID mappings
$companyIdMappings = [];
$contactIdMappings = [];
if (! empty($allCompanyIds)) {
$companyIdMappings = $this->prepareAssociatedAccounts($allCompanyIds);
}
if (! empty($allContactIds)) {
$contactIdMappings = $this->prepareAssociatedContacts($allContactIds);
}
return [
'company_id_mappings' => $companyIdMappings,
'contact_id_mappings' => $contactIdMappings,
];
}
/**
* Flatten association data to get unique IDs
*/
private function flattenAssociationIds(array $associations): array
{
$ids = [];
foreach ($associations as $dealAssociations) {
if (is_array($dealAssociations)) {
foreach ($dealAssociations as $id) {
$ids[$id] = true;
}
}
}
return array_keys($ids);
}
/**
* Batch sync missing accounts
*/
private function prepareAssociatedAccounts(array $companyIds): array
{
// Find which accounts already exist
$existingAccounts = $this->crmEntityRepository
->findAccountsByExternalIds($this->config, $companyIds);
$existingCompanyIds = $existingAccounts->pluck('crm_provider_id')->toArray();
$existingAccountsData = $existingAccounts->mapWithKeys(function ($account) {
return [$account->getCrmProviderId() => $account->getId()];
})->toArray();
$missingCompanyIds = array_diff($companyIds, $existingCompanyIds);
if (empty($missingCompanyIds)) {
return $existingAccountsData;
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing accounts', [
'teamId' => $this->team->getUuid(),
'total_companies' => count($companyIds),
'existing_companies' => count($existingCompanyIds),
'missing_companies' => count($missingCompanyIds),
]);
// we already have limit on opportunity ids count
// Initialize variable before try block
$syncedAccountsData = [];
try {
$syncedAccountsData = $this->batchSyncCrmObjects('companies', $missingCompanyIds);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing accounts', [
'size' => count($missingCompanyIds),
'error' => $e->getMessage(),
]);
$syncedAccountsData = [];
}
return $existingAccountsData + $syncedAccountsData;
}
/**
* Prepare associated contacts - find existing and sync missing ones
* Returns mapping of CRM ID to DB ID
*/
private function prepareAssociatedContacts(array $contactIds): array
{
// Find which contacts already exist
$existingContacts = $this->crmEntityRepository
->findContactsByExternalIds($this->config, $contactIds);
$existingContactIds = $existingContacts->pluck('crm_provider_id')->toArray();
// Create mapping for existing contacts
$existingContactsData = $existingContacts->mapWithKeys(function ($contact) {
return [$contact->getCrmProviderId() => $contact->getId()];
})->toArray();
$missingContactIds = array_diff($contactIds, $existingContactIds);
if (empty($missingContactIds)) {
return $existingContactsData;
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing contacts', [
'teamId' => $this->team->getUuid(),
'total_contacts' => count($contactIds),
'existing_contacts' => count($existingContactIds),
'missing_contacts' => count($missingContactIds),
]);
// Sync missing contacts using batch API
try {
$syncedContactsData = $this->batchSyncCrmObjects('contacts', $missingContactIds);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing contacts', [
'size' => count($missingContactIds),
'error' => $e->getMessage(),
]);
$syncedContactsData = [];
}
return $existingContactsData + $syncedContactsData;
}
private function batchSyncCrmObjects(string $objectType, array $crmIds): array
{
$syncObjects = [];
$crmObjectIds = array_values($crmIds);
foreach (array_chunk($crmObjectIds, self::BATCH_SIZE) as $chunk) {
try {
$objects = $objectType === 'companies' ?
$this->client->getCompaniesByIds($chunk, $this->getCompanyFields()) :
$this->client->getContactsByIds($chunk, $this->getContactFields());
foreach ($objects as $objectId => $objectData) {
$this->importCrmObject($objectType, (string) $objectId, $objectData, $syncObjects);
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch synced ' . $objectType, [
'requested_count' => count($chunk),
'synced_count' => count($objects),
]);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Batch ' . $objectType . ' sync failed', [
'ids' => $chunk,
'error' => $e->getMessage(),
]);
}
}
return $syncObjects;
}
private function importCrmObject(string $objectType, string $objectId, mixed $objectData, array &$syncObjects): void
{
try {
$object = $objectType === 'companies' ?
$this->importAccount($objectData) :
$this->importContact($objectData);
if ($object) {
$syncObjects[$object->getCrmProviderId()] = $object->getId();
}
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to import batch ' . $objectType, [
'id' => $objectId,
'error' => $e->getMessage(),
]);
}
}
/**
* Prepare associations for a single opportunity
*
* The return value is an array with the following structure:
* [
* 'companies' => [
* $companyCrmId => $companyId,
* ...
* ],
* 'contacts' => [
* $contactCrmId => $contactId,
* ...
* ],
* 'account_id' => $accountId,
* ]
*/
private function prepareAssociationsForOpportunity(
string $oppCrmId,
array $companyAssociations,
array $contactAssociations,
array $associationsData
): array {
$associations = [
'companies' => [],
'contacts' => [],
'account_id' => null, // Primary account for opportunity
];
$oppCompanyIds = $companyAssociations[$oppCrmId] ?? [];
foreach ($oppCompanyIds as $companyCrmId) {
if (isset($associationsData['company_id_mappings'][$companyCrmId])) {
$associations['companies'][$companyCrmId] = $associationsData['company_id_mappings'][$companyCrmId];
// Set primary account (first company becomes primary account)
if ($associations['account_id'] === null) {
$associations['account_id'] = $associationsData['company_id_mappings'][$companyCrmId];
}
}
}
$oppContactIds = $contactAssociations[$oppCrmId] ?? [];
foreach ($oppContactIds as $contactCrmId) {
if (isset($associationsData['contact_id_mappings'][$contactCrmId])) {
$associations['contacts'][$contactCrmId] = $associationsData['contact_id_mappings'][$contactCrmId];
}
}
return $associations;
}
/**
* Update only associations for an opportunity
*/
private function updateOpportunityAssociations(Opportunity $opportunity, array $associations): void
{
// Update contact associations
$this->importOpportunityContacts($opportunity, $associations['contacts']);
// Update company (account) associations
$this->updateOpportunityAccount($opportunity, $associations['account_id']);
}
/**
* Remove all contact associations from an opportunity
*/
private function removeAllOpportunityContacts(Opportunity $opportunity): void
{
$currentCount = (int) $opportunity->contacts()->count();
if ($currentCount > 0) {
$opportunity->contacts()->detach();
$this->logger->info('[' . $this->getDisplayName() . '] Removed all contact associations', [
'opportunity_id' => $opportunity->getId(),
'removed_count' => $currentCount,
]);
}
}
private function updateOpportunityAccount(Opportunity $opportunity, ?int $accountId): void
{
if ($accountId === null) {
// No account ID provided - keep current account
return;
}
$currentAccountId = $opportunity->getAccountId();
// Only update if account has changed
if ($currentAccountId !== $accountId) {
$opportunity->account_id = $accountId;
$opportunity->save();
$this->logger->info('[' . $this->getDisplayName() . '] Updated opportunity account association', [
'opportunity_id' => $opportunity->getId(),
'old_account_id' => $currentAccountId,
'new_account_id' => $accountId,
]);
}
}
/**
* Find existing opportunities by external IDs (OPTIMIZED VERSION)
* Uses batch query for better performance
*/
private function findExistingOpportunities(array $crmIds): Collection
{
return $this->crmEntityRepository
->findOpportunitiesByExternalIds($this->config, $crmIds);
}
private function processOpportunityBatch(array $opportunities): int
{
$syncedOpportunities = $this->importOpportunityBatch($opportunities);
return count($syncedOpportunities['success'] ?? []);
}
/**
* Convert single deal associations from HubSpot format to internal format
* Handles both HubSpot SDK objects and array formats
*
* @param array $opportunityAssociations Raw associations from HubSpot API or pre-processed
*
* @return array Processed associations with DB IDs
*/
private function convertDealAssociations(array $opportunityAssociations): array
{
$associations = $this->initializeAssociationsStructure();
if (empty($opportunityAssociations)) {
return $associations;
}
$associationIds = $this->extractAssociationIds($opportunityAssociations);
$this->processCompanyAssociations($associationIds, $associations);
$this->processContactAssociations($associationIds, $associations);
return $associations;
}
private function initializeAssociationsStructure(): array
{
return [
'companies' => [],
'contacts' => [],
'account_id' => null, // Primary account for opportunity
];
}
private function extractAssociationIds(array $opportunityAssociations): array
{
$associationIds = [];
foreach ($opportunityAssociations as $type => $associationData) {
if (! empty($associationData)) {
$associationIds[$type] = $this->convertSingleDealAssociations($associationData);
}
}
return $associationIds;
}
private function processCompanyAssociations(array $associationIds, array &$associations): void
{
if (empty($associationIds['companies'])) {
return;
}
$companyId = $associationIds['companies'][0];
$account = $this->findOrSyncAccount($companyId);
if ($account instanceof Account) {
$associations['companies'][$companyId] = $account->getId();
$associations['account_id'] = $account->getId();
}
}
private function processContactAssociations(array $associationIds, array &$associations): void
{
if (empty($associationIds['contacts'])) {
return;
}
foreach ($associationIds['contacts'] as $contactId) {
$contact = $this->findOrSyncContact($contactId);
if ($contact instanceof Contact) {
$associations['contacts'][$contactId] = $contact->getId();
}
}
}
private function findOrSyncAccount(string $companyId): ?Account
{
$account = $this->crmEntityRepository->findAccountByExternalId($this->config, $companyId);
if (! $account instanceof Account) {
$account = $this->syncAccount($companyId);
}
return $account;
}
private function findOrSyncContact(string $contactId): ?Contact
{
$contact = $this->crmEntityRepository->findContactByExternalId($this->config, $contactId);
if (! $contact instanceof Contact) {
$contact = $this->syncContact($contactId);
}
return $contact;
}
private function convertSingleDealAssociations($opportunityAssociations = null): array
{
$associationData = [];
if ($opportunityAssociations === null) {
return $associationData;
}
// Handle array input (from extractAssociationIds)
if (is_array($opportunityAssociations)) {
return $opportunityAssociations;
}
// Handle CollectionResponseAssociatedId object
if ($opportunityAssociations instanceof CollectionResponseAssociatedId) {
foreach ($opportunityAssociations->getResults() as $association) {
$associationData[] = $association->getId();
}
}
return $associationData;
}
private function importOrUpdateOpportunity($crmData, ?bool $exists = null): ?Opportunity
{
if (empty($crmData['properties'])) {
return null;
}
$crmId = (string) $crmData['id'];
$properties = $crmData['properties'];
$associations = $crmData['associations'] ?? [];
$opportunityExists = $exists ?? (bool) $this->crmEntityRepository->findOpportunityByExternalId(
$this->config,
$crmId
);
if ($opportunityExists) {
return $this->updateOpportunity($crmId, $properties, $associations);
} else {
return $this->createOpportunity($crmId, $properties, $associations);
}
}
/**
* Create new opportunity
*/
private function createOpportunity(string $crmId, array $properties, array $associations): ?Opportunity
{
$accountId = $this->resolveAccountId($associations);
if (! $accountId) {
return null;
}
$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);
if (! $businessProcess) {
return null;
}
$stage = $this->resolveStage($businessProcess, $properties['dealstage'] ?? null);
if (! $stage) {
return null;
}
$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);
$attributes = [
'crm_configuration_id' => $this->config->getId(),
'crm_provider_id' => $crmId,
];
$values = array_merge($attributes, $data);
$opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);
$this->importExternalFieldData($properties, $opportunity->getId());
$this->importOpportunityContacts($opportunity, $associations['contacts']);
if ($opportunity->wasRecentlyCreated) {
MatchActivitiesToNewOpportunity::dispatch($opportunity->getId());
}
return $opportunity;
}
/**
* Update existing opportunity
*/
private function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity
{
$accountId = $this->resolveAccountId($associations);
$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);
$stage = $businessProcess ? $this->resolveStage($businessProcess, $properties['dealstage'] ?? null) : null;
$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);
$attributes = [
'crm_configuration_id' => $this->config->getId(),
'crm_provider_id' => $crmId,
];
$values = array_merge($attributes, $data);
$opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);
$this->importExternalFieldData($properties, $opportunity->getId());
$this->updateOpportunityAssociations($opportunity, $associations);
return $opportunity;
}
private function resolveAccountId(array $associations): ?int
{
if (! empty($associations['accountId'])) {
return $associations['accountId'];
}
if (empty($associations)) {
return null;
}
// we can't resolve multiple account ids (currently SDK returns one company)
foreach ($associations['companies'] as $accountId) {
return $accountId;
}
return null;
}
private function buildOpportunityData(
array $properties,
?int $accountId,
?BusinessProcess $businessProcess,
?Stage $stage
): array {
$ownerId = null;
$profile = null;
if (! empty($properties['hubspot_owner_id'])) {
$ownerId = $properties['hubspot_owner_id'];
$profile = $this->crmEntityRepository->findProfileByExternalId($this->config, (string) $ownerId);
}
$name = 'Unknown';
if (isset($properties['dealname'])) {
$name = mb_strimwidth($properties['dealname'], 0, 128);
}
$amount = $this->resolveAmount($properties);
$currency = $properties['deal_currency_code'] ?? null;
$closeDate = null;
if (! empty($properties['closedate'])) {
$closeDate = Carbon::parse($properties['closedate'])->format('Y-m-d');
}
$remotelyCreatedAt = null;
if (! empty($properties['createdate']) && strtotime($properties['createdate'])) {
$date = $this->parseCleanDatetime($properties['createdate']);
$remotelyCreatedAt = $date?->format('Y-m-d H:i:s');
}
$closedStages = $this->getClosedDealStages();
$isWon = in_array($properties['dealstage'], $closedStages['won']);
$isLost = in_array($properties['dealstage'], $closedStages['lost']);
$data = [
'team_id' => $this->team->getId(),
'user_id' => $profile ? $profile->user_id : null,
'owner_id' => $ownerId,
'name' => $name,
'value' => ! empty($amount) ? $amount : null,
'currency_code' => CurrencyFormatter::formatCode($currency),
'close_date' => $closeDate,
'is_closed' => $isWon || $isLost,
'is_won' => $isWon,
'remotely_created_at' => $remotelyCreatedAt,
'probability' => $this->resolveDealProbability($properties['hs_deal_stage_probability']),
'forecast_category' => $this->resolveForecastCategory($properties['hs_manual_forecast_category']),
];
if ($accountId) {
$data['account_id'] = $accountId;
}
if ($stage) {
$data['stage_id'] = $stage->id;
}
if ($businessProcess) {
$recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);
if ($recordType) {
$data['record_type_id'] = $recordType->id;
}
}
return $data;
}
private function resolveBusinessProcess(?string $pipelineId): ?BusinessProcess
{
if ($pipelineId === null) {
return null;
}
if (isset($this->cachedBusinessProcesses[$pipelineId])) {
return $this->cachedBusinessProcesses[$pipelineId];
}
$businessProcess = $this->getBusinessProcess($pipelineId);
if (! $businessProcess instanceof BusinessProcess) {
$this->importStages();
$businessProcess = $this->getBusinessProcess($pipelineId);
}
if (! $businessProcess instanceof BusinessProcess) {
$this->logger->info(
'[HubSpot] Deal is not attached to a pipeline',
[
'pipeline' => $pipelineId]
);
}
$this->cachedBusinessProcesses[$pipelineId] = $businessProcess;
return $businessProcess;
}
private function getBusinessProcess(string $pipelineId): ?BusinessProcess
{
return $this->crmEntityRepository->findBusinessProcessesByExternalId($this->config, $pipelineId);
}
private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage
{
if (empty($stageId)) {
return null;
}
$cacheKey = $businessProcess->getId() . ':' . $stageId;
if (isset($this->cachedStages[$cacheKey])) {
return $this->cachedStages[$cacheKey];
}
$stage = $this->crmEntityRepository->getPipelineStageByConditions(
$businessProcess,
[
'crm_provider_id' => $stageId,
'type' => Stage::TYPE_OPPORTUNITY,
]
);
if ($stage === null) {
$this->importStages(null, $stageId);
}
if ($stage === null) {
$this->logger->info('[HubSpot] Stage does not exist => ' . $stageId);
}
$this->cachedStages[$cacheKey] = $stage;
return $stage;
}
private function resolveAmount(array $properties): ?string
{
$amount = null;
if (! empty($properties['amount'])) {
$amount = str_replace(',', '', $properties['amount']);
}
if ($this->config->hasDefaultCurrencyFieldSet()) {
$valueFieldName = $this->config->getDefaultCurrencyField()->getCrmProviderId();
$amount = $properties[$valueFieldName] ?? $amount;
}
return $amount;
}
private function parseCleanDatetime(string $datetime): ?Carbon
{
// Treat pre-1980 values as invalid
$minValidDate = Carbon::parse('1980-01-01 00:00:00');
try {
$date = Carbon::parse($datetime);
if ($minValidDate->gt($date)) {
return null;
}
return $date;
} catch (Exception) {
return null; // On parse error, treat as null
}
}
private function resolveDealProbability(?string $stageProbability): int
{
if ($stageProbability === null) {
return 0;
}
$probability = (float) $stageProbability;
return $probability > 1 ? 0 : (int) ($probability * 100);
}
private function resolveForecastCategory(?string $forecastCategory): string
{
if (! $forecastCategory) {
return Forecast::FORECAST_CATEGORY_UNCATEGORIZED;
}
$forecastCategory = str_replace('_', ' ', $forecastCategory);
return ucwords(strtolower($forecastCategory));
}
private function importExternalFieldData(array $properties, int $opportunityId): void
{
$crmFields = $this->getOpportunitySyncableFields();
$this->importOpportunityCrmFieldData($properties, $crmFields, $opportunityId);
}
private function importOpportunityContacts(Opportunity $opportunity, array $associations): void
{
// Handle empty or missing contact associations
if (empty($associations)) {
// Remove all existing contact associations if none provided
$this->removeAllOpportunityContacts($opportunity);
return;
}
// Use differential sync approach for better performance and accuracy
$this->syncOpportunityContactsDifferential($opportunity, $associations);
}
/**
* Sync opportunity contacts using differential approach
* This compares current vs new associations and only makes necessary changes
*/
private function syncOpportunityContactsDifferential(Opportunity $opportunity, array $contactAssociations): void
{
$currentContactCrmIds = $this->getCurrentContactCrmIds($opportunity);
$contactAssociationIds = array_keys($contactAssociations);
$contactsToAdd = array_diff($contactAssociationIds, $currentContactCrmIds);
$contactsToRemove = array_diff($currentContactCrmIds, $contactAssociationIds);
if (empty($contactsToAdd) && empty($contactsToRemove)) {
return;
}
$this->logContactAssociationChanges($opportunity, $currentContactCrmIds, $contactAssociations, $contactsToAdd, $contactsToRemove);
$this->removeContactAssociations($opportunity, $contactsToRemove);
$this->addContactAssociations($opportunity, $contactsToAdd, $contactAssociations);
}
private function getCurrentContactCrmIds(Opportunity $opportunity): array
{
return $opportunity->contacts()
->pluck('contacts.crm_provider_id')
->toArray();
}
private function logContactAssociationChanges(
Opportunity $opportunity,
array $currentContactCrmIds,
array $contactAssociations,
array $contactsToAdd,
array $contactsToRemove
): void {
$this->logger->info('[' . $this->getDisplayName() . '] Contact association changes', [
'opportunity_id' => $opportunity->getId(),
'current_contacts' => $currentContactCrmIds,
'new_contacts' => $contactAssociations,
'contacts_to_add' => $contactsToAdd,
'contacts_to_remove' => $contactsToRemove,
]);
}
private function removeContactAssociations(Opportunity $opportunity, array $contactsToRemove): void
{
if (empty($contactsToRemove)) {
return;
}
$contactsToDetach = $opportunity->contacts()
->whereIn('contacts.crm_provider_id', $contactsToRemove)
->pluck('contacts.id')
->toArray();
if (! empty($contactsToDetach)) {
$opportunity->contacts()->detach($contactsToDetach);
$this->logger->info('[' . $this->getDisplayName() . '] Removed contact associations', [
'opportunity_id' => $opportunity->getId(),
'removed_contact_crm_ids' => $contactsToRemove,
'removed_contact_count' => count($contactsToDetach),
]);
}
}
private function addContactAssociations(Opportunity $opportunity, array $contactsToAdd, array $contactAssociations): void
{
if (empty($contactsToAdd)) {
return;
}
$contactsAdded = [];
foreach ($contactsToAdd as $crmId) {
$id = $contactAssociations[$crmId];
if ($this->attachSingleContact($opportunity, (string) $crmId, $id)) {
$contactsAdded[] = $crmId;
}
}
$this->logAddedContacts($opportunity, $contactsAdded);
}
private function attachSingleContact(Opportunity $opportunity, string $crmId, int $id): bool
{
try {
$contact = $this->crmEntityRepository->findContactByConfigurationAndId($this->config, $id);
if (! $contact) {
return false;
}
return $this->performContactAttachment($opportunity, $contact, $crmId);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to add contact association', [
'opportunity_id' => $opportunity->getId(),
'contact_crm_id' => $crmId,
'error' => $e->getMessage(),
]);
return false;
}
}
private function performContactAttachment(Opportunity $opportunity, Contact $contact, string $crmId): bool
{
try {
$opportunity->contacts()->attach($contact->getId(), [
'crm_provider_id' => $crmId,
]);
return true;
} catch (\Illuminate\Database\QueryException $e) {
if (str_contains($e->getMessage(), 'Duplicate entry')) {
$this->logger->info('[' . $this->getDisplayName() . '] Contact association already exists', [
'contact_id' => $contact->getId(),
'contact_crm_id' => $crmId,
'opportunity_id' => $opportunity->getId(),
]);
return false;
}
throw $e;
}
}
private function logAddedContacts(Opportunity $opportunity, array $contactsAdded): void
{
if (! empty($contactsAdded)) {
$this->logger->info('[' . $this->getDisplayName() . '] Added contact associations', [
'opportunity_id' => $opportunity->getId(),
'contacts_to_add_count' => count($contactsAdded),
'added_contact_crm_ids' => $contactsAdded,
'added_contacts_count' => count($contactsAdded),
]);
}
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
26
9
22
3
103
Previous Highlighted Error
Next Highlighted Error...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.03046875,"top":0.017361112,"width":0.0453125,"height":0.022222223},"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"bounds":{"left":0.07578125,"top":0.017361112,"width":0.14960937,"height":0.022222223},"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.78515625,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AutomatedReportsCommandTest","depth":6,"bounds":{"left":0.803125,"top":0.017361112,"width":0.09765625,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AutomatedReportsCommandTest'","depth":6,"bounds":{"left":0.9007813,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AutomatedReportsCommandTest'","depth":6,"bounds":{"left":0.9140625,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9273437,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96015626,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9734375,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9867188,"top":0.017361112,"width":0.013281226,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"bounds":{"left":0.12382813,"top":0.19930555,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.13867188,"top":0.19861111,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"podcast_audio_url\"","depth":4,"bounds":{"left":0.1515625,"top":0.19861111,"width":0.06367187,"height":0.013888889},"value":"\"podcast_audio_url\"","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.22578125,"top":0.19861111,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"bounds":{"left":0.2375,"top":0.19861111,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"bounds":{"left":0.24765626,"top":0.19861111,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"bounds":{"left":0.2578125,"top":0.19861111,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"0 results","depth":4,"bounds":{"left":0.27382812,"top":0.19791667,"width":0.030078124,"height":0.015277778},"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.30390626,"top":0.19722222,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.3140625,"top":0.19722222,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"bounds":{"left":0.32421875,"top":0.19722222,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"bounds":{"left":0.334375,"top":0.19722222,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.46640626,"top":0.19722222,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.049609374,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"32","depth":4,"bounds":{"left":0.42539063,"top":0.22430556,"width":0.012109375,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.43984374,"top":0.22430556,"width":0.009375,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.4515625,"top":0.22430556,"width":0.011328125,"height":0.013194445},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.46484375,"top":0.22291666,"width":0.00859375,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.4734375,"top":0.22291666,"width":0.008203125,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits;\n\nuse Carbon\\Carbon;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\CollectionResponseAssociatedId;\nuse Jiminny\\Exceptions\\InvalidArgumentException;\nuse Jiminny\\Models\\Account;\nuse Exception;\nuse Jiminny\\Component\\DealInsights\\Forecast\\Forecast;\nuse Jiminny\\Jobs\\Crm\\MatchActivitiesToNewOpportunity;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\BusinessProcess;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Models\\Opportunity;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\CrmEntityRepository;\nuse Jiminny\\Services\\Crm\\Hubspot\\DealFieldsService;\nuse Jiminny\\Services\\Crm\\Hubspot\\OpportunitySyncStrategy\\HubspotSingleSyncStrategy;\nuse Jiminny\\Services\\Crm\\Hubspot\\WebhookSyncBatchProcessor;\nuse Jiminny\\Services\\Crm\\OpportunitySyncStrategyResolver;\nuse Jiminny\\Utils\\CurrencyFormatter;\n\n/**\n * Optimized sync methods for better performance\n * These methods can be integrated into SyncCrmEntitiesTrait for significant performance gains\n */\ntrait OpportunitySyncTrait\n{\n private const int BATCH_SIZE = 100;\n private const int BATCH_PROCESS_SIZE = 800;\n\n protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;\n protected CrmEntityRepository $crmEntityRepository;\n protected DealFieldsService $dealFieldsService;\n\n private ?array $cachedClosedDealStages = null;\n private array $cachedBusinessProcesses = [];\n private array $cachedStages = [];\n\n public function syncOpportunities(array $parameters, ?string $strategy = null): int\n {\n $strategies = $this->opportunitySyncStrategyResolver->getStrategies($this->config, $strategy);\n $parameters['config'] = $this->config;\n $syncCount = 0;\n $reportedTotal = 0;\n $lastSyncedId = [];\n\n try {\n foreach ($strategies as $strategyName => $syncStrategy) {\n $this->logger->info(\n '[' . $this->getDisplayName() . '] Syncing opportunities using strategy: ' .\n $strategyName\n );\n\n $total = 0;\n $lastId = null;\n $buffer = [];\n\n // HubspotWebhookBatchSyncStrategy returns empty generator, this is for other strategies\n foreach ($syncStrategy->fetchOpportunities($parameters, $total, $lastId) as $hsOpportunity) {\n $buffer[] = $hsOpportunity;\n\n // process every 800 rows (fits < 1 000 association limit)\n if (\\count($buffer) >= self::BATCH_PROCESS_SIZE) {\n $syncCount += $this->processOpportunityBatch($buffer);\n $buffer = [];\n }\n }\n\n // leftovers\n if ($buffer) {\n $syncCount += $this->processOpportunityBatch($buffer);\n }\n\n $reportedTotal += $total;\n $lastSyncedId = $lastId;\n }\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException | CrmException $e) {\n $this->handleSyncException($e, $parameters);\n }\n\n $this->logger->info(\n '[HubSpot] Synced opportunities',\n [\n 'team' => $this->team->getId(),\n 'sync_count' => $syncCount,\n 'total' => $reportedTotal,\n 'last_synced_id' => $lastSyncedId,\n ]\n );\n\n return $reportedTotal;\n }\n\n private function handleSyncException(\\Throwable $e, array $parameters): void\n {\n if (($parameters['since'] ?? null) instanceof Carbon) {\n $parameters['since'] = $parameters['since']->toDateTimeString();\n }\n $parameters['config'] = $this->config->getId();\n\n $this->logger->warning('[' . $this->getDisplayName() . '] Sync opportunities failed', [\n 'teamId' => $this->team->getUuid(),\n 'parameters' => $parameters,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n /**\n * @inheritdoc\n */\n public function syncOpportunity(string $crmId): ?Opportunity\n {\n $strategy = $this->opportunitySyncStrategyResolver->resolve(\n $this->config,\n OpportunitySyncStrategyResolver::SINGLE_SYNC_OPPORTUNITY_STRATEGY,\n );\n\n $parameters = [\n 'config' => $this->config,\n 'crm_id' => $crmId,\n ];\n\n try {\n if (! $strategy instanceof HubspotSingleSyncStrategy) {\n throw new InvalidArgumentException('Strategy must by HubspotSingleSyncStrategy');\n }\n\n $hsOpportunity = $strategy->fetchOpportunity($parameters);\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException $e) {\n $this->logger->info('[' . $this->getDisplayName() . '] Opportunity not found', [\n 'teamId' => $this->team->getUuid(),\n 'crmId' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n return null;\n }\n\n $hsOpportunity['associations'] = $this->convertDealAssociations($hsOpportunity['associations'] ?? []);\n\n return $this->importOrUpdateOpportunity($hsOpportunity);\n }\n\n /**\n * Process webhook-collected opportunity batches.\n *\n * Drains Redis sets containing company CRM IDs collected from webhook events\n * and dispatches ImportOpportunityBatch jobs for batch processing.\n *\n * @return int Number of opportunity IDs dispatched to jobs\n */\n public function batchSyncOpportunities(): int\n {\n $configId = $this->team->getCrmConfiguration()->getId();\n\n return $this->batchProcessor->processBatchesForObjectType(\n WebhookSyncBatchProcessor::OBJECT_TYPE_DEAL,\n $configId\n );\n }\n\n /**\n * Import a batch of opportunities by their CRM IDs.\n * Fetches opportunity data from HubSpot API and delegates to importOpportunityBatch().\n *\n * @param array<string> $crmIds HubSpot deal CRM IDs\n *\n * @return array{success: array, failed_ids: array, errors?: array<string, string>}\n */\n public function importOpportunityBatchByIds(array $crmIds): array\n {\n $fields = $this->dealFieldsService->getFieldsForConfiguration($this->config);\n\n $allDeals = [];\n foreach (array_chunk($crmIds, self::BATCH_SIZE) as $chunk) {\n $deals = $this->client->getOpportunitiesByIds($chunk, $fields);\n foreach ($deals as $deal) {\n $allDeals[] = $deal;\n }\n }\n\n // IDs not returned by HubSpot are likely deleted or inaccessible deals.\n // These are not failures — retrying won't bring them back.\n $fetchedIds = array_map('strval', array_column($allDeals, 'id'));\n $notFoundIds = array_values(array_diff(array_map('strval', $crmIds), $fetchedIds));\n\n if (! empty($notFoundIds)) {\n $this->logger->info('[' . $this->getDisplayName() . '] CRM IDs not found in HubSpot (likely deleted)', [\n 'teamId' => $this->team->getId(),\n 'notFoundCount' => \\count($notFoundIds),\n 'notFoundIds' => $notFoundIds,\n 'requestedCount' => \\count($crmIds),\n 'fetchedCount' => \\count($allDeals),\n ]);\n }\n\n if (empty($allDeals)) {\n return ['success' => [], 'failed_ids' => []];\n }\n\n return $this->importOpportunityBatch($allDeals);\n }\n\n private function getClosedDealStages(): array\n {\n if ($this->cachedClosedDealStages !== null) {\n return $this->cachedClosedDealStages;\n }\n\n $stages = $this->crmEntityRepository->getOpportunityClosedStages($this->config);\n $data = [\n 'lost' => [],\n 'won' => [],\n ];\n\n foreach ($stages as $stage) {\n if ($stage->probability == 0.00) {\n $data['lost'][] = $stage->crm_provider_id;\n }\n if ($stage->probability == 100.00) {\n $data['won'][] = $stage->crm_provider_id;\n }\n }\n\n $this->cachedClosedDealStages = $data;\n\n return $data;\n }\n\n /**\n * Import deals into the database with pre-fetched associations.\n *\n * API calls here (getAssociationsData, getExistingOpportunityCrmIds) are NOT\n * caught — if they throw, the exception propagates to ImportOpportunityBatch::handle()\n * where Laravel retries the whole job with backoff. After all retries exhausted,\n * failed() requeues all IDs to Redis.\n *\n * The per-deal loop catches exceptions individually. A deal can end up in three states:\n * - success: imported/updated successfully\n * - failed_ids: exception thrown (DB constraint violation, corrupt data, etc.)\n * These are permanent issues — retrying won't fix them.\n * - skipped (null): missing dependencies (no account, unknown pipeline/stage).\n * This is acceptable — the deal cannot be imported until those exist.\n */\n private function importOpportunityBatch(array $deals): array\n {\n $syncedOpportunities = [\n 'success' => [],\n 'failed_ids' => [],\n ];\n $dealIds = array_column($deals, 'id');\n\n // Shared association/existing-ID preparation is batch-level state. If it fails, rethrow so the\n // queue job retries the whole batch and eventually requeues all deal IDs back to Redis.\n try {\n $companyAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'companies');\n $contactAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'contacts');\n\n $associationsData = $this->prepareAssociatedEntities($companyAssociations, $contactAssociations);\n\n $existingCrmIds = $this->crmEntityRepository->getExistingOpportunityCrmIds(\n $this->config,\n array_map('strval', $dealIds)\n );\n $existingCrmIdSet = array_flip($existingCrmIds);\n } catch (\\Throwable $e) {\n $this->logger->error('[' . $this->getDisplayName() . '] Failed to fetch associations or existing IDs', [\n 'teamId' => $this->team->getId(),\n 'dealCount' => count($dealIds),\n 'error' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n foreach ($deals as $deal) {\n try {\n $deal['associations'] = $this->prepareAssociationsForOpportunity(\n $deal['id'],\n $companyAssociations,\n $contactAssociations,\n $associationsData\n );\n\n $syncedOpportunity = $this->importOrUpdateOpportunity(\n $deal,\n isset($existingCrmIdSet[(string) $deal['id']])\n );\n if ($syncedOpportunity) {\n $syncedOpportunities['success'][] = $syncedOpportunity;\n }\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to import opportunity', [\n 'teamId' => $this->team->getId(),\n 'crmId' => $deal['id'],\n 'error' => $e->getMessage(),\n ]);\n $syncedOpportunities['failed_ids'][] = $deal['id'];\n $syncedOpportunities['errors'][$deal['id']] = $e->getMessage();\n }\n }\n\n return $syncedOpportunities;\n }\n\n /**\n * Prepare associated entities for opportunities with optimized batch processing\n * Returns structured data with CRM ID to DB ID mappings for each opportunity\n */\n private function prepareAssociatedEntities(array $companyAssociations, array $contactAssociations): array\n {\n // Step 1: Collect all unique company and contact IDs from associations\n $allCompanyIds = $this->flattenAssociationIds($companyAssociations);\n $allContactIds = $this->flattenAssociationIds($contactAssociations);\n\n // Step 2: Batch sync missing entities and get CRM ID to DB ID mappings\n $companyIdMappings = [];\n $contactIdMappings = [];\n\n if (! empty($allCompanyIds)) {\n $companyIdMappings = $this->prepareAssociatedAccounts($allCompanyIds);\n }\n\n if (! empty($allContactIds)) {\n $contactIdMappings = $this->prepareAssociatedContacts($allContactIds);\n }\n\n return [\n 'company_id_mappings' => $companyIdMappings,\n 'contact_id_mappings' => $contactIdMappings,\n ];\n }\n\n /**\n * Flatten association data to get unique IDs\n */\n private function flattenAssociationIds(array $associations): array\n {\n $ids = [];\n foreach ($associations as $dealAssociations) {\n if (is_array($dealAssociations)) {\n foreach ($dealAssociations as $id) {\n $ids[$id] = true;\n }\n }\n }\n\n return array_keys($ids);\n }\n\n /**\n * Batch sync missing accounts\n */\n private function prepareAssociatedAccounts(array $companyIds): array\n {\n // Find which accounts already exist\n $existingAccounts = $this->crmEntityRepository\n ->findAccountsByExternalIds($this->config, $companyIds);\n\n $existingCompanyIds = $existingAccounts->pluck('crm_provider_id')->toArray();\n\n $existingAccountsData = $existingAccounts->mapWithKeys(function ($account) {\n return [$account->getCrmProviderId() => $account->getId()];\n })->toArray();\n\n $missingCompanyIds = array_diff($companyIds, $existingCompanyIds);\n\n if (empty($missingCompanyIds)) {\n return $existingAccountsData;\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing accounts', [\n 'teamId' => $this->team->getUuid(),\n 'total_companies' => count($companyIds),\n 'existing_companies' => count($existingCompanyIds),\n 'missing_companies' => count($missingCompanyIds),\n ]);\n\n // we already have limit on opportunity ids count\n // Initialize variable before try block\n $syncedAccountsData = [];\n\n try {\n $syncedAccountsData = $this->batchSyncCrmObjects('companies', $missingCompanyIds);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing accounts', [\n 'size' => count($missingCompanyIds),\n 'error' => $e->getMessage(),\n ]);\n $syncedAccountsData = [];\n }\n\n return $existingAccountsData + $syncedAccountsData;\n }\n\n /**\n * Prepare associated contacts - find existing and sync missing ones\n * Returns mapping of CRM ID to DB ID\n */\n private function prepareAssociatedContacts(array $contactIds): array\n {\n // Find which contacts already exist\n $existingContacts = $this->crmEntityRepository\n ->findContactsByExternalIds($this->config, $contactIds);\n\n $existingContactIds = $existingContacts->pluck('crm_provider_id')->toArray();\n\n // Create mapping for existing contacts\n $existingContactsData = $existingContacts->mapWithKeys(function ($contact) {\n return [$contact->getCrmProviderId() => $contact->getId()];\n })->toArray();\n\n $missingContactIds = array_diff($contactIds, $existingContactIds);\n\n if (empty($missingContactIds)) {\n return $existingContactsData;\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing contacts', [\n 'teamId' => $this->team->getUuid(),\n 'total_contacts' => count($contactIds),\n 'existing_contacts' => count($existingContactIds),\n 'missing_contacts' => count($missingContactIds),\n ]);\n\n // Sync missing contacts using batch API\n try {\n $syncedContactsData = $this->batchSyncCrmObjects('contacts', $missingContactIds);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing contacts', [\n 'size' => count($missingContactIds),\n 'error' => $e->getMessage(),\n ]);\n $syncedContactsData = [];\n }\n\n return $existingContactsData + $syncedContactsData;\n }\n\n private function batchSyncCrmObjects(string $objectType, array $crmIds): array\n {\n $syncObjects = [];\n $crmObjectIds = array_values($crmIds);\n\n foreach (array_chunk($crmObjectIds, self::BATCH_SIZE) as $chunk) {\n try {\n $objects = $objectType === 'companies' ?\n $this->client->getCompaniesByIds($chunk, $this->getCompanyFields()) :\n $this->client->getContactsByIds($chunk, $this->getContactFields());\n\n foreach ($objects as $objectId => $objectData) {\n $this->importCrmObject($objectType, (string) $objectId, $objectData, $syncObjects);\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch synced ' . $objectType, [\n 'requested_count' => count($chunk),\n 'synced_count' => count($objects),\n ]);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Batch ' . $objectType . ' sync failed', [\n 'ids' => $chunk,\n 'error' => $e->getMessage(),\n ]);\n }\n }\n\n return $syncObjects;\n }\n\n private function importCrmObject(string $objectType, string $objectId, mixed $objectData, array &$syncObjects): void\n {\n try {\n $object = $objectType === 'companies' ?\n $this->importAccount($objectData) :\n $this->importContact($objectData);\n\n if ($object) {\n $syncObjects[$object->getCrmProviderId()] = $object->getId();\n }\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to import batch ' . $objectType, [\n 'id' => $objectId,\n 'error' => $e->getMessage(),\n ]);\n }\n }\n\n /**\n * Prepare associations for a single opportunity\n *\n * The return value is an array with the following structure:\n * [\n * 'companies' => [\n * $companyCrmId => $companyId,\n * ...\n * ],\n * 'contacts' => [\n * $contactCrmId => $contactId,\n * ...\n * ],\n * 'account_id' => $accountId,\n * ]\n */\n private function prepareAssociationsForOpportunity(\n string $oppCrmId,\n array $companyAssociations,\n array $contactAssociations,\n array $associationsData\n ): array {\n $associations = [\n 'companies' => [],\n 'contacts' => [],\n 'account_id' => null, // Primary account for opportunity\n ];\n\n $oppCompanyIds = $companyAssociations[$oppCrmId] ?? [];\n foreach ($oppCompanyIds as $companyCrmId) {\n if (isset($associationsData['company_id_mappings'][$companyCrmId])) {\n $associations['companies'][$companyCrmId] = $associationsData['company_id_mappings'][$companyCrmId];\n\n // Set primary account (first company becomes primary account)\n if ($associations['account_id'] === null) {\n $associations['account_id'] = $associationsData['company_id_mappings'][$companyCrmId];\n }\n }\n }\n\n $oppContactIds = $contactAssociations[$oppCrmId] ?? [];\n foreach ($oppContactIds as $contactCrmId) {\n if (isset($associationsData['contact_id_mappings'][$contactCrmId])) {\n $associations['contacts'][$contactCrmId] = $associationsData['contact_id_mappings'][$contactCrmId];\n }\n }\n\n return $associations;\n }\n\n /**\n * Update only associations for an opportunity\n */\n private function updateOpportunityAssociations(Opportunity $opportunity, array $associations): void\n {\n // Update contact associations\n $this->importOpportunityContacts($opportunity, $associations['contacts']);\n\n // Update company (account) associations\n $this->updateOpportunityAccount($opportunity, $associations['account_id']);\n }\n\n /**\n * Remove all contact associations from an opportunity\n */\n private function removeAllOpportunityContacts(Opportunity $opportunity): void\n {\n $currentCount = (int) $opportunity->contacts()->count();\n\n if ($currentCount > 0) {\n $opportunity->contacts()->detach();\n\n $this->logger->info('[' . $this->getDisplayName() . '] Removed all contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'removed_count' => $currentCount,\n ]);\n }\n }\n\n private function updateOpportunityAccount(Opportunity $opportunity, ?int $accountId): void\n {\n if ($accountId === null) {\n // No account ID provided - keep current account\n return;\n }\n\n $currentAccountId = $opportunity->getAccountId();\n\n // Only update if account has changed\n if ($currentAccountId !== $accountId) {\n $opportunity->account_id = $accountId;\n $opportunity->save();\n\n $this->logger->info('[' . $this->getDisplayName() . '] Updated opportunity account association', [\n 'opportunity_id' => $opportunity->getId(),\n 'old_account_id' => $currentAccountId,\n 'new_account_id' => $accountId,\n ]);\n }\n }\n\n /**\n * Find existing opportunities by external IDs (OPTIMIZED VERSION)\n * Uses batch query for better performance\n */\n private function findExistingOpportunities(array $crmIds): Collection\n {\n return $this->crmEntityRepository\n ->findOpportunitiesByExternalIds($this->config, $crmIds);\n }\n\n private function processOpportunityBatch(array $opportunities): int\n {\n $syncedOpportunities = $this->importOpportunityBatch($opportunities);\n\n return count($syncedOpportunities['success'] ?? []);\n }\n\n /**\n * Convert single deal associations from HubSpot format to internal format\n * Handles both HubSpot SDK objects and array formats\n *\n * @param array $opportunityAssociations Raw associations from HubSpot API or pre-processed\n *\n * @return array Processed associations with DB IDs\n */\n private function convertDealAssociations(array $opportunityAssociations): array\n {\n $associations = $this->initializeAssociationsStructure();\n\n if (empty($opportunityAssociations)) {\n return $associations;\n }\n\n $associationIds = $this->extractAssociationIds($opportunityAssociations);\n\n $this->processCompanyAssociations($associationIds, $associations);\n $this->processContactAssociations($associationIds, $associations);\n\n return $associations;\n }\n\n private function initializeAssociationsStructure(): array\n {\n return [\n 'companies' => [],\n 'contacts' => [],\n 'account_id' => null, // Primary account for opportunity\n ];\n }\n\n private function extractAssociationIds(array $opportunityAssociations): array\n {\n $associationIds = [];\n\n foreach ($opportunityAssociations as $type => $associationData) {\n if (! empty($associationData)) {\n $associationIds[$type] = $this->convertSingleDealAssociations($associationData);\n }\n }\n\n return $associationIds;\n }\n\n private function processCompanyAssociations(array $associationIds, array &$associations): void\n {\n if (empty($associationIds['companies'])) {\n return;\n }\n\n $companyId = $associationIds['companies'][0];\n $account = $this->findOrSyncAccount($companyId);\n\n if ($account instanceof Account) {\n $associations['companies'][$companyId] = $account->getId();\n $associations['account_id'] = $account->getId();\n }\n }\n\n private function processContactAssociations(array $associationIds, array &$associations): void\n {\n if (empty($associationIds['contacts'])) {\n return;\n }\n\n foreach ($associationIds['contacts'] as $contactId) {\n $contact = $this->findOrSyncContact($contactId);\n\n if ($contact instanceof Contact) {\n $associations['contacts'][$contactId] = $contact->getId();\n }\n }\n }\n\n private function findOrSyncAccount(string $companyId): ?Account\n {\n $account = $this->crmEntityRepository->findAccountByExternalId($this->config, $companyId);\n\n if (! $account instanceof Account) {\n $account = $this->syncAccount($companyId);\n }\n\n return $account;\n }\n\n private function findOrSyncContact(string $contactId): ?Contact\n {\n $contact = $this->crmEntityRepository->findContactByExternalId($this->config, $contactId);\n\n if (! $contact instanceof Contact) {\n $contact = $this->syncContact($contactId);\n }\n\n return $contact;\n }\n\n private function convertSingleDealAssociations($opportunityAssociations = null): array\n {\n $associationData = [];\n\n if ($opportunityAssociations === null) {\n return $associationData;\n }\n\n // Handle array input (from extractAssociationIds)\n if (is_array($opportunityAssociations)) {\n return $opportunityAssociations;\n }\n\n // Handle CollectionResponseAssociatedId object\n if ($opportunityAssociations instanceof CollectionResponseAssociatedId) {\n foreach ($opportunityAssociations->getResults() as $association) {\n $associationData[] = $association->getId();\n }\n }\n\n return $associationData;\n }\n\n private function importOrUpdateOpportunity($crmData, ?bool $exists = null): ?Opportunity\n {\n if (empty($crmData['properties'])) {\n return null;\n }\n\n $crmId = (string) $crmData['id'];\n $properties = $crmData['properties'];\n $associations = $crmData['associations'] ?? [];\n\n $opportunityExists = $exists ?? (bool) $this->crmEntityRepository->findOpportunityByExternalId(\n $this->config,\n $crmId\n );\n\n if ($opportunityExists) {\n return $this->updateOpportunity($crmId, $properties, $associations);\n } else {\n return $this->createOpportunity($crmId, $properties, $associations);\n }\n }\n\n /**\n * Create new opportunity\n */\n private function createOpportunity(string $crmId, array $properties, array $associations): ?Opportunity\n {\n $accountId = $this->resolveAccountId($associations);\n if (! $accountId) {\n return null;\n }\n\n $businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);\n if (! $businessProcess) {\n return null;\n }\n\n $stage = $this->resolveStage($businessProcess, $properties['dealstage'] ?? null);\n if (! $stage) {\n return null;\n }\n\n $data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);\n\n $attributes = [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $crmId,\n ];\n\n $values = array_merge($attributes, $data);\n\n $opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);\n\n $this->importExternalFieldData($properties, $opportunity->getId());\n $this->importOpportunityContacts($opportunity, $associations['contacts']);\n\n if ($opportunity->wasRecentlyCreated) {\n MatchActivitiesToNewOpportunity::dispatch($opportunity->getId());\n }\n\n return $opportunity;\n }\n\n /**\n * Update existing opportunity\n */\n private function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity\n {\n $accountId = $this->resolveAccountId($associations);\n $businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);\n $stage = $businessProcess ? $this->resolveStage($businessProcess, $properties['dealstage'] ?? null) : null;\n\n $data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);\n\n $attributes = [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $crmId,\n ];\n\n $values = array_merge($attributes, $data);\n $opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);\n\n $this->importExternalFieldData($properties, $opportunity->getId());\n $this->updateOpportunityAssociations($opportunity, $associations);\n\n return $opportunity;\n }\n\n private function resolveAccountId(array $associations): ?int\n {\n if (! empty($associations['accountId'])) {\n return $associations['accountId'];\n }\n\n if (empty($associations)) {\n return null;\n }\n\n // we can't resolve multiple account ids (currently SDK returns one company)\n foreach ($associations['companies'] as $accountId) {\n return $accountId;\n }\n\n return null;\n }\n\n private function buildOpportunityData(\n array $properties,\n ?int $accountId,\n ?BusinessProcess $businessProcess,\n ?Stage $stage\n ): array {\n $ownerId = null;\n $profile = null;\n if (! empty($properties['hubspot_owner_id'])) {\n $ownerId = $properties['hubspot_owner_id'];\n $profile = $this->crmEntityRepository->findProfileByExternalId($this->config, (string) $ownerId);\n }\n\n $name = 'Unknown';\n if (isset($properties['dealname'])) {\n $name = mb_strimwidth($properties['dealname'], 0, 128);\n }\n\n $amount = $this->resolveAmount($properties);\n $currency = $properties['deal_currency_code'] ?? null;\n\n $closeDate = null;\n if (! empty($properties['closedate'])) {\n $closeDate = Carbon::parse($properties['closedate'])->format('Y-m-d');\n }\n\n $remotelyCreatedAt = null;\n if (! empty($properties['createdate']) && strtotime($properties['createdate'])) {\n $date = $this->parseCleanDatetime($properties['createdate']);\n $remotelyCreatedAt = $date?->format('Y-m-d H:i:s');\n }\n\n $closedStages = $this->getClosedDealStages();\n $isWon = in_array($properties['dealstage'], $closedStages['won']);\n $isLost = in_array($properties['dealstage'], $closedStages['lost']);\n\n $data = [\n 'team_id' => $this->team->getId(),\n 'user_id' => $profile ? $profile->user_id : null,\n 'owner_id' => $ownerId,\n 'name' => $name,\n 'value' => ! empty($amount) ? $amount : null,\n 'currency_code' => CurrencyFormatter::formatCode($currency),\n 'close_date' => $closeDate,\n 'is_closed' => $isWon || $isLost,\n 'is_won' => $isWon,\n 'remotely_created_at' => $remotelyCreatedAt,\n 'probability' => $this->resolveDealProbability($properties['hs_deal_stage_probability']),\n 'forecast_category' => $this->resolveForecastCategory($properties['hs_manual_forecast_category']),\n ];\n\n if ($accountId) {\n $data['account_id'] = $accountId;\n }\n\n if ($stage) {\n $data['stage_id'] = $stage->id;\n }\n\n if ($businessProcess) {\n $recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);\n if ($recordType) {\n $data['record_type_id'] = $recordType->id;\n }\n }\n\n return $data;\n }\n\n private function resolveBusinessProcess(?string $pipelineId): ?BusinessProcess\n {\n if ($pipelineId === null) {\n return null;\n }\n\n if (isset($this->cachedBusinessProcesses[$pipelineId])) {\n return $this->cachedBusinessProcesses[$pipelineId];\n }\n\n $businessProcess = $this->getBusinessProcess($pipelineId);\n\n if (! $businessProcess instanceof BusinessProcess) {\n $this->importStages();\n $businessProcess = $this->getBusinessProcess($pipelineId);\n }\n\n if (! $businessProcess instanceof BusinessProcess) {\n $this->logger->info(\n '[HubSpot] Deal is not attached to a pipeline',\n [\n 'pipeline' => $pipelineId]\n );\n }\n\n $this->cachedBusinessProcesses[$pipelineId] = $businessProcess;\n\n return $businessProcess;\n }\n\n private function getBusinessProcess(string $pipelineId): ?BusinessProcess\n {\n return $this->crmEntityRepository->findBusinessProcessesByExternalId($this->config, $pipelineId);\n }\n\n private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage\n {\n if (empty($stageId)) {\n return null;\n }\n\n $cacheKey = $businessProcess->getId() . ':' . $stageId;\n if (isset($this->cachedStages[$cacheKey])) {\n return $this->cachedStages[$cacheKey];\n }\n\n $stage = $this->crmEntityRepository->getPipelineStageByConditions(\n $businessProcess,\n [\n 'crm_provider_id' => $stageId,\n 'type' => Stage::TYPE_OPPORTUNITY,\n ]\n );\n\n if ($stage === null) {\n $this->importStages(null, $stageId);\n }\n\n if ($stage === null) {\n $this->logger->info('[HubSpot] Stage does not exist => ' . $stageId);\n }\n\n $this->cachedStages[$cacheKey] = $stage;\n\n return $stage;\n }\n\n private function resolveAmount(array $properties): ?string\n {\n $amount = null;\n if (! empty($properties['amount'])) {\n $amount = str_replace(',', '', $properties['amount']);\n }\n\n if ($this->config->hasDefaultCurrencyFieldSet()) {\n $valueFieldName = $this->config->getDefaultCurrencyField()->getCrmProviderId();\n $amount = $properties[$valueFieldName] ?? $amount;\n }\n\n return $amount;\n }\n\n private function parseCleanDatetime(string $datetime): ?Carbon\n {\n // Treat pre-1980 values as invalid\n $minValidDate = Carbon::parse('1980-01-01 00:00:00');\n\n try {\n $date = Carbon::parse($datetime);\n\n if ($minValidDate->gt($date)) {\n return null;\n }\n\n return $date;\n } catch (Exception) {\n return null; // On parse error, treat as null\n }\n }\n\n private function resolveDealProbability(?string $stageProbability): int\n {\n if ($stageProbability === null) {\n return 0;\n }\n\n $probability = (float) $stageProbability;\n\n return $probability > 1 ? 0 : (int) ($probability * 100);\n }\n\n private function resolveForecastCategory(?string $forecastCategory): string\n {\n if (! $forecastCategory) {\n return Forecast::FORECAST_CATEGORY_UNCATEGORIZED;\n }\n\n $forecastCategory = str_replace('_', ' ', $forecastCategory);\n\n return ucwords(strtolower($forecastCategory));\n }\n\n private function importExternalFieldData(array $properties, int $opportunityId): void\n {\n $crmFields = $this->getOpportunitySyncableFields();\n $this->importOpportunityCrmFieldData($properties, $crmFields, $opportunityId);\n }\n\n private function importOpportunityContacts(Opportunity $opportunity, array $associations): void\n {\n // Handle empty or missing contact associations\n if (empty($associations)) {\n // Remove all existing contact associations if none provided\n $this->removeAllOpportunityContacts($opportunity);\n\n return;\n }\n\n // Use differential sync approach for better performance and accuracy\n $this->syncOpportunityContactsDifferential($opportunity, $associations);\n }\n\n /**\n * Sync opportunity contacts using differential approach\n * This compares current vs new associations and only makes necessary changes\n */\n private function syncOpportunityContactsDifferential(Opportunity $opportunity, array $contactAssociations): void\n {\n $currentContactCrmIds = $this->getCurrentContactCrmIds($opportunity);\n $contactAssociationIds = array_keys($contactAssociations);\n\n $contactsToAdd = array_diff($contactAssociationIds, $currentContactCrmIds);\n $contactsToRemove = array_diff($currentContactCrmIds, $contactAssociationIds);\n\n if (empty($contactsToAdd) && empty($contactsToRemove)) {\n return;\n }\n\n $this->logContactAssociationChanges($opportunity, $currentContactCrmIds, $contactAssociations, $contactsToAdd, $contactsToRemove);\n\n $this->removeContactAssociations($opportunity, $contactsToRemove);\n $this->addContactAssociations($opportunity, $contactsToAdd, $contactAssociations);\n }\n\n private function getCurrentContactCrmIds(Opportunity $opportunity): array\n {\n return $opportunity->contacts()\n ->pluck('contacts.crm_provider_id')\n ->toArray();\n }\n\n private function logContactAssociationChanges(\n Opportunity $opportunity,\n array $currentContactCrmIds,\n array $contactAssociations,\n array $contactsToAdd,\n array $contactsToRemove\n ): void {\n $this->logger->info('[' . $this->getDisplayName() . '] Contact association changes', [\n 'opportunity_id' => $opportunity->getId(),\n 'current_contacts' => $currentContactCrmIds,\n 'new_contacts' => $contactAssociations,\n 'contacts_to_add' => $contactsToAdd,\n 'contacts_to_remove' => $contactsToRemove,\n ]);\n }\n\n private function removeContactAssociations(Opportunity $opportunity, array $contactsToRemove): void\n {\n if (empty($contactsToRemove)) {\n return;\n }\n\n $contactsToDetach = $opportunity->contacts()\n ->whereIn('contacts.crm_provider_id', $contactsToRemove)\n ->pluck('contacts.id')\n ->toArray();\n\n if (! empty($contactsToDetach)) {\n $opportunity->contacts()->detach($contactsToDetach);\n\n $this->logger->info('[' . $this->getDisplayName() . '] Removed contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'removed_contact_crm_ids' => $contactsToRemove,\n 'removed_contact_count' => count($contactsToDetach),\n ]);\n }\n }\n\n private function addContactAssociations(Opportunity $opportunity, array $contactsToAdd, array $contactAssociations): void\n {\n if (empty($contactsToAdd)) {\n return;\n }\n\n $contactsAdded = [];\n foreach ($contactsToAdd as $crmId) {\n $id = $contactAssociations[$crmId];\n\n if ($this->attachSingleContact($opportunity, (string) $crmId, $id)) {\n $contactsAdded[] = $crmId;\n }\n }\n\n $this->logAddedContacts($opportunity, $contactsAdded);\n }\n\n private function attachSingleContact(Opportunity $opportunity, string $crmId, int $id): bool\n {\n try {\n $contact = $this->crmEntityRepository->findContactByConfigurationAndId($this->config, $id);\n\n if (! $contact) {\n return false;\n }\n\n return $this->performContactAttachment($opportunity, $contact, $crmId);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to add contact association', [\n 'opportunity_id' => $opportunity->getId(),\n 'contact_crm_id' => $crmId,\n 'error' => $e->getMessage(),\n ]);\n\n return false;\n }\n }\n\n private function performContactAttachment(Opportunity $opportunity, Contact $contact, string $crmId): bool\n {\n try {\n $opportunity->contacts()->attach($contact->getId(), [\n 'crm_provider_id' => $crmId,\n ]);\n\n return true;\n } catch (\\Illuminate\\Database\\QueryException $e) {\n if (str_contains($e->getMessage(), 'Duplicate entry')) {\n $this->logger->info('[' . $this->getDisplayName() . '] Contact association already exists', [\n 'contact_id' => $contact->getId(),\n 'contact_crm_id' => $crmId,\n 'opportunity_id' => $opportunity->getId(),\n ]);\n\n return false;\n }\n\n throw $e;\n }\n }\n\n private function logAddedContacts(Opportunity $opportunity, array $contactsAdded): void\n {\n if (! empty($contactsAdded)) {\n $this->logger->info('[' . $this->getDisplayName() . '] Added contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'contacts_to_add_count' => count($contactsAdded),\n 'added_contact_crm_ids' => $contactsAdded,\n 'added_contacts_count' => count($contactsAdded),\n ]);\n }\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits;\n\nuse Carbon\\Carbon;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\CollectionResponseAssociatedId;\nuse Jiminny\\Exceptions\\InvalidArgumentException;\nuse Jiminny\\Models\\Account;\nuse Exception;\nuse Jiminny\\Component\\DealInsights\\Forecast\\Forecast;\nuse Jiminny\\Jobs\\Crm\\MatchActivitiesToNewOpportunity;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\BusinessProcess;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Models\\Opportunity;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\CrmEntityRepository;\nuse Jiminny\\Services\\Crm\\Hubspot\\DealFieldsService;\nuse Jiminny\\Services\\Crm\\Hubspot\\OpportunitySyncStrategy\\HubspotSingleSyncStrategy;\nuse Jiminny\\Services\\Crm\\Hubspot\\WebhookSyncBatchProcessor;\nuse Jiminny\\Services\\Crm\\OpportunitySyncStrategyResolver;\nuse Jiminny\\Utils\\CurrencyFormatter;\n\n/**\n * Optimized sync methods for better performance\n * These methods can be integrated into SyncCrmEntitiesTrait for significant performance gains\n */\ntrait OpportunitySyncTrait\n{\n private const int BATCH_SIZE = 100;\n private const int BATCH_PROCESS_SIZE = 800;\n\n protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;\n protected CrmEntityRepository $crmEntityRepository;\n protected DealFieldsService $dealFieldsService;\n\n private ?array $cachedClosedDealStages = null;\n private array $cachedBusinessProcesses = [];\n private array $cachedStages = [];\n\n public function syncOpportunities(array $parameters, ?string $strategy = null): int\n {\n $strategies = $this->opportunitySyncStrategyResolver->getStrategies($this->config, $strategy);\n $parameters['config'] = $this->config;\n $syncCount = 0;\n $reportedTotal = 0;\n $lastSyncedId = [];\n\n try {\n foreach ($strategies as $strategyName => $syncStrategy) {\n $this->logger->info(\n '[' . $this->getDisplayName() . '] Syncing opportunities using strategy: ' .\n $strategyName\n );\n\n $total = 0;\n $lastId = null;\n $buffer = [];\n\n // HubspotWebhookBatchSyncStrategy returns empty generator, this is for other strategies\n foreach ($syncStrategy->fetchOpportunities($parameters, $total, $lastId) as $hsOpportunity) {\n $buffer[] = $hsOpportunity;\n\n // process every 800 rows (fits < 1 000 association limit)\n if (\\count($buffer) >= self::BATCH_PROCESS_SIZE) {\n $syncCount += $this->processOpportunityBatch($buffer);\n $buffer = [];\n }\n }\n\n // leftovers\n if ($buffer) {\n $syncCount += $this->processOpportunityBatch($buffer);\n }\n\n $reportedTotal += $total;\n $lastSyncedId = $lastId;\n }\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException | CrmException $e) {\n $this->handleSyncException($e, $parameters);\n }\n\n $this->logger->info(\n '[HubSpot] Synced opportunities',\n [\n 'team' => $this->team->getId(),\n 'sync_count' => $syncCount,\n 'total' => $reportedTotal,\n 'last_synced_id' => $lastSyncedId,\n ]\n );\n\n return $reportedTotal;\n }\n\n private function handleSyncException(\\Throwable $e, array $parameters): void\n {\n if (($parameters['since'] ?? null) instanceof Carbon) {\n $parameters['since'] = $parameters['since']->toDateTimeString();\n }\n $parameters['config'] = $this->config->getId();\n\n $this->logger->warning('[' . $this->getDisplayName() . '] Sync opportunities failed', [\n 'teamId' => $this->team->getUuid(),\n 'parameters' => $parameters,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n /**\n * @inheritdoc\n */\n public function syncOpportunity(string $crmId): ?Opportunity\n {\n $strategy = $this->opportunitySyncStrategyResolver->resolve(\n $this->config,\n OpportunitySyncStrategyResolver::SINGLE_SYNC_OPPORTUNITY_STRATEGY,\n );\n\n $parameters = [\n 'config' => $this->config,\n 'crm_id' => $crmId,\n ];\n\n try {\n if (! $strategy instanceof HubspotSingleSyncStrategy) {\n throw new InvalidArgumentException('Strategy must by HubspotSingleSyncStrategy');\n }\n\n $hsOpportunity = $strategy->fetchOpportunity($parameters);\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException $e) {\n $this->logger->info('[' . $this->getDisplayName() . '] Opportunity not found', [\n 'teamId' => $this->team->getUuid(),\n 'crmId' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n return null;\n }\n\n $hsOpportunity['associations'] = $this->convertDealAssociations($hsOpportunity['associations'] ?? []);\n\n return $this->importOrUpdateOpportunity($hsOpportunity);\n }\n\n /**\n * Process webhook-collected opportunity batches.\n *\n * Drains Redis sets containing company CRM IDs collected from webhook events\n * and dispatches ImportOpportunityBatch jobs for batch processing.\n *\n * @return int Number of opportunity IDs dispatched to jobs\n */\n public function batchSyncOpportunities(): int\n {\n $configId = $this->team->getCrmConfiguration()->getId();\n\n return $this->batchProcessor->processBatchesForObjectType(\n WebhookSyncBatchProcessor::OBJECT_TYPE_DEAL,\n $configId\n );\n }\n\n /**\n * Import a batch of opportunities by their CRM IDs.\n * Fetches opportunity data from HubSpot API and delegates to importOpportunityBatch().\n *\n * @param array<string> $crmIds HubSpot deal CRM IDs\n *\n * @return array{success: array, failed_ids: array, errors?: array<string, string>}\n */\n public function importOpportunityBatchByIds(array $crmIds): array\n {\n $fields = $this->dealFieldsService->getFieldsForConfiguration($this->config);\n\n $allDeals = [];\n foreach (array_chunk($crmIds, self::BATCH_SIZE) as $chunk) {\n $deals = $this->client->getOpportunitiesByIds($chunk, $fields);\n foreach ($deals as $deal) {\n $allDeals[] = $deal;\n }\n }\n\n // IDs not returned by HubSpot are likely deleted or inaccessible deals.\n // These are not failures — retrying won't bring them back.\n $fetchedIds = array_map('strval', array_column($allDeals, 'id'));\n $notFoundIds = array_values(array_diff(array_map('strval', $crmIds), $fetchedIds));\n\n if (! empty($notFoundIds)) {\n $this->logger->info('[' . $this->getDisplayName() . '] CRM IDs not found in HubSpot (likely deleted)', [\n 'teamId' => $this->team->getId(),\n 'notFoundCount' => \\count($notFoundIds),\n 'notFoundIds' => $notFoundIds,\n 'requestedCount' => \\count($crmIds),\n 'fetchedCount' => \\count($allDeals),\n ]);\n }\n\n if (empty($allDeals)) {\n return ['success' => [], 'failed_ids' => []];\n }\n\n return $this->importOpportunityBatch($allDeals);\n }\n\n private function getClosedDealStages(): array\n {\n if ($this->cachedClosedDealStages !== null) {\n return $this->cachedClosedDealStages;\n }\n\n $stages = $this->crmEntityRepository->getOpportunityClosedStages($this->config);\n $data = [\n 'lost' => [],\n 'won' => [],\n ];\n\n foreach ($stages as $stage) {\n if ($stage->probability == 0.00) {\n $data['lost'][] = $stage->crm_provider_id;\n }\n if ($stage->probability == 100.00) {\n $data['won'][] = $stage->crm_provider_id;\n }\n }\n\n $this->cachedClosedDealStages = $data;\n\n return $data;\n }\n\n /**\n * Import deals into the database with pre-fetched associations.\n *\n * API calls here (getAssociationsData, getExistingOpportunityCrmIds) are NOT\n * caught — if they throw, the exception propagates to ImportOpportunityBatch::handle()\n * where Laravel retries the whole job with backoff. After all retries exhausted,\n * failed() requeues all IDs to Redis.\n *\n * The per-deal loop catches exceptions individually. A deal can end up in three states:\n * - success: imported/updated successfully\n * - failed_ids: exception thrown (DB constraint violation, corrupt data, etc.)\n * These are permanent issues — retrying won't fix them.\n * - skipped (null): missing dependencies (no account, unknown pipeline/stage).\n * This is acceptable — the deal cannot be imported until those exist.\n */\n private function importOpportunityBatch(array $deals): array\n {\n $syncedOpportunities = [\n 'success' => [],\n 'failed_ids' => [],\n ];\n $dealIds = array_column($deals, 'id');\n\n // Shared association/existing-ID preparation is batch-level state. If it fails, rethrow so the\n // queue job retries the whole batch and eventually requeues all deal IDs back to Redis.\n try {\n $companyAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'companies');\n $contactAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'contacts');\n\n $associationsData = $this->prepareAssociatedEntities($companyAssociations, $contactAssociations);\n\n $existingCrmIds = $this->crmEntityRepository->getExistingOpportunityCrmIds(\n $this->config,\n array_map('strval', $dealIds)\n );\n $existingCrmIdSet = array_flip($existingCrmIds);\n } catch (\\Throwable $e) {\n $this->logger->error('[' . $this->getDisplayName() . '] Failed to fetch associations or existing IDs', [\n 'teamId' => $this->team->getId(),\n 'dealCount' => count($dealIds),\n 'error' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n foreach ($deals as $deal) {\n try {\n $deal['associations'] = $this->prepareAssociationsForOpportunity(\n $deal['id'],\n $companyAssociations,\n $contactAssociations,\n $associationsData\n );\n\n $syncedOpportunity = $this->importOrUpdateOpportunity(\n $deal,\n isset($existingCrmIdSet[(string) $deal['id']])\n );\n if ($syncedOpportunity) {\n $syncedOpportunities['success'][] = $syncedOpportunity;\n }\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to import opportunity', [\n 'teamId' => $this->team->getId(),\n 'crmId' => $deal['id'],\n 'error' => $e->getMessage(),\n ]);\n $syncedOpportunities['failed_ids'][] = $deal['id'];\n $syncedOpportunities['errors'][$deal['id']] = $e->getMessage();\n }\n }\n\n return $syncedOpportunities;\n }\n\n /**\n * Prepare associated entities for opportunities with optimized batch processing\n * Returns structured data with CRM ID to DB ID mappings for each opportunity\n */\n private function prepareAssociatedEntities(array $companyAssociations, array $contactAssociations): array\n {\n // Step 1: Collect all unique company and contact IDs from associations\n $allCompanyIds = $this->flattenAssociationIds($companyAssociations);\n $allContactIds = $this->flattenAssociationIds($contactAssociations);\n\n // Step 2: Batch sync missing entities and get CRM ID to DB ID mappings\n $companyIdMappings = [];\n $contactIdMappings = [];\n\n if (! empty($allCompanyIds)) {\n $companyIdMappings = $this->prepareAssociatedAccounts($allCompanyIds);\n }\n\n if (! empty($allContactIds)) {\n $contactIdMappings = $this->prepareAssociatedContacts($allContactIds);\n }\n\n return [\n 'company_id_mappings' => $companyIdMappings,\n 'contact_id_mappings' => $contactIdMappings,\n ];\n }\n\n /**\n * Flatten association data to get unique IDs\n */\n private function flattenAssociationIds(array $associations): array\n {\n $ids = [];\n foreach ($associations as $dealAssociations) {\n if (is_array($dealAssociations)) {\n foreach ($dealAssociations as $id) {\n $ids[$id] = true;\n }\n }\n }\n\n return array_keys($ids);\n }\n\n /**\n * Batch sync missing accounts\n */\n private function prepareAssociatedAccounts(array $companyIds): array\n {\n // Find which accounts already exist\n $existingAccounts = $this->crmEntityRepository\n ->findAccountsByExternalIds($this->config, $companyIds);\n\n $existingCompanyIds = $existingAccounts->pluck('crm_provider_id')->toArray();\n\n $existingAccountsData = $existingAccounts->mapWithKeys(function ($account) {\n return [$account->getCrmProviderId() => $account->getId()];\n })->toArray();\n\n $missingCompanyIds = array_diff($companyIds, $existingCompanyIds);\n\n if (empty($missingCompanyIds)) {\n return $existingAccountsData;\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing accounts', [\n 'teamId' => $this->team->getUuid(),\n 'total_companies' => count($companyIds),\n 'existing_companies' => count($existingCompanyIds),\n 'missing_companies' => count($missingCompanyIds),\n ]);\n\n // we already have limit on opportunity ids count\n // Initialize variable before try block\n $syncedAccountsData = [];\n\n try {\n $syncedAccountsData = $this->batchSyncCrmObjects('companies', $missingCompanyIds);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing accounts', [\n 'size' => count($missingCompanyIds),\n 'error' => $e->getMessage(),\n ]);\n $syncedAccountsData = [];\n }\n\n return $existingAccountsData + $syncedAccountsData;\n }\n\n /**\n * Prepare associated contacts - find existing and sync missing ones\n * Returns mapping of CRM ID to DB ID\n */\n private function prepareAssociatedContacts(array $contactIds): array\n {\n // Find which contacts already exist\n $existingContacts = $this->crmEntityRepository\n ->findContactsByExternalIds($this->config, $contactIds);\n\n $existingContactIds = $existingContacts->pluck('crm_provider_id')->toArray();\n\n // Create mapping for existing contacts\n $existingContactsData = $existingContacts->mapWithKeys(function ($contact) {\n return [$contact->getCrmProviderId() => $contact->getId()];\n })->toArray();\n\n $missingContactIds = array_diff($contactIds, $existingContactIds);\n\n if (empty($missingContactIds)) {\n return $existingContactsData;\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing contacts', [\n 'teamId' => $this->team->getUuid(),\n 'total_contacts' => count($contactIds),\n 'existing_contacts' => count($existingContactIds),\n 'missing_contacts' => count($missingContactIds),\n ]);\n\n // Sync missing contacts using batch API\n try {\n $syncedContactsData = $this->batchSyncCrmObjects('contacts', $missingContactIds);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing contacts', [\n 'size' => count($missingContactIds),\n 'error' => $e->getMessage(),\n ]);\n $syncedContactsData = [];\n }\n\n return $existingContactsData + $syncedContactsData;\n }\n\n private function batchSyncCrmObjects(string $objectType, array $crmIds): array\n {\n $syncObjects = [];\n $crmObjectIds = array_values($crmIds);\n\n foreach (array_chunk($crmObjectIds, self::BATCH_SIZE) as $chunk) {\n try {\n $objects = $objectType === 'companies' ?\n $this->client->getCompaniesByIds($chunk, $this->getCompanyFields()) :\n $this->client->getContactsByIds($chunk, $this->getContactFields());\n\n foreach ($objects as $objectId => $objectData) {\n $this->importCrmObject($objectType, (string) $objectId, $objectData, $syncObjects);\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch synced ' . $objectType, [\n 'requested_count' => count($chunk),\n 'synced_count' => count($objects),\n ]);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Batch ' . $objectType . ' sync failed', [\n 'ids' => $chunk,\n 'error' => $e->getMessage(),\n ]);\n }\n }\n\n return $syncObjects;\n }\n\n private function importCrmObject(string $objectType, string $objectId, mixed $objectData, array &$syncObjects): void\n {\n try {\n $object = $objectType === 'companies' ?\n $this->importAccount($objectData) :\n $this->importContact($objectData);\n\n if ($object) {\n $syncObjects[$object->getCrmProviderId()] = $object->getId();\n }\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to import batch ' . $objectType, [\n 'id' => $objectId,\n 'error' => $e->getMessage(),\n ]);\n }\n }\n\n /**\n * Prepare associations for a single opportunity\n *\n * The return value is an array with the following structure:\n * [\n * 'companies' => [\n * $companyCrmId => $companyId,\n * ...\n * ],\n * 'contacts' => [\n * $contactCrmId => $contactId,\n * ...\n * ],\n * 'account_id' => $accountId,\n * ]\n */\n private function prepareAssociationsForOpportunity(\n string $oppCrmId,\n array $companyAssociations,\n array $contactAssociations,\n array $associationsData\n ): array {\n $associations = [\n 'companies' => [],\n 'contacts' => [],\n 'account_id' => null, // Primary account for opportunity\n ];\n\n $oppCompanyIds = $companyAssociations[$oppCrmId] ?? [];\n foreach ($oppCompanyIds as $companyCrmId) {\n if (isset($associationsData['company_id_mappings'][$companyCrmId])) {\n $associations['companies'][$companyCrmId] = $associationsData['company_id_mappings'][$companyCrmId];\n\n // Set primary account (first company becomes primary account)\n if ($associations['account_id'] === null) {\n $associations['account_id'] = $associationsData['company_id_mappings'][$companyCrmId];\n }\n }\n }\n\n $oppContactIds = $contactAssociations[$oppCrmId] ?? [];\n foreach ($oppContactIds as $contactCrmId) {\n if (isset($associationsData['contact_id_mappings'][$contactCrmId])) {\n $associations['contacts'][$contactCrmId] = $associationsData['contact_id_mappings'][$contactCrmId];\n }\n }\n\n return $associations;\n }\n\n /**\n * Update only associations for an opportunity\n */\n private function updateOpportunityAssociations(Opportunity $opportunity, array $associations): void\n {\n // Update contact associations\n $this->importOpportunityContacts($opportunity, $associations['contacts']);\n\n // Update company (account) associations\n $this->updateOpportunityAccount($opportunity, $associations['account_id']);\n }\n\n /**\n * Remove all contact associations from an opportunity\n */\n private function removeAllOpportunityContacts(Opportunity $opportunity): void\n {\n $currentCount = (int) $opportunity->contacts()->count();\n\n if ($currentCount > 0) {\n $opportunity->contacts()->detach();\n\n $this->logger->info('[' . $this->getDisplayName() . '] Removed all contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'removed_count' => $currentCount,\n ]);\n }\n }\n\n private function updateOpportunityAccount(Opportunity $opportunity, ?int $accountId): void\n {\n if ($accountId === null) {\n // No account ID provided - keep current account\n return;\n }\n\n $currentAccountId = $opportunity->getAccountId();\n\n // Only update if account has changed\n if ($currentAccountId !== $accountId) {\n $opportunity->account_id = $accountId;\n $opportunity->save();\n\n $this->logger->info('[' . $this->getDisplayName() . '] Updated opportunity account association', [\n 'opportunity_id' => $opportunity->getId(),\n 'old_account_id' => $currentAccountId,\n 'new_account_id' => $accountId,\n ]);\n }\n }\n\n /**\n * Find existing opportunities by external IDs (OPTIMIZED VERSION)\n * Uses batch query for better performance\n */\n private function findExistingOpportunities(array $crmIds): Collection\n {\n return $this->crmEntityRepository\n ->findOpportunitiesByExternalIds($this->config, $crmIds);\n }\n\n private function processOpportunityBatch(array $opportunities): int\n {\n $syncedOpportunities = $this->importOpportunityBatch($opportunities);\n\n return count($syncedOpportunities['success'] ?? []);\n }\n\n /**\n * Convert single deal associations from HubSpot format to internal format\n * Handles both HubSpot SDK objects and array formats\n *\n * @param array $opportunityAssociations Raw associations from HubSpot API or pre-processed\n *\n * @return array Processed associations with DB IDs\n */\n private function convertDealAssociations(array $opportunityAssociations): array\n {\n $associations = $this->initializeAssociationsStructure();\n\n if (empty($opportunityAssociations)) {\n return $associations;\n }\n\n $associationIds = $this->extractAssociationIds($opportunityAssociations);\n\n $this->processCompanyAssociations($associationIds, $associations);\n $this->processContactAssociations($associationIds, $associations);\n\n return $associations;\n }\n\n private function initializeAssociationsStructure(): array\n {\n return [\n 'companies' => [],\n 'contacts' => [],\n 'account_id' => null, // Primary account for opportunity\n ];\n }\n\n private function extractAssociationIds(array $opportunityAssociations): array\n {\n $associationIds = [];\n\n foreach ($opportunityAssociations as $type => $associationData) {\n if (! empty($associationData)) {\n $associationIds[$type] = $this->convertSingleDealAssociations($associationData);\n }\n }\n\n return $associationIds;\n }\n\n private function processCompanyAssociations(array $associationIds, array &$associations): void\n {\n if (empty($associationIds['companies'])) {\n return;\n }\n\n $companyId = $associationIds['companies'][0];\n $account = $this->findOrSyncAccount($companyId);\n\n if ($account instanceof Account) {\n $associations['companies'][$companyId] = $account->getId();\n $associations['account_id'] = $account->getId();\n }\n }\n\n private function processContactAssociations(array $associationIds, array &$associations): void\n {\n if (empty($associationIds['contacts'])) {\n return;\n }\n\n foreach ($associationIds['contacts'] as $contactId) {\n $contact = $this->findOrSyncContact($contactId);\n\n if ($contact instanceof Contact) {\n $associations['contacts'][$contactId] = $contact->getId();\n }\n }\n }\n\n private function findOrSyncAccount(string $companyId): ?Account\n {\n $account = $this->crmEntityRepository->findAccountByExternalId($this->config, $companyId);\n\n if (! $account instanceof Account) {\n $account = $this->syncAccount($companyId);\n }\n\n return $account;\n }\n\n private function findOrSyncContact(string $contactId): ?Contact\n {\n $contact = $this->crmEntityRepository->findContactByExternalId($this->config, $contactId);\n\n if (! $contact instanceof Contact) {\n $contact = $this->syncContact($contactId);\n }\n\n return $contact;\n }\n\n private function convertSingleDealAssociations($opportunityAssociations = null): array\n {\n $associationData = [];\n\n if ($opportunityAssociations === null) {\n return $associationData;\n }\n\n // Handle array input (from extractAssociationIds)\n if (is_array($opportunityAssociations)) {\n return $opportunityAssociations;\n }\n\n // Handle CollectionResponseAssociatedId object\n if ($opportunityAssociations instanceof CollectionResponseAssociatedId) {\n foreach ($opportunityAssociations->getResults() as $association) {\n $associationData[] = $association->getId();\n }\n }\n\n return $associationData;\n }\n\n private function importOrUpdateOpportunity($crmData, ?bool $exists = null): ?Opportunity\n {\n if (empty($crmData['properties'])) {\n return null;\n }\n\n $crmId = (string) $crmData['id'];\n $properties = $crmData['properties'];\n $associations = $crmData['associations'] ?? [];\n\n $opportunityExists = $exists ?? (bool) $this->crmEntityRepository->findOpportunityByExternalId(\n $this->config,\n $crmId\n );\n\n if ($opportunityExists) {\n return $this->updateOpportunity($crmId, $properties, $associations);\n } else {\n return $this->createOpportunity($crmId, $properties, $associations);\n }\n }\n\n /**\n * Create new opportunity\n */\n private function createOpportunity(string $crmId, array $properties, array $associations): ?Opportunity\n {\n $accountId = $this->resolveAccountId($associations);\n if (! $accountId) {\n return null;\n }\n\n $businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);\n if (! $businessProcess) {\n return null;\n }\n\n $stage = $this->resolveStage($businessProcess, $properties['dealstage'] ?? null);\n if (! $stage) {\n return null;\n }\n\n $data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);\n\n $attributes = [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $crmId,\n ];\n\n $values = array_merge($attributes, $data);\n\n $opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);\n\n $this->importExternalFieldData($properties, $opportunity->getId());\n $this->importOpportunityContacts($opportunity, $associations['contacts']);\n\n if ($opportunity->wasRecentlyCreated) {\n MatchActivitiesToNewOpportunity::dispatch($opportunity->getId());\n }\n\n return $opportunity;\n }\n\n /**\n * Update existing opportunity\n */\n private function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity\n {\n $accountId = $this->resolveAccountId($associations);\n $businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);\n $stage = $businessProcess ? $this->resolveStage($businessProcess, $properties['dealstage'] ?? null) : null;\n\n $data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);\n\n $attributes = [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $crmId,\n ];\n\n $values = array_merge($attributes, $data);\n $opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);\n\n $this->importExternalFieldData($properties, $opportunity->getId());\n $this->updateOpportunityAssociations($opportunity, $associations);\n\n return $opportunity;\n }\n\n private function resolveAccountId(array $associations): ?int\n {\n if (! empty($associations['accountId'])) {\n return $associations['accountId'];\n }\n\n if (empty($associations)) {\n return null;\n }\n\n // we can't resolve multiple account ids (currently SDK returns one company)\n foreach ($associations['companies'] as $accountId) {\n return $accountId;\n }\n\n return null;\n }\n\n private function buildOpportunityData(\n array $properties,\n ?int $accountId,\n ?BusinessProcess $businessProcess,\n ?Stage $stage\n ): array {\n $ownerId = null;\n $profile = null;\n if (! empty($properties['hubspot_owner_id'])) {\n $ownerId = $properties['hubspot_owner_id'];\n $profile = $this->crmEntityRepository->findProfileByExternalId($this->config, (string) $ownerId);\n }\n\n $name = 'Unknown';\n if (isset($properties['dealname'])) {\n $name = mb_strimwidth($properties['dealname'], 0, 128);\n }\n\n $amount = $this->resolveAmount($properties);\n $currency = $properties['deal_currency_code'] ?? null;\n\n $closeDate = null;\n if (! empty($properties['closedate'])) {\n $closeDate = Carbon::parse($properties['closedate'])->format('Y-m-d');\n }\n\n $remotelyCreatedAt = null;\n if (! empty($properties['createdate']) && strtotime($properties['createdate'])) {\n $date = $this->parseCleanDatetime($properties['createdate']);\n $remotelyCreatedAt = $date?->format('Y-m-d H:i:s');\n }\n\n $closedStages = $this->getClosedDealStages();\n $isWon = in_array($properties['dealstage'], $closedStages['won']);\n $isLost = in_array($properties['dealstage'], $closedStages['lost']);\n\n $data = [\n 'team_id' => $this->team->getId(),\n 'user_id' => $profile ? $profile->user_id : null,\n 'owner_id' => $ownerId,\n 'name' => $name,\n 'value' => ! empty($amount) ? $amount : null,\n 'currency_code' => CurrencyFormatter::formatCode($currency),\n 'close_date' => $closeDate,\n 'is_closed' => $isWon || $isLost,\n 'is_won' => $isWon,\n 'remotely_created_at' => $remotelyCreatedAt,\n 'probability' => $this->resolveDealProbability($properties['hs_deal_stage_probability']),\n 'forecast_category' => $this->resolveForecastCategory($properties['hs_manual_forecast_category']),\n ];\n\n if ($accountId) {\n $data['account_id'] = $accountId;\n }\n\n if ($stage) {\n $data['stage_id'] = $stage->id;\n }\n\n if ($businessProcess) {\n $recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);\n if ($recordType) {\n $data['record_type_id'] = $recordType->id;\n }\n }\n\n return $data;\n }\n\n private function resolveBusinessProcess(?string $pipelineId): ?BusinessProcess\n {\n if ($pipelineId === null) {\n return null;\n }\n\n if (isset($this->cachedBusinessProcesses[$pipelineId])) {\n return $this->cachedBusinessProcesses[$pipelineId];\n }\n\n $businessProcess = $this->getBusinessProcess($pipelineId);\n\n if (! $businessProcess instanceof BusinessProcess) {\n $this->importStages();\n $businessProcess = $this->getBusinessProcess($pipelineId);\n }\n\n if (! $businessProcess instanceof BusinessProcess) {\n $this->logger->info(\n '[HubSpot] Deal is not attached to a pipeline',\n [\n 'pipeline' => $pipelineId]\n );\n }\n\n $this->cachedBusinessProcesses[$pipelineId] = $businessProcess;\n\n return $businessProcess;\n }\n\n private function getBusinessProcess(string $pipelineId): ?BusinessProcess\n {\n return $this->crmEntityRepository->findBusinessProcessesByExternalId($this->config, $pipelineId);\n }\n\n private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage\n {\n if (empty($stageId)) {\n return null;\n }\n\n $cacheKey = $businessProcess->getId() . ':' . $stageId;\n if (isset($this->cachedStages[$cacheKey])) {\n return $this->cachedStages[$cacheKey];\n }\n\n $stage = $this->crmEntityRepository->getPipelineStageByConditions(\n $businessProcess,\n [\n 'crm_provider_id' => $stageId,\n 'type' => Stage::TYPE_OPPORTUNITY,\n ]\n );\n\n if ($stage === null) {\n $this->importStages(null, $stageId);\n }\n\n if ($stage === null) {\n $this->logger->info('[HubSpot] Stage does not exist => ' . $stageId);\n }\n\n $this->cachedStages[$cacheKey] = $stage;\n\n return $stage;\n }\n\n private function resolveAmount(array $properties): ?string\n {\n $amount = null;\n if (! empty($properties['amount'])) {\n $amount = str_replace(',', '', $properties['amount']);\n }\n\n if ($this->config->hasDefaultCurrencyFieldSet()) {\n $valueFieldName = $this->config->getDefaultCurrencyField()->getCrmProviderId();\n $amount = $properties[$valueFieldName] ?? $amount;\n }\n\n return $amount;\n }\n\n private function parseCleanDatetime(string $datetime): ?Carbon\n {\n // Treat pre-1980 values as invalid\n $minValidDate = Carbon::parse('1980-01-01 00:00:00');\n\n try {\n $date = Carbon::parse($datetime);\n\n if ($minValidDate->gt($date)) {\n return null;\n }\n\n return $date;\n } catch (Exception) {\n return null; // On parse error, treat as null\n }\n }\n\n private function resolveDealProbability(?string $stageProbability): int\n {\n if ($stageProbability === null) {\n return 0;\n }\n\n $probability = (float) $stageProbability;\n\n return $probability > 1 ? 0 : (int) ($probability * 100);\n }\n\n private function resolveForecastCategory(?string $forecastCategory): string\n {\n if (! $forecastCategory) {\n return Forecast::FORECAST_CATEGORY_UNCATEGORIZED;\n }\n\n $forecastCategory = str_replace('_', ' ', $forecastCategory);\n\n return ucwords(strtolower($forecastCategory));\n }\n\n private function importExternalFieldData(array $properties, int $opportunityId): void\n {\n $crmFields = $this->getOpportunitySyncableFields();\n $this->importOpportunityCrmFieldData($properties, $crmFields, $opportunityId);\n }\n\n private function importOpportunityContacts(Opportunity $opportunity, array $associations): void\n {\n // Handle empty or missing contact associations\n if (empty($associations)) {\n // Remove all existing contact associations if none provided\n $this->removeAllOpportunityContacts($opportunity);\n\n return;\n }\n\n // Use differential sync approach for better performance and accuracy\n $this->syncOpportunityContactsDifferential($opportunity, $associations);\n }\n\n /**\n * Sync opportunity contacts using differential approach\n * This compares current vs new associations and only makes necessary changes\n */\n private function syncOpportunityContactsDifferential(Opportunity $opportunity, array $contactAssociations): void\n {\n $currentContactCrmIds = $this->getCurrentContactCrmIds($opportunity);\n $contactAssociationIds = array_keys($contactAssociations);\n\n $contactsToAdd = array_diff($contactAssociationIds, $currentContactCrmIds);\n $contactsToRemove = array_diff($currentContactCrmIds, $contactAssociationIds);\n\n if (empty($contactsToAdd) && empty($contactsToRemove)) {\n return;\n }\n\n $this->logContactAssociationChanges($opportunity, $currentContactCrmIds, $contactAssociations, $contactsToAdd, $contactsToRemove);\n\n $this->removeContactAssociations($opportunity, $contactsToRemove);\n $this->addContactAssociations($opportunity, $contactsToAdd, $contactAssociations);\n }\n\n private function getCurrentContactCrmIds(Opportunity $opportunity): array\n {\n return $opportunity->contacts()\n ->pluck('contacts.crm_provider_id')\n ->toArray();\n }\n\n private function logContactAssociationChanges(\n Opportunity $opportunity,\n array $currentContactCrmIds,\n array $contactAssociations,\n array $contactsToAdd,\n array $contactsToRemove\n ): void {\n $this->logger->info('[' . $this->getDisplayName() . '] Contact association changes', [\n 'opportunity_id' => $opportunity->getId(),\n 'current_contacts' => $currentContactCrmIds,\n 'new_contacts' => $contactAssociations,\n 'contacts_to_add' => $contactsToAdd,\n 'contacts_to_remove' => $contactsToRemove,\n ]);\n }\n\n private function removeContactAssociations(Opportunity $opportunity, array $contactsToRemove): void\n {\n if (empty($contactsToRemove)) {\n return;\n }\n\n $contactsToDetach = $opportunity->contacts()\n ->whereIn('contacts.crm_provider_id', $contactsToRemove)\n ->pluck('contacts.id')\n ->toArray();\n\n if (! empty($contactsToDetach)) {\n $opportunity->contacts()->detach($contactsToDetach);\n\n $this->logger->info('[' . $this->getDisplayName() . '] Removed contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'removed_contact_crm_ids' => $contactsToRemove,\n 'removed_contact_count' => count($contactsToDetach),\n ]);\n }\n }\n\n private function addContactAssociations(Opportunity $opportunity, array $contactsToAdd, array $contactAssociations): void\n {\n if (empty($contactsToAdd)) {\n return;\n }\n\n $contactsAdded = [];\n foreach ($contactsToAdd as $crmId) {\n $id = $contactAssociations[$crmId];\n\n if ($this->attachSingleContact($opportunity, (string) $crmId, $id)) {\n $contactsAdded[] = $crmId;\n }\n }\n\n $this->logAddedContacts($opportunity, $contactsAdded);\n }\n\n private function attachSingleContact(Opportunity $opportunity, string $crmId, int $id): bool\n {\n try {\n $contact = $this->crmEntityRepository->findContactByConfigurationAndId($this->config, $id);\n\n if (! $contact) {\n return false;\n }\n\n return $this->performContactAttachment($opportunity, $contact, $crmId);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to add contact association', [\n 'opportunity_id' => $opportunity->getId(),\n 'contact_crm_id' => $crmId,\n 'error' => $e->getMessage(),\n ]);\n\n return false;\n }\n }\n\n private function performContactAttachment(Opportunity $opportunity, Contact $contact, string $crmId): bool\n {\n try {\n $opportunity->contacts()->attach($contact->getId(), [\n 'crm_provider_id' => $crmId,\n ]);\n\n return true;\n } catch (\\Illuminate\\Database\\QueryException $e) {\n if (str_contains($e->getMessage(), 'Duplicate entry')) {\n $this->logger->info('[' . $this->getDisplayName() . '] Contact association already exists', [\n 'contact_id' => $contact->getId(),\n 'contact_crm_id' => $crmId,\n 'opportunity_id' => $opportunity->getId(),\n ]);\n\n return false;\n }\n\n throw $e;\n }\n }\n\n private function logAddedContacts(Opportunity $opportunity, array $contactsAdded): void\n {\n if (! empty($contactsAdded)) {\n $this->logger->info('[' . $this->getDisplayName() . '] Added contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'contacts_to_add_count' => count($contactsAdded),\n 'added_contact_crm_ids' => $contactsAdded,\n 'added_contacts_count' => count($contactsAdded),\n ]);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.48359376,"top":0.08611111,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.49375,"top":0.08611111,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"bounds":{"left":0.5066406,"top":0.08611111,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"View Parameters","depth":4,"bounds":{"left":0.5167969,"top":0.08611111,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open Query Execution Settings…","depth":4,"bounds":{"left":0.5269531,"top":0.08611111,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"In-Editor Results","depth":4,"bounds":{"left":0.53984374,"top":0.08611111,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Tx: Auto","depth":4,"bounds":{"left":0.5527344,"top":0.08611111,"width":0.028515626,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cancel Running Statements","depth":4,"bounds":{"left":0.5839844,"top":0.08611111,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Playground","depth":4,"bounds":{"left":0.596875,"top":0.08611111,"width":0.034765624,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"jiminny","depth":4,"bounds":{"left":0.9515625,"top":0.08611111,"width":0.033203125,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.049609374,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"26","depth":4,"bounds":{"left":0.9015625,"top":0.10763889,"width":0.012109375,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"9","depth":4,"bounds":{"left":0.9160156,"top":0.10763889,"width":0.009375,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"22","depth":4,"bounds":{"left":0.9277344,"top":0.10763889,"width":0.01171875,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"3","depth":4,"bounds":{"left":0.9417969,"top":0.10763889,"width":0.009375,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"103","depth":4,"bounds":{"left":0.95351565,"top":0.10763889,"width":0.0140625,"height":0.013194445},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.96953124,"top":0.10625,"width":0.00859375,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.978125,"top":0.10625,"width":0.008203125,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
5675544803509266871
|
-8178087410993360602
|
app_switch
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AutomatedReportsCommandTest
Run 'AutomatedReportsCommandTest'
Debug 'AutomatedReportsCommandTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Show Replace Field
Search History
"podcast_audio_url"
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
0 results
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Code changed:
Hide
Sync Changes
Hide This Notification
32
2
19
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot\ServiceTraits;
use Carbon\Carbon;
use HubSpot\Client\Crm\Deals\Model\CollectionResponseAssociatedId;
use Jiminny\Exceptions\InvalidArgumentException;
use Jiminny\Models\Account;
use Exception;
use Jiminny\Component\DealInsights\Forecast\Forecast;
use Jiminny\Jobs\Crm\MatchActivitiesToNewOpportunity;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\BusinessProcess;
use Jiminny\Exceptions\CrmException;
use Jiminny\Models\Opportunity;
use Illuminate\Support\Collection;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\CrmEntityRepository;
use Jiminny\Services\Crm\Hubspot\DealFieldsService;
use Jiminny\Services\Crm\Hubspot\OpportunitySyncStrategy\HubspotSingleSyncStrategy;
use Jiminny\Services\Crm\Hubspot\WebhookSyncBatchProcessor;
use Jiminny\Services\Crm\OpportunitySyncStrategyResolver;
use Jiminny\Utils\CurrencyFormatter;
/**
* Optimized sync methods for better performance
* These methods can be integrated into SyncCrmEntitiesTrait for significant performance gains
*/
trait OpportunitySyncTrait
{
private const int BATCH_SIZE = 100;
private const int BATCH_PROCESS_SIZE = 800;
protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;
protected CrmEntityRepository $crmEntityRepository;
protected DealFieldsService $dealFieldsService;
private ?array $cachedClosedDealStages = null;
private array $cachedBusinessProcesses = [];
private array $cachedStages = [];
public function syncOpportunities(array $parameters, ?string $strategy = null): int
{
$strategies = $this->opportunitySyncStrategyResolver->getStrategies($this->config, $strategy);
$parameters['config'] = $this->config;
$syncCount = 0;
$reportedTotal = 0;
$lastSyncedId = [];
try {
foreach ($strategies as $strategyName => $syncStrategy) {
$this->logger->info(
'[' . $this->getDisplayName() . '] Syncing opportunities using strategy: ' .
$strategyName
);
$total = 0;
$lastId = null;
$buffer = [];
// HubspotWebhookBatchSyncStrategy returns empty generator, this is for other strategies
foreach ($syncStrategy->fetchOpportunities($parameters, $total, $lastId) as $hsOpportunity) {
$buffer[] = $hsOpportunity;
// process every 800 rows (fits < 1 000 association limit)
if (\count($buffer) >= self::BATCH_PROCESS_SIZE) {
$syncCount += $this->processOpportunityBatch($buffer);
$buffer = [];
}
}
// leftovers
if ($buffer) {
$syncCount += $this->processOpportunityBatch($buffer);
}
$reportedTotal += $total;
$lastSyncedId = $lastId;
}
} catch (\HubSpot\Client\Crm\Deals\ApiException | CrmException $e) {
$this->handleSyncException($e, $parameters);
}
$this->logger->info(
'[HubSpot] Synced opportunities',
[
'team' => $this->team->getId(),
'sync_count' => $syncCount,
'total' => $reportedTotal,
'last_synced_id' => $lastSyncedId,
]
);
return $reportedTotal;
}
private function handleSyncException(\Throwable $e, array $parameters): void
{
if (($parameters['since'] ?? null) instanceof Carbon) {
$parameters['since'] = $parameters['since']->toDateTimeString();
}
$parameters['config'] = $this->config->getId();
$this->logger->warning('[' . $this->getDisplayName() . '] Sync opportunities failed', [
'teamId' => $this->team->getUuid(),
'parameters' => $parameters,
'reason' => $e->getMessage(),
]);
}
/**
* @inheritdoc
*/
public function syncOpportunity(string $crmId): ?Opportunity
{
$strategy = $this->opportunitySyncStrategyResolver->resolve(
$this->config,
OpportunitySyncStrategyResolver::SINGLE_SYNC_OPPORTUNITY_STRATEGY,
);
$parameters = [
'config' => $this->config,
'crm_id' => $crmId,
];
try {
if (! $strategy instanceof HubspotSingleSyncStrategy) {
throw new InvalidArgumentException('Strategy must by HubspotSingleSyncStrategy');
}
$hsOpportunity = $strategy->fetchOpportunity($parameters);
} catch (\HubSpot\Client\Crm\Deals\ApiException $e) {
$this->logger->info('[' . $this->getDisplayName() . '] Opportunity not found', [
'teamId' => $this->team->getUuid(),
'crmId' => $crmId,
'reason' => $e->getMessage(),
]);
return null;
}
$hsOpportunity['associations'] = $this->convertDealAssociations($hsOpportunity['associations'] ?? []);
return $this->importOrUpdateOpportunity($hsOpportunity);
}
/**
* Process webhook-collected opportunity batches.
*
* Drains Redis sets containing company CRM IDs collected from webhook events
* and dispatches ImportOpportunityBatch jobs for batch processing.
*
* @return int Number of opportunity IDs dispatched to jobs
*/
public function batchSyncOpportunities(): int
{
$configId = $this->team->getCrmConfiguration()->getId();
return $this->batchProcessor->processBatchesForObjectType(
WebhookSyncBatchProcessor::OBJECT_TYPE_DEAL,
$configId
);
}
/**
* Import a batch of opportunities by their CRM IDs.
* Fetches opportunity data from HubSpot API and delegates to importOpportunityBatch().
*
* @param array<string> $crmIds HubSpot deal CRM IDs
*
* @return array{success: array, failed_ids: array, errors?: array<string, string>}
*/
public function importOpportunityBatchByIds(array $crmIds): array
{
$fields = $this->dealFieldsService->getFieldsForConfiguration($this->config);
$allDeals = [];
foreach (array_chunk($crmIds, self::BATCH_SIZE) as $chunk) {
$deals = $this->client->getOpportunitiesByIds($chunk, $fields);
foreach ($deals as $deal) {
$allDeals[] = $deal;
}
}
// IDs not returned by HubSpot are likely deleted or inaccessible deals.
// These are not failures — retrying won't bring them back.
$fetchedIds = array_map('strval', array_column($allDeals, 'id'));
$notFoundIds = array_values(array_diff(array_map('strval', $crmIds), $fetchedIds));
if (! empty($notFoundIds)) {
$this->logger->info('[' . $this->getDisplayName() . '] CRM IDs not found in HubSpot (likely deleted)', [
'teamId' => $this->team->getId(),
'notFoundCount' => \count($notFoundIds),
'notFoundIds' => $notFoundIds,
'requestedCount' => \count($crmIds),
'fetchedCount' => \count($allDeals),
]);
}
if (empty($allDeals)) {
return ['success' => [], 'failed_ids' => []];
}
return $this->importOpportunityBatch($allDeals);
}
private function getClosedDealStages(): array
{
if ($this->cachedClosedDealStages !== null) {
return $this->cachedClosedDealStages;
}
$stages = $this->crmEntityRepository->getOpportunityClosedStages($this->config);
$data = [
'lost' => [],
'won' => [],
];
foreach ($stages as $stage) {
if ($stage->probability == 0.00) {
$data['lost'][] = $stage->crm_provider_id;
}
if ($stage->probability == 100.00) {
$data['won'][] = $stage->crm_provider_id;
}
}
$this->cachedClosedDealStages = $data;
return $data;
}
/**
* Import deals into the database with pre-fetched associations.
*
* API calls here (getAssociationsData, getExistingOpportunityCrmIds) are NOT
* caught — if they throw, the exception propagates to ImportOpportunityBatch::handle()
* where Laravel retries the whole job with backoff. After all retries exhausted,
* failed() requeues all IDs to Redis.
*
* The per-deal loop catches exceptions individually. A deal can end up in three states:
* - success: imported/updated successfully
* - failed_ids: exception thrown (DB constraint violation, corrupt data, etc.)
* These are permanent issues — retrying won't fix them.
* - skipped (null): missing dependencies (no account, unknown pipeline/stage).
* This is acceptable — the deal cannot be imported until those exist.
*/
private function importOpportunityBatch(array $deals): array
{
$syncedOpportunities = [
'success' => [],
'failed_ids' => [],
];
$dealIds = array_column($deals, 'id');
// Shared association/existing-ID preparation is batch-level state. If it fails, rethrow so the
// queue job retries the whole batch and eventually requeues all deal IDs back to Redis.
try {
$companyAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'companies');
$contactAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'contacts');
$associationsData = $this->prepareAssociatedEntities($companyAssociations, $contactAssociations);
$existingCrmIds = $this->crmEntityRepository->getExistingOpportunityCrmIds(
$this->config,
array_map('strval', $dealIds)
);
$existingCrmIdSet = array_flip($existingCrmIds);
} catch (\Throwable $e) {
$this->logger->error('[' . $this->getDisplayName() . '] Failed to fetch associations or existing IDs', [
'teamId' => $this->team->getId(),
'dealCount' => count($dealIds),
'error' => $e->getMessage(),
]);
throw $e;
}
foreach ($deals as $deal) {
try {
$deal['associations'] = $this->prepareAssociationsForOpportunity(
$deal['id'],
$companyAssociations,
$contactAssociations,
$associationsData
);
$syncedOpportunity = $this->importOrUpdateOpportunity(
$deal,
isset($existingCrmIdSet[(string) $deal['id']])
);
if ($syncedOpportunity) {
$syncedOpportunities['success'][] = $syncedOpportunity;
}
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to import opportunity', [
'teamId' => $this->team->getId(),
'crmId' => $deal['id'],
'error' => $e->getMessage(),
]);
$syncedOpportunities['failed_ids'][] = $deal['id'];
$syncedOpportunities['errors'][$deal['id']] = $e->getMessage();
}
}
return $syncedOpportunities;
}
/**
* Prepare associated entities for opportunities with optimized batch processing
* Returns structured data with CRM ID to DB ID mappings for each opportunity
*/
private function prepareAssociatedEntities(array $companyAssociations, array $contactAssociations): array
{
// Step 1: Collect all unique company and contact IDs from associations
$allCompanyIds = $this->flattenAssociationIds($companyAssociations);
$allContactIds = $this->flattenAssociationIds($contactAssociations);
// Step 2: Batch sync missing entities and get CRM ID to DB ID mappings
$companyIdMappings = [];
$contactIdMappings = [];
if (! empty($allCompanyIds)) {
$companyIdMappings = $this->prepareAssociatedAccounts($allCompanyIds);
}
if (! empty($allContactIds)) {
$contactIdMappings = $this->prepareAssociatedContacts($allContactIds);
}
return [
'company_id_mappings' => $companyIdMappings,
'contact_id_mappings' => $contactIdMappings,
];
}
/**
* Flatten association data to get unique IDs
*/
private function flattenAssociationIds(array $associations): array
{
$ids = [];
foreach ($associations as $dealAssociations) {
if (is_array($dealAssociations)) {
foreach ($dealAssociations as $id) {
$ids[$id] = true;
}
}
}
return array_keys($ids);
}
/**
* Batch sync missing accounts
*/
private function prepareAssociatedAccounts(array $companyIds): array
{
// Find which accounts already exist
$existingAccounts = $this->crmEntityRepository
->findAccountsByExternalIds($this->config, $companyIds);
$existingCompanyIds = $existingAccounts->pluck('crm_provider_id')->toArray();
$existingAccountsData = $existingAccounts->mapWithKeys(function ($account) {
return [$account->getCrmProviderId() => $account->getId()];
})->toArray();
$missingCompanyIds = array_diff($companyIds, $existingCompanyIds);
if (empty($missingCompanyIds)) {
return $existingAccountsData;
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing accounts', [
'teamId' => $this->team->getUuid(),
'total_companies' => count($companyIds),
'existing_companies' => count($existingCompanyIds),
'missing_companies' => count($missingCompanyIds),
]);
// we already have limit on opportunity ids count
// Initialize variable before try block
$syncedAccountsData = [];
try {
$syncedAccountsData = $this->batchSyncCrmObjects('companies', $missingCompanyIds);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing accounts', [
'size' => count($missingCompanyIds),
'error' => $e->getMessage(),
]);
$syncedAccountsData = [];
}
return $existingAccountsData + $syncedAccountsData;
}
/**
* Prepare associated contacts - find existing and sync missing ones
* Returns mapping of CRM ID to DB ID
*/
private function prepareAssociatedContacts(array $contactIds): array
{
// Find which contacts already exist
$existingContacts = $this->crmEntityRepository
->findContactsByExternalIds($this->config, $contactIds);
$existingContactIds = $existingContacts->pluck('crm_provider_id')->toArray();
// Create mapping for existing contacts
$existingContactsData = $existingContacts->mapWithKeys(function ($contact) {
return [$contact->getCrmProviderId() => $contact->getId()];
})->toArray();
$missingContactIds = array_diff($contactIds, $existingContactIds);
if (empty($missingContactIds)) {
return $existingContactsData;
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing contacts', [
'teamId' => $this->team->getUuid(),
'total_contacts' => count($contactIds),
'existing_contacts' => count($existingContactIds),
'missing_contacts' => count($missingContactIds),
]);
// Sync missing contacts using batch API
try {
$syncedContactsData = $this->batchSyncCrmObjects('contacts', $missingContactIds);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing contacts', [
'size' => count($missingContactIds),
'error' => $e->getMessage(),
]);
$syncedContactsData = [];
}
return $existingContactsData + $syncedContactsData;
}
private function batchSyncCrmObjects(string $objectType, array $crmIds): array
{
$syncObjects = [];
$crmObjectIds = array_values($crmIds);
foreach (array_chunk($crmObjectIds, self::BATCH_SIZE) as $chunk) {
try {
$objects = $objectType === 'companies' ?
$this->client->getCompaniesByIds($chunk, $this->getCompanyFields()) :
$this->client->getContactsByIds($chunk, $this->getContactFields());
foreach ($objects as $objectId => $objectData) {
$this->importCrmObject($objectType, (string) $objectId, $objectData, $syncObjects);
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch synced ' . $objectType, [
'requested_count' => count($chunk),
'synced_count' => count($objects),
]);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Batch ' . $objectType . ' sync failed', [
'ids' => $chunk,
'error' => $e->getMessage(),
]);
}
}
return $syncObjects;
}
private function importCrmObject(string $objectType, string $objectId, mixed $objectData, array &$syncObjects): void
{
try {
$object = $objectType === 'companies' ?
$this->importAccount($objectData) :
$this->importContact($objectData);
if ($object) {
$syncObjects[$object->getCrmProviderId()] = $object->getId();
}
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to import batch ' . $objectType, [
'id' => $objectId,
'error' => $e->getMessage(),
]);
}
}
/**
* Prepare associations for a single opportunity
*
* The return value is an array with the following structure:
* [
* 'companies' => [
* $companyCrmId => $companyId,
* ...
* ],
* 'contacts' => [
* $contactCrmId => $contactId,
* ...
* ],
* 'account_id' => $accountId,
* ]
*/
private function prepareAssociationsForOpportunity(
string $oppCrmId,
array $companyAssociations,
array $contactAssociations,
array $associationsData
): array {
$associations = [
'companies' => [],
'contacts' => [],
'account_id' => null, // Primary account for opportunity
];
$oppCompanyIds = $companyAssociations[$oppCrmId] ?? [];
foreach ($oppCompanyIds as $companyCrmId) {
if (isset($associationsData['company_id_mappings'][$companyCrmId])) {
$associations['companies'][$companyCrmId] = $associationsData['company_id_mappings'][$companyCrmId];
// Set primary account (first company becomes primary account)
if ($associations['account_id'] === null) {
$associations['account_id'] = $associationsData['company_id_mappings'][$companyCrmId];
}
}
}
$oppContactIds = $contactAssociations[$oppCrmId] ?? [];
foreach ($oppContactIds as $contactCrmId) {
if (isset($associationsData['contact_id_mappings'][$contactCrmId])) {
$associations['contacts'][$contactCrmId] = $associationsData['contact_id_mappings'][$contactCrmId];
}
}
return $associations;
}
/**
* Update only associations for an opportunity
*/
private function updateOpportunityAssociations(Opportunity $opportunity, array $associations): void
{
// Update contact associations
$this->importOpportunityContacts($opportunity, $associations['contacts']);
// Update company (account) associations
$this->updateOpportunityAccount($opportunity, $associations['account_id']);
}
/**
* Remove all contact associations from an opportunity
*/
private function removeAllOpportunityContacts(Opportunity $opportunity): void
{
$currentCount = (int) $opportunity->contacts()->count();
if ($currentCount > 0) {
$opportunity->contacts()->detach();
$this->logger->info('[' . $this->getDisplayName() . '] Removed all contact associations', [
'opportunity_id' => $opportunity->getId(),
'removed_count' => $currentCount,
]);
}
}
private function updateOpportunityAccount(Opportunity $opportunity, ?int $accountId): void
{
if ($accountId === null) {
// No account ID provided - keep current account
return;
}
$currentAccountId = $opportunity->getAccountId();
// Only update if account has changed
if ($currentAccountId !== $accountId) {
$opportunity->account_id = $accountId;
$opportunity->save();
$this->logger->info('[' . $this->getDisplayName() . '] Updated opportunity account association', [
'opportunity_id' => $opportunity->getId(),
'old_account_id' => $currentAccountId,
'new_account_id' => $accountId,
]);
}
}
/**
* Find existing opportunities by external IDs (OPTIMIZED VERSION)
* Uses batch query for better performance
*/
private function findExistingOpportunities(array $crmIds): Collection
{
return $this->crmEntityRepository
->findOpportunitiesByExternalIds($this->config, $crmIds);
}
private function processOpportunityBatch(array $opportunities): int
{
$syncedOpportunities = $this->importOpportunityBatch($opportunities);
return count($syncedOpportunities['success'] ?? []);
}
/**
* Convert single deal associations from HubSpot format to internal format
* Handles both HubSpot SDK objects and array formats
*
* @param array $opportunityAssociations Raw associations from HubSpot API or pre-processed
*
* @return array Processed associations with DB IDs
*/
private function convertDealAssociations(array $opportunityAssociations): array
{
$associations = $this->initializeAssociationsStructure();
if (empty($opportunityAssociations)) {
return $associations;
}
$associationIds = $this->extractAssociationIds($opportunityAssociations);
$this->processCompanyAssociations($associationIds, $associations);
$this->processContactAssociations($associationIds, $associations);
return $associations;
}
private function initializeAssociationsStructure(): array
{
return [
'companies' => [],
'contacts' => [],
'account_id' => null, // Primary account for opportunity
];
}
private function extractAssociationIds(array $opportunityAssociations): array
{
$associationIds = [];
foreach ($opportunityAssociations as $type => $associationData) {
if (! empty($associationData)) {
$associationIds[$type] = $this->convertSingleDealAssociations($associationData);
}
}
return $associationIds;
}
private function processCompanyAssociations(array $associationIds, array &$associations): void
{
if (empty($associationIds['companies'])) {
return;
}
$companyId = $associationIds['companies'][0];
$account = $this->findOrSyncAccount($companyId);
if ($account instanceof Account) {
$associations['companies'][$companyId] = $account->getId();
$associations['account_id'] = $account->getId();
}
}
private function processContactAssociations(array $associationIds, array &$associations): void
{
if (empty($associationIds['contacts'])) {
return;
}
foreach ($associationIds['contacts'] as $contactId) {
$contact = $this->findOrSyncContact($contactId);
if ($contact instanceof Contact) {
$associations['contacts'][$contactId] = $contact->getId();
}
}
}
private function findOrSyncAccount(string $companyId): ?Account
{
$account = $this->crmEntityRepository->findAccountByExternalId($this->config, $companyId);
if (! $account instanceof Account) {
$account = $this->syncAccount($companyId);
}
return $account;
}
private function findOrSyncContact(string $contactId): ?Contact
{
$contact = $this->crmEntityRepository->findContactByExternalId($this->config, $contactId);
if (! $contact instanceof Contact) {
$contact = $this->syncContact($contactId);
}
return $contact;
}
private function convertSingleDealAssociations($opportunityAssociations = null): array
{
$associationData = [];
if ($opportunityAssociations === null) {
return $associationData;
}
// Handle array input (from extractAssociationIds)
if (is_array($opportunityAssociations)) {
return $opportunityAssociations;
}
// Handle CollectionResponseAssociatedId object
if ($opportunityAssociations instanceof CollectionResponseAssociatedId) {
foreach ($opportunityAssociations->getResults() as $association) {
$associationData[] = $association->getId();
}
}
return $associationData;
}
private function importOrUpdateOpportunity($crmData, ?bool $exists = null): ?Opportunity
{
if (empty($crmData['properties'])) {
return null;
}
$crmId = (string) $crmData['id'];
$properties = $crmData['properties'];
$associations = $crmData['associations'] ?? [];
$opportunityExists = $exists ?? (bool) $this->crmEntityRepository->findOpportunityByExternalId(
$this->config,
$crmId
);
if ($opportunityExists) {
return $this->updateOpportunity($crmId, $properties, $associations);
} else {
return $this->createOpportunity($crmId, $properties, $associations);
}
}
/**
* Create new opportunity
*/
private function createOpportunity(string $crmId, array $properties, array $associations): ?Opportunity
{
$accountId = $this->resolveAccountId($associations);
if (! $accountId) {
return null;
}
$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);
if (! $businessProcess) {
return null;
}
$stage = $this->resolveStage($businessProcess, $properties['dealstage'] ?? null);
if (! $stage) {
return null;
}
$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);
$attributes = [
'crm_configuration_id' => $this->config->getId(),
'crm_provider_id' => $crmId,
];
$values = array_merge($attributes, $data);
$opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);
$this->importExternalFieldData($properties, $opportunity->getId());
$this->importOpportunityContacts($opportunity, $associations['contacts']);
if ($opportunity->wasRecentlyCreated) {
MatchActivitiesToNewOpportunity::dispatch($opportunity->getId());
}
return $opportunity;
}
/**
* Update existing opportunity
*/
private function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity
{
$accountId = $this->resolveAccountId($associations);
$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);
$stage = $businessProcess ? $this->resolveStage($businessProcess, $properties['dealstage'] ?? null) : null;
$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);
$attributes = [
'crm_configuration_id' => $this->config->getId(),
'crm_provider_id' => $crmId,
];
$values = array_merge($attributes, $data);
$opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);
$this->importExternalFieldData($properties, $opportunity->getId());
$this->updateOpportunityAssociations($opportunity, $associations);
return $opportunity;
}
private function resolveAccountId(array $associations): ?int
{
if (! empty($associations['accountId'])) {
return $associations['accountId'];
}
if (empty($associations)) {
return null;
}
// we can't resolve multiple account ids (currently SDK returns one company)
foreach ($associations['companies'] as $accountId) {
return $accountId;
}
return null;
}
private function buildOpportunityData(
array $properties,
?int $accountId,
?BusinessProcess $businessProcess,
?Stage $stage
): array {
$ownerId = null;
$profile = null;
if (! empty($properties['hubspot_owner_id'])) {
$ownerId = $properties['hubspot_owner_id'];
$profile = $this->crmEntityRepository->findProfileByExternalId($this->config, (string) $ownerId);
}
$name = 'Unknown';
if (isset($properties['dealname'])) {
$name = mb_strimwidth($properties['dealname'], 0, 128);
}
$amount = $this->resolveAmount($properties);
$currency = $properties['deal_currency_code'] ?? null;
$closeDate = null;
if (! empty($properties['closedate'])) {
$closeDate = Carbon::parse($properties['closedate'])->format('Y-m-d');
}
$remotelyCreatedAt = null;
if (! empty($properties['createdate']) && strtotime($properties['createdate'])) {
$date = $this->parseCleanDatetime($properties['createdate']);
$remotelyCreatedAt = $date?->format('Y-m-d H:i:s');
}
$closedStages = $this->getClosedDealStages();
$isWon = in_array($properties['dealstage'], $closedStages['won']);
$isLost = in_array($properties['dealstage'], $closedStages['lost']);
$data = [
'team_id' => $this->team->getId(),
'user_id' => $profile ? $profile->user_id : null,
'owner_id' => $ownerId,
'name' => $name,
'value' => ! empty($amount) ? $amount : null,
'currency_code' => CurrencyFormatter::formatCode($currency),
'close_date' => $closeDate,
'is_closed' => $isWon || $isLost,
'is_won' => $isWon,
'remotely_created_at' => $remotelyCreatedAt,
'probability' => $this->resolveDealProbability($properties['hs_deal_stage_probability']),
'forecast_category' => $this->resolveForecastCategory($properties['hs_manual_forecast_category']),
];
if ($accountId) {
$data['account_id'] = $accountId;
}
if ($stage) {
$data['stage_id'] = $stage->id;
}
if ($businessProcess) {
$recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);
if ($recordType) {
$data['record_type_id'] = $recordType->id;
}
}
return $data;
}
private function resolveBusinessProcess(?string $pipelineId): ?BusinessProcess
{
if ($pipelineId === null) {
return null;
}
if (isset($this->cachedBusinessProcesses[$pipelineId])) {
return $this->cachedBusinessProcesses[$pipelineId];
}
$businessProcess = $this->getBusinessProcess($pipelineId);
if (! $businessProcess instanceof BusinessProcess) {
$this->importStages();
$businessProcess = $this->getBusinessProcess($pipelineId);
}
if (! $businessProcess instanceof BusinessProcess) {
$this->logger->info(
'[HubSpot] Deal is not attached to a pipeline',
[
'pipeline' => $pipelineId]
);
}
$this->cachedBusinessProcesses[$pipelineId] = $businessProcess;
return $businessProcess;
}
private function getBusinessProcess(string $pipelineId): ?BusinessProcess
{
return $this->crmEntityRepository->findBusinessProcessesByExternalId($this->config, $pipelineId);
}
private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage
{
if (empty($stageId)) {
return null;
}
$cacheKey = $businessProcess->getId() . ':' . $stageId;
if (isset($this->cachedStages[$cacheKey])) {
return $this->cachedStages[$cacheKey];
}
$stage = $this->crmEntityRepository->getPipelineStageByConditions(
$businessProcess,
[
'crm_provider_id' => $stageId,
'type' => Stage::TYPE_OPPORTUNITY,
]
);
if ($stage === null) {
$this->importStages(null, $stageId);
}
if ($stage === null) {
$this->logger->info('[HubSpot] Stage does not exist => ' . $stageId);
}
$this->cachedStages[$cacheKey] = $stage;
return $stage;
}
private function resolveAmount(array $properties): ?string
{
$amount = null;
if (! empty($properties['amount'])) {
$amount = str_replace(',', '', $properties['amount']);
}
if ($this->config->hasDefaultCurrencyFieldSet()) {
$valueFieldName = $this->config->getDefaultCurrencyField()->getCrmProviderId();
$amount = $properties[$valueFieldName] ?? $amount;
}
return $amount;
}
private function parseCleanDatetime(string $datetime): ?Carbon
{
// Treat pre-1980 values as invalid
$minValidDate = Carbon::parse('1980-01-01 00:00:00');
try {
$date = Carbon::parse($datetime);
if ($minValidDate->gt($date)) {
return null;
}
return $date;
} catch (Exception) {
return null; // On parse error, treat as null
}
}
private function resolveDealProbability(?string $stageProbability): int
{
if ($stageProbability === null) {
return 0;
}
$probability = (float) $stageProbability;
return $probability > 1 ? 0 : (int) ($probability * 100);
}
private function resolveForecastCategory(?string $forecastCategory): string
{
if (! $forecastCategory) {
return Forecast::FORECAST_CATEGORY_UNCATEGORIZED;
}
$forecastCategory = str_replace('_', ' ', $forecastCategory);
return ucwords(strtolower($forecastCategory));
}
private function importExternalFieldData(array $properties, int $opportunityId): void
{
$crmFields = $this->getOpportunitySyncableFields();
$this->importOpportunityCrmFieldData($properties, $crmFields, $opportunityId);
}
private function importOpportunityContacts(Opportunity $opportunity, array $associations): void
{
// Handle empty or missing contact associations
if (empty($associations)) {
// Remove all existing contact associations if none provided
$this->removeAllOpportunityContacts($opportunity);
return;
}
// Use differential sync approach for better performance and accuracy
$this->syncOpportunityContactsDifferential($opportunity, $associations);
}
/**
* Sync opportunity contacts using differential approach
* This compares current vs new associations and only makes necessary changes
*/
private function syncOpportunityContactsDifferential(Opportunity $opportunity, array $contactAssociations): void
{
$currentContactCrmIds = $this->getCurrentContactCrmIds($opportunity);
$contactAssociationIds = array_keys($contactAssociations);
$contactsToAdd = array_diff($contactAssociationIds, $currentContactCrmIds);
$contactsToRemove = array_diff($currentContactCrmIds, $contactAssociationIds);
if (empty($contactsToAdd) && empty($contactsToRemove)) {
return;
}
$this->logContactAssociationChanges($opportunity, $currentContactCrmIds, $contactAssociations, $contactsToAdd, $contactsToRemove);
$this->removeContactAssociations($opportunity, $contactsToRemove);
$this->addContactAssociations($opportunity, $contactsToAdd, $contactAssociations);
}
private function getCurrentContactCrmIds(Opportunity $opportunity): array
{
return $opportunity->contacts()
->pluck('contacts.crm_provider_id')
->toArray();
}
private function logContactAssociationChanges(
Opportunity $opportunity,
array $currentContactCrmIds,
array $contactAssociations,
array $contactsToAdd,
array $contactsToRemove
): void {
$this->logger->info('[' . $this->getDisplayName() . '] Contact association changes', [
'opportunity_id' => $opportunity->getId(),
'current_contacts' => $currentContactCrmIds,
'new_contacts' => $contactAssociations,
'contacts_to_add' => $contactsToAdd,
'contacts_to_remove' => $contactsToRemove,
]);
}
private function removeContactAssociations(Opportunity $opportunity, array $contactsToRemove): void
{
if (empty($contactsToRemove)) {
return;
}
$contactsToDetach = $opportunity->contacts()
->whereIn('contacts.crm_provider_id', $contactsToRemove)
->pluck('contacts.id')
->toArray();
if (! empty($contactsToDetach)) {
$opportunity->contacts()->detach($contactsToDetach);
$this->logger->info('[' . $this->getDisplayName() . '] Removed contact associations', [
'opportunity_id' => $opportunity->getId(),
'removed_contact_crm_ids' => $contactsToRemove,
'removed_contact_count' => count($contactsToDetach),
]);
}
}
private function addContactAssociations(Opportunity $opportunity, array $contactsToAdd, array $contactAssociations): void
{
if (empty($contactsToAdd)) {
return;
}
$contactsAdded = [];
foreach ($contactsToAdd as $crmId) {
$id = $contactAssociations[$crmId];
if ($this->attachSingleContact($opportunity, (string) $crmId, $id)) {
$contactsAdded[] = $crmId;
}
}
$this->logAddedContacts($opportunity, $contactsAdded);
}
private function attachSingleContact(Opportunity $opportunity, string $crmId, int $id): bool
{
try {
$contact = $this->crmEntityRepository->findContactByConfigurationAndId($this->config, $id);
if (! $contact) {
return false;
}
return $this->performContactAttachment($opportunity, $contact, $crmId);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to add contact association', [
'opportunity_id' => $opportunity->getId(),
'contact_crm_id' => $crmId,
'error' => $e->getMessage(),
]);
return false;
}
}
private function performContactAttachment(Opportunity $opportunity, Contact $contact, string $crmId): bool
{
try {
$opportunity->contacts()->attach($contact->getId(), [
'crm_provider_id' => $crmId,
]);
return true;
} catch (\Illuminate\Database\QueryException $e) {
if (str_contains($e->getMessage(), 'Duplicate entry')) {
$this->logger->info('[' . $this->getDisplayName() . '] Contact association already exists', [
'contact_id' => $contact->getId(),
'contact_crm_id' => $crmId,
'opportunity_id' => $opportunity->getId(),
]);
return false;
}
throw $e;
}
}
private function logAddedContacts(Opportunity $opportunity, array $contactsAdded): void
{
if (! empty($contactsAdded)) {
$this->logger->info('[' . $this->getDisplayName() . '] Added contact associations', [
'opportunity_id' => $opportunity->getId(),
'contacts_to_add_count' => count($contactsAdded),
'added_contact_crm_ids' => $contactsAdded,
'added_contacts_count' => count($contactsAdded),
]);
}
}
}
Execute
Explain Plan
Browse Query History
View Parameters
Open Query Execution Settings…
In-Editor Results
Tx: Auto
Cancel Running Statements
Playground
jiminny
Code changed:
Hide
Sync Changes
Hide This Notification
26
9
22
3
103
Previous Highlighted Error
Next Highlighted Error...
|
NULL
|
|
43285
|
921
|
47
|
2026-04-17T08:00:28.379237+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776412828379_m2.jpg...
|
PhpStorm
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
1TUnAJoado 00 08AaTunauote 0ee1TUnqJoado 00 0AaTun 1TUnAJoado 00 08AaTunauote 0ee1TUnqJoado 00 0AaTuniuode mee1TUnqJoado 00 S6-runooALTUIODNOлadл2pauantianauar -ornrnoafoud tawsesAoeaun sane ma penmeoear saeseoanAeuun sanes ni pe1501 pasoeUOM pasOlaOanoH09H elauarsletosewMauad 0t algelteny1502 pasoladn nas noafouduoM pasolasletogedse ssoulsiltKaTlrqegod coA ASOLZ:00:LL Idy LL|J •8C4 %00Lnal SMol 771s01 pasoneUOM pAsonasletogewesмauad 01 оlдelтелyA501 pasoladn nes 1oapouuoM pasolaan-ts sopunsletouawe9TS967SLTT L9S9T99489901 295898789SS L95SYCO0--00Cь -908-2465-2097-09641C40 109ST.0809-X8-1105-2000- 260216 29T9LT9SZLT L9SSLT9SZLT L9SELT9SZLT L9STLS9L70T L9SZLT9SZLT L9STLT9SZLT L9SOLT9SZLT L9Sconnaconalvoc21Z10677 L98palopayosonaenaesane comi8+0-PÇ08-5887-1L0ITE6Sb6976976976976976S76976976976Sb6976976976Sb6976976SZ65701 Clpan NTOл'**esIIewа"py aldeyaos es→ pummommame mno'*"es"tewa'nA punoloeidл OnH *xIaoral alosuosrБорелелеаадотI=E6STIIIZ6ST =T6STO6ST68ST88STL8STORCTAIS8ST78ST28STZ8STVELX ZTZEEcuc"allonuonstocaruulwicystdydsepiingeas0800 %pe7e e ega6-00a-0a9 120e708 19193S86006PS0500-2206-822-296S-TETLSJTS L989T04967009000-9442-447-908 -900694499ĐĐ221815961-TV6-Q92-039)-B560 TTĐT•8L00-0024-664-4247-0700-8707472007274X60441640-4448-4979-9029-7699449 697940.676829582J2- p9ee-A811-T901 M010065T 25291esuos fISPpytqpaZLaelz-9esteeGSS9T6799Tsu csss7 aosuos 26320 €eaddens tomn tn pe tnnapaandano g[naliaF(suo,aenoooses .famere.e.fpenetoesttenseddesepdes-stussF(OpIaale-Aamunauogdoe1fam a%eme.freaalanneesasesed.ss-stttsST87T8£T8ZT8TT8AT.OKARIAIANION TEIHLEYOOHCEM AIN"OTINNC <-OT HOTO NO.Ad15el5sunsal ai"un oipne iseopod•uc'asiwacyoeqlenstoca oarewornyalexe Nwl•u sastasltl•Ud"IoR dudlAies YOOHE-M ToNeC NITW1 1oajoladjaнмopuiмS00lnuulul-ise-sho0o.-ooewo.ne-o068 uo ro8lljanesenepogAebinenMAIA4P3wionstet...
|
NULL
|
2481057895470113109
|
NULL
|
app_switch
|
ocr
|
NULL
|
1TUnAJoado 00 08AaTunauote 0ee1TUnqJoado 00 0AaTun 1TUnAJoado 00 08AaTunauote 0ee1TUnqJoado 00 0AaTuniuode mee1TUnqJoado 00 S6-runooALTUIODNOлadл2pauantianauar -ornrnoafoud tawsesAoeaun sane ma penmeoear saeseoanAeuun sanes ni pe1501 pasoeUOM pasOlaOanoH09H elauarsletosewMauad 0t algelteny1502 pasoladn nas noafouduoM pasolasletogedse ssoulsiltKaTlrqegod coA ASOLZ:00:LL Idy LL|J •8C4 %00Lnal SMol 771s01 pasoneUOM pAsonasletogewesмauad 01 оlдelтелyA501 pasoladn nes 1oapouuoM pasolaan-ts sopunsletouawe9TS967SLTT L9S9T99489901 295898789SS L95SYCO0--00Cь -908-2465-2097-09641C40 109ST.0809-X8-1105-2000- 260216 29T9LT9SZLT L9SSLT9SZLT L9SELT9SZLT L9STLS9L70T L9SZLT9SZLT L9STLT9SZLT L9SOLT9SZLT L9Sconnaconalvoc21Z10677 L98palopayosonaenaesane comi8+0-PÇ08-5887-1L0ITE6Sb6976976976976976S76976976976Sb6976976976Sb6976976SZ65701 Clpan NTOл'**esIIewа"py aldeyaos es→ pummommame mno'*"es"tewa'nA punoloeidл OnH *xIaoral alosuosrБорелелеаадотI=E6STIIIZ6ST =T6STO6ST68ST88STL8STORCTAIS8ST78ST28STZ8STVELX ZTZEEcuc"allonuonstocaruulwicystdydsepiingeas0800 %pe7e e ega6-00a-0a9 120e708 19193S86006PS0500-2206-822-296S-TETLSJTS L989T04967009000-9442-447-908 -900694499ĐĐ221815961-TV6-Q92-039)-B560 TTĐT•8L00-0024-664-4247-0700-8707472007274X60441640-4448-4979-9029-7699449 697940.676829582J2- p9ee-A811-T901 M010065T 25291esuos fISPpytqpaZLaelz-9esteeGSS9T6799Tsu csss7 aosuos 26320 €eaddens tomn tn pe tnnapaandano g[naliaF(suo,aenoooses .famere.e.fpenetoesttenseddesepdes-stussF(OpIaale-Aamunauogdoe1fam a%eme.freaalanneesasesed.ss-stttsST87T8£T8ZT8TT8AT.OKARIAIANION TEIHLEYOOHCEM AIN"OTINNC <-OT HOTO NO.Ad15el5sunsal ai"un oipne iseopod•uc'asiwacyoeqlenstoca oarewornyalexe Nwl•u sastasltl•Ud"IoR dudlAies YOOHE-M ToNeC NITW1 1oajoladjaнмopuiмS00lnuulul-ise-sho0o.-ooewo.ne-o068 uo ro8lljanesenepogAebinenMAIA4P3wionstet...
|
NULL
|
|
43324
|
922
|
13
|
2026-04-17T08:03:18.934240+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776412998934_m1.jpg...
|
PhpStorm
|
faVsco.js – OpportunitySyncTrait.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AutomatedReportsCommandTest
Run 'AutomatedReportsCommandTest'
Debug 'AutomatedReportsCommandTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Show Replace Field
Search History
"podcast_audio_url"
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
0 results
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Code changed:
Hide
Sync Changes
Hide This Notification
32
2
19
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot\ServiceTraits;
use Carbon\Carbon;
use HubSpot\Client\Crm\Deals\Model\CollectionResponseAssociatedId;
use Jiminny\Exceptions\InvalidArgumentException;
use Jiminny\Models\Account;
use Exception;
use Jiminny\Component\DealInsights\Forecast\Forecast;
use Jiminny\Jobs\Crm\MatchActivitiesToNewOpportunity;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\BusinessProcess;
use Jiminny\Exceptions\CrmException;
use Jiminny\Models\Opportunity;
use Illuminate\Support\Collection;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\CrmEntityRepository;
use Jiminny\Services\Crm\Hubspot\DealFieldsService;
use Jiminny\Services\Crm\Hubspot\OpportunitySyncStrategy\HubspotSingleSyncStrategy;
use Jiminny\Services\Crm\Hubspot\WebhookSyncBatchProcessor;
use Jiminny\Services\Crm\OpportunitySyncStrategyResolver;
use Jiminny\Utils\CurrencyFormatter;
/**
* Optimized sync methods for better performance
* These methods can be integrated into SyncCrmEntitiesTrait for significant performance gains
*/
trait OpportunitySyncTrait
{
private const int BATCH_SIZE = 100;
private const int BATCH_PROCESS_SIZE = 800;
protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;
protected CrmEntityRepository $crmEntityRepository;
protected DealFieldsService $dealFieldsService;
private ?array $cachedClosedDealStages = null;
private array $cachedBusinessProcesses = [];
private array $cachedStages = [];
public function syncOpportunities(array $parameters, ?string $strategy = null): int
{
$strategies = $this->opportunitySyncStrategyResolver->getStrategies($this->config, $strategy);
$parameters['config'] = $this->config;
$syncCount = 0;
$reportedTotal = 0;
$lastSyncedId = [];
try {
foreach ($strategies as $strategyName => $syncStrategy) {
$this->logger->info(
'[' . $this->getDisplayName() . '] Syncing opportunities using strategy: ' .
$strategyName
);
$total = 0;
$lastId = null;
$buffer = [];
// HubspotWebhookBatchSyncStrategy returns empty generator, this is for other strategies
foreach ($syncStrategy->fetchOpportunities($parameters, $total, $lastId) as $hsOpportunity) {
$buffer[] = $hsOpportunity;
// process every 800 rows (fits < 1 000 association limit)
if (\count($buffer) >= self::BATCH_PROCESS_SIZE) {
$syncCount += $this->processOpportunityBatch($buffer);
$buffer = [];
}
}
// leftovers
if ($buffer) {
$syncCount += $this->processOpportunityBatch($buffer);
}
$reportedTotal += $total;
$lastSyncedId = $lastId;
}
} catch (\HubSpot\Client\Crm\Deals\ApiException | CrmException $e) {
$this->handleSyncException($e, $parameters);
}
$this->logger->info(
'[HubSpot] Synced opportunities',
[
'team' => $this->team->getId(),
'sync_count' => $syncCount,
'total' => $reportedTotal,
'last_synced_id' => $lastSyncedId,
]
);
return $reportedTotal;
}
private function handleSyncException(\Throwable $e, array $parameters): void
{
if (($parameters['since'] ?? null) instanceof Carbon) {
$parameters['since'] = $parameters['since']->toDateTimeString();
}
$parameters['config'] = $this->config->getId();
$this->logger->warning('[' . $this->getDisplayName() . '] Sync opportunities failed', [
'teamId' => $this->team->getUuid(),
'parameters' => $parameters,
'reason' => $e->getMessage(),
]);
}
/**
* @inheritdoc
*/
public function syncOpportunity(string $crmId): ?Opportunity
{
$strategy = $this->opportunitySyncStrategyResolver->resolve(
$this->config,
OpportunitySyncStrategyResolver::SINGLE_SYNC_OPPORTUNITY_STRATEGY,
);
$parameters = [
'config' => $this->config,
'crm_id' => $crmId,
];
try {
if (! $strategy instanceof HubspotSingleSyncStrategy) {
throw new InvalidArgumentException('Strategy must by HubspotSingleSyncStrategy');
}
$hsOpportunity = $strategy->fetchOpportunity($parameters);
} catch (\HubSpot\Client\Crm\Deals\ApiException $e) {
$this->logger->info('[' . $this->getDisplayName() . '] Opportunity not found', [
'teamId' => $this->team->getUuid(),
'crmId' => $crmId,
'reason' => $e->getMessage(),
]);
return null;
}
$hsOpportunity['associations'] = $this->convertDealAssociations($hsOpportunity['associations'] ?? []);
return $this->importOrUpdateOpportunity($hsOpportunity);
}
/**
* Process webhook-collected opportunity batches.
*
* Drains Redis sets containing company CRM IDs collected from webhook events
* and dispatches ImportOpportunityBatch jobs for batch processing.
*
* @return int Number of opportunity IDs dispatched to jobs
*/
public function batchSyncOpportunities(): int
{
$configId = $this->team->getCrmConfiguration()->getId();
return $this->batchProcessor->processBatchesForObjectType(
WebhookSyncBatchProcessor::OBJECT_TYPE_DEAL,
$configId
);
}
/**
* Import a batch of opportunities by their CRM IDs.
* Fetches opportunity data from HubSpot API and delegates to importOpportunityBatch().
*
* @param array<string> $crmIds HubSpot deal CRM IDs
*
* @return array{success: array, failed_ids: array, errors?: array<string, string>}
*/
public function importOpportunityBatchByIds(array $crmIds): array
{
$fields = $this->dealFieldsService->getFieldsForConfiguration($this->config);
$allDeals = [];
foreach (array_chunk($crmIds, self::BATCH_SIZE) as $chunk) {
$deals = $this->client->getOpportunitiesByIds($chunk, $fields);
foreach ($deals as $deal) {
$allDeals[] = $deal;
}
}
// IDs not returned by HubSpot are likely deleted or inaccessible deals.
// These are not failures — retrying won't bring them back.
$fetchedIds = array_map('strval', array_column($allDeals, 'id'));
$notFoundIds = array_values(array_diff(array_map('strval', $crmIds), $fetchedIds));
if (! empty($notFoundIds)) {
$this->logger->info('[' . $this->getDisplayName() . '] CRM IDs not found in HubSpot (likely deleted)', [
'teamId' => $this->team->getId(),
'notFoundCount' => \count($notFoundIds),
'notFoundIds' => $notFoundIds,
'requestedCount' => \count($crmIds),
'fetchedCount' => \count($allDeals),
]);
}
if (empty($allDeals)) {
return ['success' => [], 'failed_ids' => []];
}
return $this->importOpportunityBatch($allDeals);
}
private function getClosedDealStages(): array
{
if ($this->cachedClosedDealStages !== null) {
return $this->cachedClosedDealStages;
}
$stages = $this->crmEntityRepository->getOpportunityClosedStages($this->config);
$data = [
'lost' => [],
'won' => [],
];
foreach ($stages as $stage) {
if ($stage->probability == 0.00) {
$data['lost'][] = $stage->crm_provider_id;
}
if ($stage->probability == 100.00) {
$data['won'][] = $stage->crm_provider_id;
}
}
$this->cachedClosedDealStages = $data;
return $data;
}
/**
* Import deals into the database with pre-fetched associations.
*
* API calls here (getAssociationsData, getExistingOpportunityCrmIds) are NOT
* caught — if they throw, the exception propagates to ImportOpportunityBatch::handle()
* where Laravel retries the whole job with backoff. After all retries exhausted,
* failed() requeues all IDs to Redis.
*
* The per-deal loop catches exceptions individually. A deal can end up in three states:
* - success: imported/updated successfully
* - failed_ids: exception thrown (DB constraint violation, corrupt data, etc.)
* These are permanent issues — retrying won't fix them.
* - skipped (null): missing dependencies (no account, unknown pipeline/stage).
* This is acceptable — the deal cannot be imported until those exist.
*/
private function importOpportunityBatch(array $deals): array
{
$syncedOpportunities = [
'success' => [],
'failed_ids' => [],
];
$dealIds = array_column($deals, 'id');
// Shared association/existing-ID preparation is batch-level state. If it fails, rethrow so the
// queue job retries the whole batch and eventually requeues all deal IDs back to Redis.
try {
$companyAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'companies');
$contactAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'contacts');
$associationsData = $this->prepareAssociatedEntities($companyAssociations, $contactAssociations);
$existingCrmIds = $this->crmEntityRepository->getExistingOpportunityCrmIds(
$this->config,
array_map('strval', $dealIds)
);
$existingCrmIdSet = array_flip($existingCrmIds);
} catch (\Throwable $e) {
$this->logger->error('[' . $this->getDisplayName() . '] Failed to fetch associations or existing IDs', [
'teamId' => $this->team->getId(),
'dealCount' => count($dealIds),
'error' => $e->getMessage(),
]);
throw $e;
}
foreach ($deals as $deal) {
try {
$deal['associations'] = $this->prepareAssociationsForOpportunity(
$deal['id'],
$companyAssociations,
$contactAssociations,
$associationsData
);
$syncedOpportunity = $this->importOrUpdateOpportunity(
$deal,
isset($existingCrmIdSet[(string) $deal['id']])
);
if ($syncedOpportunity) {
$syncedOpportunities['success'][] = $syncedOpportunity;
}
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to import opportunity', [
'teamId' => $this->team->getId(),
'crmId' => $deal['id'],
'error' => $e->getMessage(),
]);
$syncedOpportunities['failed_ids'][] = $deal['id'];
$syncedOpportunities['errors'][$deal['id']] = $e->getMessage();
}
}
return $syncedOpportunities;
}
/**
* Prepare associated entities for opportunities with optimized batch processing
* Returns structured data with CRM ID to DB ID mappings for each opportunity
*/
private function prepareAssociatedEntities(array $companyAssociations, array $contactAssociations): array
{
// Step 1: Collect all unique company and contact IDs from associations
$allCompanyIds = $this->flattenAssociationIds($companyAssociations);
$allContactIds = $this->flattenAssociationIds($contactAssociations);
// Step 2: Batch sync missing entities and get CRM ID to DB ID mappings
$companyIdMappings = [];
$contactIdMappings = [];
if (! empty($allCompanyIds)) {
$companyIdMappings = $this->prepareAssociatedAccounts($allCompanyIds);
}
if (! empty($allContactIds)) {
$contactIdMappings = $this->prepareAssociatedContacts($allContactIds);
}
return [
'company_id_mappings' => $companyIdMappings,
'contact_id_mappings' => $contactIdMappings,
];
}
/**
* Flatten association data to get unique IDs
*/
private function flattenAssociationIds(array $associations): array
{
$ids = [];
foreach ($associations as $dealAssociations) {
if (is_array($dealAssociations)) {
foreach ($dealAssociations as $id) {
$ids[$id] = true;
}
}
}
return array_keys($ids);
}
/**
* Batch sync missing accounts
*/
private function prepareAssociatedAccounts(array $companyIds): array
{
// Find which accounts already exist
$existingAccounts = $this->crmEntityRepository
->findAccountsByExternalIds($this->config, $companyIds);
$existingCompanyIds = $existingAccounts->pluck('crm_provider_id')->toArray();
$existingAccountsData = $existingAccounts->mapWithKeys(function ($account) {
return [$account->getCrmProviderId() => $account->getId()];
})->toArray();
$missingCompanyIds = array_diff($companyIds, $existingCompanyIds);
if (empty($missingCompanyIds)) {
return $existingAccountsData;
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing accounts', [
'teamId' => $this->team->getUuid(),
'total_companies' => count($companyIds),
'existing_companies' => count($existingCompanyIds),
'missing_companies' => count($missingCompanyIds),
]);
// we already have limit on opportunity ids count
// Initialize variable before try block
$syncedAccountsData = [];
try {
$syncedAccountsData = $this->batchSyncCrmObjects('companies', $missingCompanyIds);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing accounts', [
'size' => count($missingCompanyIds),
'error' => $e->getMessage(),
]);
$syncedAccountsData = [];
}
return $existingAccountsData + $syncedAccountsData;
}
/**
* Prepare associated contacts - find existing and sync missing ones
* Returns mapping of CRM ID to DB ID
*/
private function prepareAssociatedContacts(array $contactIds): array
{
// Find which contacts already exist
$existingContacts = $this->crmEntityRepository
->findContactsByExternalIds($this->config, $contactIds);
$existingContactIds = $existingContacts->pluck('crm_provider_id')->toArray();
// Create mapping for existing contacts
$existingContactsData = $existingContacts->mapWithKeys(function ($contact) {
return [$contact->getCrmProviderId() => $contact->getId()];
})->toArray();
$missingContactIds = array_diff($contactIds, $existingContactIds);
if (empty($missingContactIds)) {
return $existingContactsData;
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing contacts', [
'teamId' => $this->team->getUuid(),
'total_contacts' => count($contactIds),
'existing_contacts' => count($existingContactIds),
'missing_contacts' => count($missingContactIds),
]);
// Sync missing contacts using batch API
try {
$syncedContactsData = $this->batchSyncCrmObjects('contacts', $missingContactIds);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing contacts', [
'size' => count($missingContactIds),
'error' => $e->getMessage(),
]);
$syncedContactsData = [];
}
return $existingContactsData + $syncedContactsData;
}
private function batchSyncCrmObjects(string $objectType, array $crmIds): array
{
$syncObjects = [];
$crmObjectIds = array_values($crmIds);
foreach (array_chunk($crmObjectIds, self::BATCH_SIZE) as $chunk) {
try {
$objects = $objectType === 'companies' ?
$this->client->getCompaniesByIds($chunk, $this->getCompanyFields()) :
$this->client->getContactsByIds($chunk, $this->getContactFields());
foreach ($objects as $objectId => $objectData) {
$this->importCrmObject($objectType, (string) $objectId, $objectData, $syncObjects);
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch synced ' . $objectType, [
'requested_count' => count($chunk),
'synced_count' => count($objects),
]);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Batch ' . $objectType . ' sync failed', [
'ids' => $chunk,
'error' => $e->getMessage(),
]);
}
}
return $syncObjects;
}
private function importCrmObject(string $objectType, string $objectId, mixed $objectData, array &$syncObjects): void
{
try {
$object = $objectType === 'companies' ?
$this->importAccount($objectData) :
$this->importContact($objectData);
if ($object) {
$syncObjects[$object->getCrmProviderId()] = $object->getId();
}
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to import batch ' . $objectType, [
'id' => $objectId,
'error' => $e->getMessage(),
]);
}
}
/**
* Prepare associations for a single opportunity
*
* The return value is an array with the following structure:
* [
* 'companies' => [
* $companyCrmId => $companyId,
* ...
* ],
* 'contacts' => [
* $contactCrmId => $contactId,
* ...
* ],
* 'account_id' => $accountId,
* ]
*/
private function prepareAssociationsForOpportunity(
string $oppCrmId,
array $companyAssociations,
array $contactAssociations,
array $associationsData
): array {
$associations = [
'companies' => [],
'contacts' => [],
'account_id' => null, // Primary account for opportunity
];
$oppCompanyIds = $companyAssociations[$oppCrmId] ?? [];
foreach ($oppCompanyIds as $companyCrmId) {
if (isset($associationsData['company_id_mappings'][$companyCrmId])) {
$associations['companies'][$companyCrmId] = $associationsData['company_id_mappings'][$companyCrmId];
// Set primary account (first company becomes primary account)
if ($associations['account_id'] === null) {
$associations['account_id'] = $associationsData['company_id_mappings'][$companyCrmId];
}
}
}
$oppContactIds = $contactAssociations[$oppCrmId] ?? [];
foreach ($oppContactIds as $contactCrmId) {
if (isset($associationsData['contact_id_mappings'][$contactCrmId])) {
$associations['contacts'][$contactCrmId] = $associationsData['contact_id_mappings'][$contactCrmId];
}
}
return $associations;
}
/**
* Update only associations for an opportunity
*/
private function updateOpportunityAssociations(Opportunity $opportunity, array $associations): void
{
// Update contact associations
$this->importOpportunityContacts($opportunity, $associations['contacts']);
// Update company (account) associations
$this->updateOpportunityAccount($opportunity, $associations['account_id']);
}
/**
* Remove all contact associations from an opportunity
*/
private function removeAllOpportunityContacts(Opportunity $opportunity): void
{
$currentCount = (int) $opportunity->contacts()->count();
if ($currentCount > 0) {
$opportunity->contacts()->detach();
$this->logger->info('[' . $this->getDisplayName() . '] Removed all contact associations', [
'opportunity_id' => $opportunity->getId(),
'removed_count' => $currentCount,
]);
}
}
private function updateOpportunityAccount(Opportunity $opportunity, ?int $accountId): void
{
if ($accountId === null) {
// No account ID provided - keep current account
return;
}
$currentAccountId = $opportunity->getAccountId();
// Only update if account has changed
if ($currentAccountId !== $accountId) {
$opportunity->account_id = $accountId;
$opportunity->save();
$this->logger->info('[' . $this->getDisplayName() . '] Updated opportunity account association', [
'opportunity_id' => $opportunity->getId(),
'old_account_id' => $currentAccountId,
'new_account_id' => $accountId,
]);
}
}
/**
* Find existing opportunities by external IDs (OPTIMIZED VERSION)
* Uses batch query for better performance
*/
private function findExistingOpportunities(array $crmIds): Collection
{
return $this->crmEntityRepository
->findOpportunitiesByExternalIds($this->config, $crmIds);
}
private function processOpportunityBatch(array $opportunities): int
{
$syncedOpportunities = $this->importOpportunityBatch($opportunities);
return count($syncedOpportunities['success'] ?? []);
}
/**
* Convert single deal associations from HubSpot format to internal format
* Handles both HubSpot SDK objects and array formats
*
* @param array $opportunityAssociations Raw associations from HubSpot API or pre-processed
*
* @return array Processed associations with DB IDs
*/
private function convertDealAssociations(array $opportunityAssociations): array
{
$associations = $this->initializeAssociationsStructure();
if (empty($opportunityAssociations)) {
return $associations;
}
$associationIds = $this->extractAssociationIds($opportunityAssociations);
$this->processCompanyAssociations($associationIds, $associations);
$this->processContactAssociations($associationIds, $associations);
return $associations;
}
private function initializeAssociationsStructure(): array
{
return [
'companies' => [],
'contacts' => [],
'account_id' => null, // Primary account for opportunity
];
}
private function extractAssociationIds(array $opportunityAssociations): array
{
$associationIds = [];
foreach ($opportunityAssociations as $type => $associationData) {
if (! empty($associationData)) {
$associationIds[$type] = $this->convertSingleDealAssociations($associationData);
}
}
return $associationIds;
}
private function processCompanyAssociations(array $associationIds, array &$associations): void
{
if (empty($associationIds['companies'])) {
return;
}
$companyId = $associationIds['companies'][0];
$account = $this->findOrSyncAccount($companyId);
if ($account instanceof Account) {
$associations['companies'][$companyId] = $account->getId();
$associations['account_id'] = $account->getId();
}
}
private function processContactAssociations(array $associationIds, array &$associations): void
{
if (empty($associationIds['contacts'])) {
return;
}
foreach ($associationIds['contacts'] as $contactId) {
$contact = $this->findOrSyncContact($contactId);
if ($contact instanceof Contact) {
$associations['contacts'][$contactId] = $contact->getId();
}
}
}
private function findOrSyncAccount(string $companyId): ?Account
{
$account = $this->crmEntityRepository->findAccountByExternalId($this->config, $companyId);
if (! $account instanceof Account) {
$account = $this->syncAccount($companyId);
}
return $account;
}
private function findOrSyncContact(string $contactId): ?Contact
{
$contact = $this->crmEntityRepository->findContactByExternalId($this->config, $contactId);
if (! $contact instanceof Contact) {
$contact = $this->syncContact($contactId);
}
return $contact;
}
private function convertSingleDealAssociations($opportunityAssociations = null): array
{
$associationData = [];
if ($opportunityAssociations === null) {
return $associationData;
}
// Handle array input (from extractAssociationIds)
if (is_array($opportunityAssociations)) {
return $opportunityAssociations;
}
// Handle CollectionResponseAssociatedId object
if ($opportunityAssociations instanceof CollectionResponseAssociatedId) {
foreach ($opportunityAssociations->getResults() as $association) {
$associationData[] = $association->getId();
}
}
return $associationData;
}
private function importOrUpdateOpportunity($crmData, ?bool $exists = null): ?Opportunity
{
if (empty($crmData['properties'])) {
return null;
}
$crmId = (string) $crmData['id'];
$properties = $crmData['properties'];
$associations = $crmData['associations'] ?? [];
$opportunityExists = $exists ?? (bool) $this->crmEntityRepository->findOpportunityByExternalId(
$this->config,
$crmId
);
if ($opportunityExists) {
return $this->updateOpportunity($crmId, $properties, $associations);
} else {
return $this->createOpportunity($crmId, $properties, $associations);
}
}
/**
* Create new opportunity
*/
private function createOpportunity(string $crmId, array $properties, array $associations): ?Opportunity
{
$accountId = $this->resolveAccountId($associations);
if (! $accountId) {
return null;
}
$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);
if (! $businessProcess) {
return null;
}
$stage = $this->resolveStage($businessProcess, $properties['dealstage'] ?? null);
if (! $stage) {
return null;
}
$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);
$attributes = [
'crm_configuration_id' => $this->config->getId(),
'crm_provider_id' => $crmId,
];
$values = array_merge($attributes, $data);
$opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);
$this->importExternalFieldData($properties, $opportunity->getId());
$this->importOpportunityContacts($opportunity, $associations['contacts']);
if ($opportunity->wasRecentlyCreated) {
MatchActivitiesToNewOpportunity::dispatch($opportunity->getId());
}
return $opportunity;
}
/**
* Update existing opportunity
*/
private function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity
{
$accountId = $this->resolveAccountId($associations);
$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);
$stage = $businessProcess ? $this->resolveStage($businessProcess, $properties['dealstage'] ?? null) : null;
$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);
$attributes = [
'crm_configuration_id' => $this->config->getId(),
'crm_provider_id' => $crmId,
];
$values = array_merge($attributes, $data);
$opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);
$this->importExternalFieldData($properties, $opportunity->getId());
$this->updateOpportunityAssociations($opportunity, $associations);
return $opportunity;
}
private function resolveAccountId(array $associations): ?int
{
if (! empty($associations['accountId'])) {
return $associations['accountId'];
}
if (empty($associations)) {
return null;
}
// we can't resolve multiple account ids (currently SDK returns one company)
foreach ($associations['companies'] as $accountId) {
return $accountId;
}
return null;
}
private function buildOpportunityData(
array $properties,
?int $accountId,
?BusinessProcess $businessProcess,
?Stage $stage
): array {
$ownerId = null;
$profile = null;
if (! empty($properties['hubspot_owner_id'])) {
$ownerId = $properties['hubspot_owner_id'];
$profile = $this->crmEntityRepository->findProfileByExternalId($this->config, (string) $ownerId);
}
$name = 'Unknown';
if (isset($properties['dealname'])) {
$name = mb_strimwidth($properties['dealname'], 0, 128);
}
$amount = $this->resolveAmount($properties);
$currency = $properties['deal_currency_code'] ?? null;
$closeDate = null;
if (! empty($properties['closedate'])) {
$closeDate = Carbon::parse($properties['closedate'])->format('Y-m-d');
}
$remotelyCreatedAt = null;
if (! empty($properties['createdate']) && strtotime($properties['createdate'])) {
$date = $this->parseCleanDatetime($properties['createdate']);
$remotelyCreatedAt = $date?->format('Y-m-d H:i:s');
}
$closedStages = $this->getClosedDealStages();
$isWon = in_array($properties['dealstage'], $closedStages['won']);
$isLost = in_array($properties['dealstage'], $closedStages['lost']);
$data = [
'team_id' => $this->team->getId(),
'user_id' => $profile ? $profile->user_id : null,
'owner_id' => $ownerId,
'name' => $name,
'value' => ! empty($amount) ? $amount : null,
'currency_code' => CurrencyFormatter::formatCode($currency),
'close_date' => $closeDate,
'is_closed' => $isWon || $isLost,
'is_won' => $isWon,
'remotely_created_at' => $remotelyCreatedAt,
'probability' => $this->resolveDealProbability($properties['hs_deal_stage_probability']),
'forecast_category' => $this->resolveForecastCategory($properties['hs_manual_forecast_category']),
];
if ($accountId) {
$data['account_id'] = $accountId;
}
if ($stage) {
$data['stage_id'] = $stage->id;
}
if ($businessProcess) {
$recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);
if ($recordType) {
$data['record_type_id'] = $recordType->id;
}
}
return $data;
}
private function resolveBusinessProcess(?string $pipelineId): ?BusinessProcess
{
if ($pipelineId === null) {
return null;
}
if (isset($this->cachedBusinessProcesses[$pipelineId])) {
return $this->cachedBusinessProcesses[$pipelineId];
}
$businessProcess = $this->getBusinessProcess($pipelineId);
if (! $businessProcess instanceof BusinessProcess) {
$this->importStages();
$businessProcess = $this->getBusinessProcess($pipelineId);
}
if (! $businessProcess instanceof BusinessProcess) {
$this->logger->info(
'[HubSpot] Deal is not attached to a pipeline',
[
'pipeline' => $pipelineId]
);
}
$this->cachedBusinessProcesses[$pipelineId] = $businessProcess;
return $businessProcess;
}
private function getBusinessProcess(string $pipelineId): ?BusinessProcess
{
return $this->crmEntityRepository->findBusinessProcessesByExternalId($this->config, $pipelineId);
}
private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage
{
if (empty($stageId)) {
return null;
}
$cacheKey = $businessProcess->getId() . ':' . $stageId;
if (isset($this->cachedStages[$cacheKey])) {
return $this->cachedStages[$cacheKey];
}
$stage = $this->crmEntityRepository->getPipelineStageByConditions(
$businessProcess,
[
'crm_provider_id' => $stageId,
'type' => Stage::TYPE_OPPORTUNITY,
]
);
if ($stage === null) {
$this->importStages(null, $stageId);
}
if ($stage === null) {
$this->logger->info('[HubSpot] Stage does not exist => ' . $stageId);
}
$this->cachedStages[$cacheKey] = $stage;
return $stage;
}
private function resolveAmount(array $properties): ?string
{
$amount = null;
if (! empty($properties['amount'])) {
$amount = str_replace(',', '', $properties['amount']);
}
if ($this->config->hasDefaultCurrencyFieldSet()) {
$valueFieldName = $this->config->getDefaultCurrencyField()->getCrmProviderId();
$amount = $properties[$valueFieldName] ?? $amount;
}
return $amount;
}
private function parseCleanDatetime(string $datetime): ?Carbon
{
// Treat pre-1980 values as invalid
$minValidDate = Carbon::parse('1980-01-01 00:00:00');
try {
$date = Carbon::parse($datetime);
if ($minValidDate->gt($date)) {
return null;
}
return $date;
} catch (Exception) {
return null; // On parse error, treat as null
}
}
private function resolveDealProbability(?string $stageProbability): int
{
if ($stageProbability === null) {
return 0;
}
$probability = (float) $stageProbability;
return $probability > 1 ? 0 : (int) ($probability * 100);
}
private function resolveForecastCategory(?string $forecastCategory): string
{
if (! $forecastCategory) {
return Forecast::FORECAST_CATEGORY_UNCATEGORIZED;
}
$forecastCategory = str_replace('_', ' ', $forecastCategory);
return ucwords(strtolower($forecastCategory));
}
private function importExternalFieldData(array $properties, int $opportunityId): void
{
$crmFields = $this->getOpportunitySyncableFields();
$this->importOpportunityCrmFieldData($properties, $crmFields, $opportunityId);
}
private function importOpportunityContacts(Opportunity $opportunity, array $associations): void
{
// Handle empty or missing contact associations
if (empty($associations)) {
// Remove all existing contact associations if none provided
$this->removeAllOpportunityContacts($opportunity);
return;
}
// Use differential sync approach for better performance and accuracy
$this->syncOpportunityContactsDifferential($opportunity, $associations);
}
/**
* Sync opportunity contacts using differential approach
* This compares current vs new associations and only makes necessary changes
*/
private function syncOpportunityContactsDifferential(Opportunity $opportunity, array $contactAssociations): void
{
$currentContactCrmIds = $this->getCurrentContactCrmIds($opportunity);
$contactAssociationIds = array_keys($contactAssociations);
$contactsToAdd = array_diff($contactAssociationIds, $currentContactCrmIds);
$contactsToRemove = array_diff($currentContactCrmIds, $contactAssociationIds);
if (empty($contactsToAdd) && empty($contactsToRemove)) {
return;
}
$this->logContactAssociationChanges($opportunity, $currentContactCrmIds, $contactAssociations, $contactsToAdd, $contactsToRemove);
$this->removeContactAssociations($opportunity, $contactsToRemove);
$this->addContactAssociations($opportunity, $contactsToAdd, $contactAssociations);
}
private function getCurrentContactCrmIds(Opportunity $opportunity): array
{
return $opportunity->contacts()
->pluck('contacts.crm_provider_id')
->toArray();
}
private function logContactAssociationChanges(
Opportunity $opportunity,
array $currentContactCrmIds,
array $contactAssociations,
array $contactsToAdd,
array $contactsToRemove
): void {
$this->logger->info('[' . $this->getDisplayName() . '] Contact association changes', [
'opportunity_id' => $opportunity->getId(),
'current_contacts' => $currentContactCrmIds,
'new_contacts' => $contactAssociations,
'contacts_to_add' => $contactsToAdd,
'contacts_to_remove' => $contactsToRemove,
]);
}
private function removeContactAssociations(Opportunity $opportunity, array $contactsToRemove): void
{
if (empty($contactsToRemove)) {
return;
}
$contactsToDetach = $opportunity->contacts()
->whereIn('contacts.crm_provider_id', $contactsToRemove)
->pluck('contacts.id')
->toArray();
if (! empty($contactsToDetach)) {
$opportunity->contacts()->detach($contactsToDetach);
$this->logger->info('[' . $this->getDisplayName() . '] Removed contact associations', [
'opportunity_id' => $opportunity->getId(),
'removed_contact_crm_ids' => $contactsToRemove,
'removed_contact_count' => count($contactsToDetach),
]);
}
}
private function addContactAssociations(Opportunity $opportunity, array $contactsToAdd, array $contactAssociations): void
{
if (empty($contactsToAdd)) {
return;
}
$contactsAdded = [];
foreach ($contactsToAdd as $crmId) {
$id = $contactAssociations[$crmId];
if ($this->attachSingleContact($opportunity, (string) $crmId, $id)) {
$contactsAdded[] = $crmId;
}
}
$this->logAddedContacts($opportunity, $contactsAdded);
}
private function attachSingleContact(Opportunity $opportunity, string $crmId, int $id): bool
{
try {
$contact = $this->crmEntityRepository->findContactByConfigurationAndId($this->config, $id);
if (! $contact) {
return false;
}
return $this->performContactAttachment($opportunity, $contact, $crmId);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to add contact association', [
'opportunity_id' => $opportunity->getId(),
'contact_crm_id' => $crmId,
'error' => $e->getMessage(),
]);
return false;
}
}
private function performContactAttachment(Opportunity $opportunity, Contact $contact, string $crmId): bool
{
try {
$opportunity->contacts()->attach($contact->getId(), [
'crm_provider_id' => $crmId,
]);
return true;
} catch (\Illuminate\Database\QueryException $e) {
if (str_contains($e->getMessage(), 'Duplicate entry')) {
$this->logger->info('[' . $this->getDisplayName() . '] Contact association already exists', [
'contact_id' => $contact->getId(),
'contact_crm_id' => $crmId,
'opportunity_id' => $opportunity->getId(),
]);
return false;
}
throw $e;
}
}
private function logAddedContacts(Opportunity $opportunity, array $contactsAdded): void
{
if (! empty($contactsAdded)) {
$this->logger->info('[' . $this->getDisplayName() . '] Added contact associations', [
'opportunity_id' => $opportunity->getId(),
'contacts_to_add_count' => count($contactsAdded),
'added_contact_crm_ids' => $contactsAdded,
'added_contacts_count' => count($contactsAdded),
]);
}
}
}
Execute
Explain Plan...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AutomatedReportsCommandTest","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AutomatedReportsCommandTest'","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AutomatedReportsCommandTest'","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"podcast_audio_url\"","depth":4,"value":"\"podcast_audio_url\"","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.0,"top":0.0,"width":0.015277778,"height":0.024444444},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"0 results","depth":4,"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.088194445,"height":0.027777778},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.0,"top":0.0,"width":0.018055556,"height":0.026666667},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"32","depth":4,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"role_description":"text"},{"role":"AXStaticText","text":"19","depth":4,"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits;\n\nuse Carbon\\Carbon;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\CollectionResponseAssociatedId;\nuse Jiminny\\Exceptions\\InvalidArgumentException;\nuse Jiminny\\Models\\Account;\nuse Exception;\nuse Jiminny\\Component\\DealInsights\\Forecast\\Forecast;\nuse Jiminny\\Jobs\\Crm\\MatchActivitiesToNewOpportunity;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\BusinessProcess;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Models\\Opportunity;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\CrmEntityRepository;\nuse Jiminny\\Services\\Crm\\Hubspot\\DealFieldsService;\nuse Jiminny\\Services\\Crm\\Hubspot\\OpportunitySyncStrategy\\HubspotSingleSyncStrategy;\nuse Jiminny\\Services\\Crm\\Hubspot\\WebhookSyncBatchProcessor;\nuse Jiminny\\Services\\Crm\\OpportunitySyncStrategyResolver;\nuse Jiminny\\Utils\\CurrencyFormatter;\n\n/**\n * Optimized sync methods for better performance\n * These methods can be integrated into SyncCrmEntitiesTrait for significant performance gains\n */\ntrait OpportunitySyncTrait\n{\n private const int BATCH_SIZE = 100;\n private const int BATCH_PROCESS_SIZE = 800;\n\n protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;\n protected CrmEntityRepository $crmEntityRepository;\n protected DealFieldsService $dealFieldsService;\n\n private ?array $cachedClosedDealStages = null;\n private array $cachedBusinessProcesses = [];\n private array $cachedStages = [];\n\n public function syncOpportunities(array $parameters, ?string $strategy = null): int\n {\n $strategies = $this->opportunitySyncStrategyResolver->getStrategies($this->config, $strategy);\n $parameters['config'] = $this->config;\n $syncCount = 0;\n $reportedTotal = 0;\n $lastSyncedId = [];\n\n try {\n foreach ($strategies as $strategyName => $syncStrategy) {\n $this->logger->info(\n '[' . $this->getDisplayName() . '] Syncing opportunities using strategy: ' .\n $strategyName\n );\n\n $total = 0;\n $lastId = null;\n $buffer = [];\n\n // HubspotWebhookBatchSyncStrategy returns empty generator, this is for other strategies\n foreach ($syncStrategy->fetchOpportunities($parameters, $total, $lastId) as $hsOpportunity) {\n $buffer[] = $hsOpportunity;\n\n // process every 800 rows (fits < 1 000 association limit)\n if (\\count($buffer) >= self::BATCH_PROCESS_SIZE) {\n $syncCount += $this->processOpportunityBatch($buffer);\n $buffer = [];\n }\n }\n\n // leftovers\n if ($buffer) {\n $syncCount += $this->processOpportunityBatch($buffer);\n }\n\n $reportedTotal += $total;\n $lastSyncedId = $lastId;\n }\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException | CrmException $e) {\n $this->handleSyncException($e, $parameters);\n }\n\n $this->logger->info(\n '[HubSpot] Synced opportunities',\n [\n 'team' => $this->team->getId(),\n 'sync_count' => $syncCount,\n 'total' => $reportedTotal,\n 'last_synced_id' => $lastSyncedId,\n ]\n );\n\n return $reportedTotal;\n }\n\n private function handleSyncException(\\Throwable $e, array $parameters): void\n {\n if (($parameters['since'] ?? null) instanceof Carbon) {\n $parameters['since'] = $parameters['since']->toDateTimeString();\n }\n $parameters['config'] = $this->config->getId();\n\n $this->logger->warning('[' . $this->getDisplayName() . '] Sync opportunities failed', [\n 'teamId' => $this->team->getUuid(),\n 'parameters' => $parameters,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n /**\n * @inheritdoc\n */\n public function syncOpportunity(string $crmId): ?Opportunity\n {\n $strategy = $this->opportunitySyncStrategyResolver->resolve(\n $this->config,\n OpportunitySyncStrategyResolver::SINGLE_SYNC_OPPORTUNITY_STRATEGY,\n );\n\n $parameters = [\n 'config' => $this->config,\n 'crm_id' => $crmId,\n ];\n\n try {\n if (! $strategy instanceof HubspotSingleSyncStrategy) {\n throw new InvalidArgumentException('Strategy must by HubspotSingleSyncStrategy');\n }\n\n $hsOpportunity = $strategy->fetchOpportunity($parameters);\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException $e) {\n $this->logger->info('[' . $this->getDisplayName() . '] Opportunity not found', [\n 'teamId' => $this->team->getUuid(),\n 'crmId' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n return null;\n }\n\n $hsOpportunity['associations'] = $this->convertDealAssociations($hsOpportunity['associations'] ?? []);\n\n return $this->importOrUpdateOpportunity($hsOpportunity);\n }\n\n /**\n * Process webhook-collected opportunity batches.\n *\n * Drains Redis sets containing company CRM IDs collected from webhook events\n * and dispatches ImportOpportunityBatch jobs for batch processing.\n *\n * @return int Number of opportunity IDs dispatched to jobs\n */\n public function batchSyncOpportunities(): int\n {\n $configId = $this->team->getCrmConfiguration()->getId();\n\n return $this->batchProcessor->processBatchesForObjectType(\n WebhookSyncBatchProcessor::OBJECT_TYPE_DEAL,\n $configId\n );\n }\n\n /**\n * Import a batch of opportunities by their CRM IDs.\n * Fetches opportunity data from HubSpot API and delegates to importOpportunityBatch().\n *\n * @param array<string> $crmIds HubSpot deal CRM IDs\n *\n * @return array{success: array, failed_ids: array, errors?: array<string, string>}\n */\n public function importOpportunityBatchByIds(array $crmIds): array\n {\n $fields = $this->dealFieldsService->getFieldsForConfiguration($this->config);\n\n $allDeals = [];\n foreach (array_chunk($crmIds, self::BATCH_SIZE) as $chunk) {\n $deals = $this->client->getOpportunitiesByIds($chunk, $fields);\n foreach ($deals as $deal) {\n $allDeals[] = $deal;\n }\n }\n\n // IDs not returned by HubSpot are likely deleted or inaccessible deals.\n // These are not failures — retrying won't bring them back.\n $fetchedIds = array_map('strval', array_column($allDeals, 'id'));\n $notFoundIds = array_values(array_diff(array_map('strval', $crmIds), $fetchedIds));\n\n if (! empty($notFoundIds)) {\n $this->logger->info('[' . $this->getDisplayName() . '] CRM IDs not found in HubSpot (likely deleted)', [\n 'teamId' => $this->team->getId(),\n 'notFoundCount' => \\count($notFoundIds),\n 'notFoundIds' => $notFoundIds,\n 'requestedCount' => \\count($crmIds),\n 'fetchedCount' => \\count($allDeals),\n ]);\n }\n\n if (empty($allDeals)) {\n return ['success' => [], 'failed_ids' => []];\n }\n\n return $this->importOpportunityBatch($allDeals);\n }\n\n private function getClosedDealStages(): array\n {\n if ($this->cachedClosedDealStages !== null) {\n return $this->cachedClosedDealStages;\n }\n\n $stages = $this->crmEntityRepository->getOpportunityClosedStages($this->config);\n $data = [\n 'lost' => [],\n 'won' => [],\n ];\n\n foreach ($stages as $stage) {\n if ($stage->probability == 0.00) {\n $data['lost'][] = $stage->crm_provider_id;\n }\n if ($stage->probability == 100.00) {\n $data['won'][] = $stage->crm_provider_id;\n }\n }\n\n $this->cachedClosedDealStages = $data;\n\n return $data;\n }\n\n /**\n * Import deals into the database with pre-fetched associations.\n *\n * API calls here (getAssociationsData, getExistingOpportunityCrmIds) are NOT\n * caught — if they throw, the exception propagates to ImportOpportunityBatch::handle()\n * where Laravel retries the whole job with backoff. After all retries exhausted,\n * failed() requeues all IDs to Redis.\n *\n * The per-deal loop catches exceptions individually. A deal can end up in three states:\n * - success: imported/updated successfully\n * - failed_ids: exception thrown (DB constraint violation, corrupt data, etc.)\n * These are permanent issues — retrying won't fix them.\n * - skipped (null): missing dependencies (no account, unknown pipeline/stage).\n * This is acceptable — the deal cannot be imported until those exist.\n */\n private function importOpportunityBatch(array $deals): array\n {\n $syncedOpportunities = [\n 'success' => [],\n 'failed_ids' => [],\n ];\n $dealIds = array_column($deals, 'id');\n\n // Shared association/existing-ID preparation is batch-level state. If it fails, rethrow so the\n // queue job retries the whole batch and eventually requeues all deal IDs back to Redis.\n try {\n $companyAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'companies');\n $contactAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'contacts');\n\n $associationsData = $this->prepareAssociatedEntities($companyAssociations, $contactAssociations);\n\n $existingCrmIds = $this->crmEntityRepository->getExistingOpportunityCrmIds(\n $this->config,\n array_map('strval', $dealIds)\n );\n $existingCrmIdSet = array_flip($existingCrmIds);\n } catch (\\Throwable $e) {\n $this->logger->error('[' . $this->getDisplayName() . '] Failed to fetch associations or existing IDs', [\n 'teamId' => $this->team->getId(),\n 'dealCount' => count($dealIds),\n 'error' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n foreach ($deals as $deal) {\n try {\n $deal['associations'] = $this->prepareAssociationsForOpportunity(\n $deal['id'],\n $companyAssociations,\n $contactAssociations,\n $associationsData\n );\n\n $syncedOpportunity = $this->importOrUpdateOpportunity(\n $deal,\n isset($existingCrmIdSet[(string) $deal['id']])\n );\n if ($syncedOpportunity) {\n $syncedOpportunities['success'][] = $syncedOpportunity;\n }\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to import opportunity', [\n 'teamId' => $this->team->getId(),\n 'crmId' => $deal['id'],\n 'error' => $e->getMessage(),\n ]);\n $syncedOpportunities['failed_ids'][] = $deal['id'];\n $syncedOpportunities['errors'][$deal['id']] = $e->getMessage();\n }\n }\n\n return $syncedOpportunities;\n }\n\n /**\n * Prepare associated entities for opportunities with optimized batch processing\n * Returns structured data with CRM ID to DB ID mappings for each opportunity\n */\n private function prepareAssociatedEntities(array $companyAssociations, array $contactAssociations): array\n {\n // Step 1: Collect all unique company and contact IDs from associations\n $allCompanyIds = $this->flattenAssociationIds($companyAssociations);\n $allContactIds = $this->flattenAssociationIds($contactAssociations);\n\n // Step 2: Batch sync missing entities and get CRM ID to DB ID mappings\n $companyIdMappings = [];\n $contactIdMappings = [];\n\n if (! empty($allCompanyIds)) {\n $companyIdMappings = $this->prepareAssociatedAccounts($allCompanyIds);\n }\n\n if (! empty($allContactIds)) {\n $contactIdMappings = $this->prepareAssociatedContacts($allContactIds);\n }\n\n return [\n 'company_id_mappings' => $companyIdMappings,\n 'contact_id_mappings' => $contactIdMappings,\n ];\n }\n\n /**\n * Flatten association data to get unique IDs\n */\n private function flattenAssociationIds(array $associations): array\n {\n $ids = [];\n foreach ($associations as $dealAssociations) {\n if (is_array($dealAssociations)) {\n foreach ($dealAssociations as $id) {\n $ids[$id] = true;\n }\n }\n }\n\n return array_keys($ids);\n }\n\n /**\n * Batch sync missing accounts\n */\n private function prepareAssociatedAccounts(array $companyIds): array\n {\n // Find which accounts already exist\n $existingAccounts = $this->crmEntityRepository\n ->findAccountsByExternalIds($this->config, $companyIds);\n\n $existingCompanyIds = $existingAccounts->pluck('crm_provider_id')->toArray();\n\n $existingAccountsData = $existingAccounts->mapWithKeys(function ($account) {\n return [$account->getCrmProviderId() => $account->getId()];\n })->toArray();\n\n $missingCompanyIds = array_diff($companyIds, $existingCompanyIds);\n\n if (empty($missingCompanyIds)) {\n return $existingAccountsData;\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing accounts', [\n 'teamId' => $this->team->getUuid(),\n 'total_companies' => count($companyIds),\n 'existing_companies' => count($existingCompanyIds),\n 'missing_companies' => count($missingCompanyIds),\n ]);\n\n // we already have limit on opportunity ids count\n // Initialize variable before try block\n $syncedAccountsData = [];\n\n try {\n $syncedAccountsData = $this->batchSyncCrmObjects('companies', $missingCompanyIds);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing accounts', [\n 'size' => count($missingCompanyIds),\n 'error' => $e->getMessage(),\n ]);\n $syncedAccountsData = [];\n }\n\n return $existingAccountsData + $syncedAccountsData;\n }\n\n /**\n * Prepare associated contacts - find existing and sync missing ones\n * Returns mapping of CRM ID to DB ID\n */\n private function prepareAssociatedContacts(array $contactIds): array\n {\n // Find which contacts already exist\n $existingContacts = $this->crmEntityRepository\n ->findContactsByExternalIds($this->config, $contactIds);\n\n $existingContactIds = $existingContacts->pluck('crm_provider_id')->toArray();\n\n // Create mapping for existing contacts\n $existingContactsData = $existingContacts->mapWithKeys(function ($contact) {\n return [$contact->getCrmProviderId() => $contact->getId()];\n })->toArray();\n\n $missingContactIds = array_diff($contactIds, $existingContactIds);\n\n if (empty($missingContactIds)) {\n return $existingContactsData;\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing contacts', [\n 'teamId' => $this->team->getUuid(),\n 'total_contacts' => count($contactIds),\n 'existing_contacts' => count($existingContactIds),\n 'missing_contacts' => count($missingContactIds),\n ]);\n\n // Sync missing contacts using batch API\n try {\n $syncedContactsData = $this->batchSyncCrmObjects('contacts', $missingContactIds);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing contacts', [\n 'size' => count($missingContactIds),\n 'error' => $e->getMessage(),\n ]);\n $syncedContactsData = [];\n }\n\n return $existingContactsData + $syncedContactsData;\n }\n\n private function batchSyncCrmObjects(string $objectType, array $crmIds): array\n {\n $syncObjects = [];\n $crmObjectIds = array_values($crmIds);\n\n foreach (array_chunk($crmObjectIds, self::BATCH_SIZE) as $chunk) {\n try {\n $objects = $objectType === 'companies' ?\n $this->client->getCompaniesByIds($chunk, $this->getCompanyFields()) :\n $this->client->getContactsByIds($chunk, $this->getContactFields());\n\n foreach ($objects as $objectId => $objectData) {\n $this->importCrmObject($objectType, (string) $objectId, $objectData, $syncObjects);\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch synced ' . $objectType, [\n 'requested_count' => count($chunk),\n 'synced_count' => count($objects),\n ]);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Batch ' . $objectType . ' sync failed', [\n 'ids' => $chunk,\n 'error' => $e->getMessage(),\n ]);\n }\n }\n\n return $syncObjects;\n }\n\n private function importCrmObject(string $objectType, string $objectId, mixed $objectData, array &$syncObjects): void\n {\n try {\n $object = $objectType === 'companies' ?\n $this->importAccount($objectData) :\n $this->importContact($objectData);\n\n if ($object) {\n $syncObjects[$object->getCrmProviderId()] = $object->getId();\n }\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to import batch ' . $objectType, [\n 'id' => $objectId,\n 'error' => $e->getMessage(),\n ]);\n }\n }\n\n /**\n * Prepare associations for a single opportunity\n *\n * The return value is an array with the following structure:\n * [\n * 'companies' => [\n * $companyCrmId => $companyId,\n * ...\n * ],\n * 'contacts' => [\n * $contactCrmId => $contactId,\n * ...\n * ],\n * 'account_id' => $accountId,\n * ]\n */\n private function prepareAssociationsForOpportunity(\n string $oppCrmId,\n array $companyAssociations,\n array $contactAssociations,\n array $associationsData\n ): array {\n $associations = [\n 'companies' => [],\n 'contacts' => [],\n 'account_id' => null, // Primary account for opportunity\n ];\n\n $oppCompanyIds = $companyAssociations[$oppCrmId] ?? [];\n foreach ($oppCompanyIds as $companyCrmId) {\n if (isset($associationsData['company_id_mappings'][$companyCrmId])) {\n $associations['companies'][$companyCrmId] = $associationsData['company_id_mappings'][$companyCrmId];\n\n // Set primary account (first company becomes primary account)\n if ($associations['account_id'] === null) {\n $associations['account_id'] = $associationsData['company_id_mappings'][$companyCrmId];\n }\n }\n }\n\n $oppContactIds = $contactAssociations[$oppCrmId] ?? [];\n foreach ($oppContactIds as $contactCrmId) {\n if (isset($associationsData['contact_id_mappings'][$contactCrmId])) {\n $associations['contacts'][$contactCrmId] = $associationsData['contact_id_mappings'][$contactCrmId];\n }\n }\n\n return $associations;\n }\n\n /**\n * Update only associations for an opportunity\n */\n private function updateOpportunityAssociations(Opportunity $opportunity, array $associations): void\n {\n // Update contact associations\n $this->importOpportunityContacts($opportunity, $associations['contacts']);\n\n // Update company (account) associations\n $this->updateOpportunityAccount($opportunity, $associations['account_id']);\n }\n\n /**\n * Remove all contact associations from an opportunity\n */\n private function removeAllOpportunityContacts(Opportunity $opportunity): void\n {\n $currentCount = (int) $opportunity->contacts()->count();\n\n if ($currentCount > 0) {\n $opportunity->contacts()->detach();\n\n $this->logger->info('[' . $this->getDisplayName() . '] Removed all contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'removed_count' => $currentCount,\n ]);\n }\n }\n\n private function updateOpportunityAccount(Opportunity $opportunity, ?int $accountId): void\n {\n if ($accountId === null) {\n // No account ID provided - keep current account\n return;\n }\n\n $currentAccountId = $opportunity->getAccountId();\n\n // Only update if account has changed\n if ($currentAccountId !== $accountId) {\n $opportunity->account_id = $accountId;\n $opportunity->save();\n\n $this->logger->info('[' . $this->getDisplayName() . '] Updated opportunity account association', [\n 'opportunity_id' => $opportunity->getId(),\n 'old_account_id' => $currentAccountId,\n 'new_account_id' => $accountId,\n ]);\n }\n }\n\n /**\n * Find existing opportunities by external IDs (OPTIMIZED VERSION)\n * Uses batch query for better performance\n */\n private function findExistingOpportunities(array $crmIds): Collection\n {\n return $this->crmEntityRepository\n ->findOpportunitiesByExternalIds($this->config, $crmIds);\n }\n\n private function processOpportunityBatch(array $opportunities): int\n {\n $syncedOpportunities = $this->importOpportunityBatch($opportunities);\n\n return count($syncedOpportunities['success'] ?? []);\n }\n\n /**\n * Convert single deal associations from HubSpot format to internal format\n * Handles both HubSpot SDK objects and array formats\n *\n * @param array $opportunityAssociations Raw associations from HubSpot API or pre-processed\n *\n * @return array Processed associations with DB IDs\n */\n private function convertDealAssociations(array $opportunityAssociations): array\n {\n $associations = $this->initializeAssociationsStructure();\n\n if (empty($opportunityAssociations)) {\n return $associations;\n }\n\n $associationIds = $this->extractAssociationIds($opportunityAssociations);\n\n $this->processCompanyAssociations($associationIds, $associations);\n $this->processContactAssociations($associationIds, $associations);\n\n return $associations;\n }\n\n private function initializeAssociationsStructure(): array\n {\n return [\n 'companies' => [],\n 'contacts' => [],\n 'account_id' => null, // Primary account for opportunity\n ];\n }\n\n private function extractAssociationIds(array $opportunityAssociations): array\n {\n $associationIds = [];\n\n foreach ($opportunityAssociations as $type => $associationData) {\n if (! empty($associationData)) {\n $associationIds[$type] = $this->convertSingleDealAssociations($associationData);\n }\n }\n\n return $associationIds;\n }\n\n private function processCompanyAssociations(array $associationIds, array &$associations): void\n {\n if (empty($associationIds['companies'])) {\n return;\n }\n\n $companyId = $associationIds['companies'][0];\n $account = $this->findOrSyncAccount($companyId);\n\n if ($account instanceof Account) {\n $associations['companies'][$companyId] = $account->getId();\n $associations['account_id'] = $account->getId();\n }\n }\n\n private function processContactAssociations(array $associationIds, array &$associations): void\n {\n if (empty($associationIds['contacts'])) {\n return;\n }\n\n foreach ($associationIds['contacts'] as $contactId) {\n $contact = $this->findOrSyncContact($contactId);\n\n if ($contact instanceof Contact) {\n $associations['contacts'][$contactId] = $contact->getId();\n }\n }\n }\n\n private function findOrSyncAccount(string $companyId): ?Account\n {\n $account = $this->crmEntityRepository->findAccountByExternalId($this->config, $companyId);\n\n if (! $account instanceof Account) {\n $account = $this->syncAccount($companyId);\n }\n\n return $account;\n }\n\n private function findOrSyncContact(string $contactId): ?Contact\n {\n $contact = $this->crmEntityRepository->findContactByExternalId($this->config, $contactId);\n\n if (! $contact instanceof Contact) {\n $contact = $this->syncContact($contactId);\n }\n\n return $contact;\n }\n\n private function convertSingleDealAssociations($opportunityAssociations = null): array\n {\n $associationData = [];\n\n if ($opportunityAssociations === null) {\n return $associationData;\n }\n\n // Handle array input (from extractAssociationIds)\n if (is_array($opportunityAssociations)) {\n return $opportunityAssociations;\n }\n\n // Handle CollectionResponseAssociatedId object\n if ($opportunityAssociations instanceof CollectionResponseAssociatedId) {\n foreach ($opportunityAssociations->getResults() as $association) {\n $associationData[] = $association->getId();\n }\n }\n\n return $associationData;\n }\n\n private function importOrUpdateOpportunity($crmData, ?bool $exists = null): ?Opportunity\n {\n if (empty($crmData['properties'])) {\n return null;\n }\n\n $crmId = (string) $crmData['id'];\n $properties = $crmData['properties'];\n $associations = $crmData['associations'] ?? [];\n\n $opportunityExists = $exists ?? (bool) $this->crmEntityRepository->findOpportunityByExternalId(\n $this->config,\n $crmId\n );\n\n if ($opportunityExists) {\n return $this->updateOpportunity($crmId, $properties, $associations);\n } else {\n return $this->createOpportunity($crmId, $properties, $associations);\n }\n }\n\n /**\n * Create new opportunity\n */\n private function createOpportunity(string $crmId, array $properties, array $associations): ?Opportunity\n {\n $accountId = $this->resolveAccountId($associations);\n if (! $accountId) {\n return null;\n }\n\n $businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);\n if (! $businessProcess) {\n return null;\n }\n\n $stage = $this->resolveStage($businessProcess, $properties['dealstage'] ?? null);\n if (! $stage) {\n return null;\n }\n\n $data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);\n\n $attributes = [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $crmId,\n ];\n\n $values = array_merge($attributes, $data);\n\n $opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);\n\n $this->importExternalFieldData($properties, $opportunity->getId());\n $this->importOpportunityContacts($opportunity, $associations['contacts']);\n\n if ($opportunity->wasRecentlyCreated) {\n MatchActivitiesToNewOpportunity::dispatch($opportunity->getId());\n }\n\n return $opportunity;\n }\n\n /**\n * Update existing opportunity\n */\n private function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity\n {\n $accountId = $this->resolveAccountId($associations);\n $businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);\n $stage = $businessProcess ? $this->resolveStage($businessProcess, $properties['dealstage'] ?? null) : null;\n\n $data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);\n\n $attributes = [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $crmId,\n ];\n\n $values = array_merge($attributes, $data);\n $opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);\n\n $this->importExternalFieldData($properties, $opportunity->getId());\n $this->updateOpportunityAssociations($opportunity, $associations);\n\n return $opportunity;\n }\n\n private function resolveAccountId(array $associations): ?int\n {\n if (! empty($associations['accountId'])) {\n return $associations['accountId'];\n }\n\n if (empty($associations)) {\n return null;\n }\n\n // we can't resolve multiple account ids (currently SDK returns one company)\n foreach ($associations['companies'] as $accountId) {\n return $accountId;\n }\n\n return null;\n }\n\n private function buildOpportunityData(\n array $properties,\n ?int $accountId,\n ?BusinessProcess $businessProcess,\n ?Stage $stage\n ): array {\n $ownerId = null;\n $profile = null;\n if (! empty($properties['hubspot_owner_id'])) {\n $ownerId = $properties['hubspot_owner_id'];\n $profile = $this->crmEntityRepository->findProfileByExternalId($this->config, (string) $ownerId);\n }\n\n $name = 'Unknown';\n if (isset($properties['dealname'])) {\n $name = mb_strimwidth($properties['dealname'], 0, 128);\n }\n\n $amount = $this->resolveAmount($properties);\n $currency = $properties['deal_currency_code'] ?? null;\n\n $closeDate = null;\n if (! empty($properties['closedate'])) {\n $closeDate = Carbon::parse($properties['closedate'])->format('Y-m-d');\n }\n\n $remotelyCreatedAt = null;\n if (! empty($properties['createdate']) && strtotime($properties['createdate'])) {\n $date = $this->parseCleanDatetime($properties['createdate']);\n $remotelyCreatedAt = $date?->format('Y-m-d H:i:s');\n }\n\n $closedStages = $this->getClosedDealStages();\n $isWon = in_array($properties['dealstage'], $closedStages['won']);\n $isLost = in_array($properties['dealstage'], $closedStages['lost']);\n\n $data = [\n 'team_id' => $this->team->getId(),\n 'user_id' => $profile ? $profile->user_id : null,\n 'owner_id' => $ownerId,\n 'name' => $name,\n 'value' => ! empty($amount) ? $amount : null,\n 'currency_code' => CurrencyFormatter::formatCode($currency),\n 'close_date' => $closeDate,\n 'is_closed' => $isWon || $isLost,\n 'is_won' => $isWon,\n 'remotely_created_at' => $remotelyCreatedAt,\n 'probability' => $this->resolveDealProbability($properties['hs_deal_stage_probability']),\n 'forecast_category' => $this->resolveForecastCategory($properties['hs_manual_forecast_category']),\n ];\n\n if ($accountId) {\n $data['account_id'] = $accountId;\n }\n\n if ($stage) {\n $data['stage_id'] = $stage->id;\n }\n\n if ($businessProcess) {\n $recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);\n if ($recordType) {\n $data['record_type_id'] = $recordType->id;\n }\n }\n\n return $data;\n }\n\n private function resolveBusinessProcess(?string $pipelineId): ?BusinessProcess\n {\n if ($pipelineId === null) {\n return null;\n }\n\n if (isset($this->cachedBusinessProcesses[$pipelineId])) {\n return $this->cachedBusinessProcesses[$pipelineId];\n }\n\n $businessProcess = $this->getBusinessProcess($pipelineId);\n\n if (! $businessProcess instanceof BusinessProcess) {\n $this->importStages();\n $businessProcess = $this->getBusinessProcess($pipelineId);\n }\n\n if (! $businessProcess instanceof BusinessProcess) {\n $this->logger->info(\n '[HubSpot] Deal is not attached to a pipeline',\n [\n 'pipeline' => $pipelineId]\n );\n }\n\n $this->cachedBusinessProcesses[$pipelineId] = $businessProcess;\n\n return $businessProcess;\n }\n\n private function getBusinessProcess(string $pipelineId): ?BusinessProcess\n {\n return $this->crmEntityRepository->findBusinessProcessesByExternalId($this->config, $pipelineId);\n }\n\n private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage\n {\n if (empty($stageId)) {\n return null;\n }\n\n $cacheKey = $businessProcess->getId() . ':' . $stageId;\n if (isset($this->cachedStages[$cacheKey])) {\n return $this->cachedStages[$cacheKey];\n }\n\n $stage = $this->crmEntityRepository->getPipelineStageByConditions(\n $businessProcess,\n [\n 'crm_provider_id' => $stageId,\n 'type' => Stage::TYPE_OPPORTUNITY,\n ]\n );\n\n if ($stage === null) {\n $this->importStages(null, $stageId);\n }\n\n if ($stage === null) {\n $this->logger->info('[HubSpot] Stage does not exist => ' . $stageId);\n }\n\n $this->cachedStages[$cacheKey] = $stage;\n\n return $stage;\n }\n\n private function resolveAmount(array $properties): ?string\n {\n $amount = null;\n if (! empty($properties['amount'])) {\n $amount = str_replace(',', '', $properties['amount']);\n }\n\n if ($this->config->hasDefaultCurrencyFieldSet()) {\n $valueFieldName = $this->config->getDefaultCurrencyField()->getCrmProviderId();\n $amount = $properties[$valueFieldName] ?? $amount;\n }\n\n return $amount;\n }\n\n private function parseCleanDatetime(string $datetime): ?Carbon\n {\n // Treat pre-1980 values as invalid\n $minValidDate = Carbon::parse('1980-01-01 00:00:00');\n\n try {\n $date = Carbon::parse($datetime);\n\n if ($minValidDate->gt($date)) {\n return null;\n }\n\n return $date;\n } catch (Exception) {\n return null; // On parse error, treat as null\n }\n }\n\n private function resolveDealProbability(?string $stageProbability): int\n {\n if ($stageProbability === null) {\n return 0;\n }\n\n $probability = (float) $stageProbability;\n\n return $probability > 1 ? 0 : (int) ($probability * 100);\n }\n\n private function resolveForecastCategory(?string $forecastCategory): string\n {\n if (! $forecastCategory) {\n return Forecast::FORECAST_CATEGORY_UNCATEGORIZED;\n }\n\n $forecastCategory = str_replace('_', ' ', $forecastCategory);\n\n return ucwords(strtolower($forecastCategory));\n }\n\n private function importExternalFieldData(array $properties, int $opportunityId): void\n {\n $crmFields = $this->getOpportunitySyncableFields();\n $this->importOpportunityCrmFieldData($properties, $crmFields, $opportunityId);\n }\n\n private function importOpportunityContacts(Opportunity $opportunity, array $associations): void\n {\n // Handle empty or missing contact associations\n if (empty($associations)) {\n // Remove all existing contact associations if none provided\n $this->removeAllOpportunityContacts($opportunity);\n\n return;\n }\n\n // Use differential sync approach for better performance and accuracy\n $this->syncOpportunityContactsDifferential($opportunity, $associations);\n }\n\n /**\n * Sync opportunity contacts using differential approach\n * This compares current vs new associations and only makes necessary changes\n */\n private function syncOpportunityContactsDifferential(Opportunity $opportunity, array $contactAssociations): void\n {\n $currentContactCrmIds = $this->getCurrentContactCrmIds($opportunity);\n $contactAssociationIds = array_keys($contactAssociations);\n\n $contactsToAdd = array_diff($contactAssociationIds, $currentContactCrmIds);\n $contactsToRemove = array_diff($currentContactCrmIds, $contactAssociationIds);\n\n if (empty($contactsToAdd) && empty($contactsToRemove)) {\n return;\n }\n\n $this->logContactAssociationChanges($opportunity, $currentContactCrmIds, $contactAssociations, $contactsToAdd, $contactsToRemove);\n\n $this->removeContactAssociations($opportunity, $contactsToRemove);\n $this->addContactAssociations($opportunity, $contactsToAdd, $contactAssociations);\n }\n\n private function getCurrentContactCrmIds(Opportunity $opportunity): array\n {\n return $opportunity->contacts()\n ->pluck('contacts.crm_provider_id')\n ->toArray();\n }\n\n private function logContactAssociationChanges(\n Opportunity $opportunity,\n array $currentContactCrmIds,\n array $contactAssociations,\n array $contactsToAdd,\n array $contactsToRemove\n ): void {\n $this->logger->info('[' . $this->getDisplayName() . '] Contact association changes', [\n 'opportunity_id' => $opportunity->getId(),\n 'current_contacts' => $currentContactCrmIds,\n 'new_contacts' => $contactAssociations,\n 'contacts_to_add' => $contactsToAdd,\n 'contacts_to_remove' => $contactsToRemove,\n ]);\n }\n\n private function removeContactAssociations(Opportunity $opportunity, array $contactsToRemove): void\n {\n if (empty($contactsToRemove)) {\n return;\n }\n\n $contactsToDetach = $opportunity->contacts()\n ->whereIn('contacts.crm_provider_id', $contactsToRemove)\n ->pluck('contacts.id')\n ->toArray();\n\n if (! empty($contactsToDetach)) {\n $opportunity->contacts()->detach($contactsToDetach);\n\n $this->logger->info('[' . $this->getDisplayName() . '] Removed contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'removed_contact_crm_ids' => $contactsToRemove,\n 'removed_contact_count' => count($contactsToDetach),\n ]);\n }\n }\n\n private function addContactAssociations(Opportunity $opportunity, array $contactsToAdd, array $contactAssociations): void\n {\n if (empty($contactsToAdd)) {\n return;\n }\n\n $contactsAdded = [];\n foreach ($contactsToAdd as $crmId) {\n $id = $contactAssociations[$crmId];\n\n if ($this->attachSingleContact($opportunity, (string) $crmId, $id)) {\n $contactsAdded[] = $crmId;\n }\n }\n\n $this->logAddedContacts($opportunity, $contactsAdded);\n }\n\n private function attachSingleContact(Opportunity $opportunity, string $crmId, int $id): bool\n {\n try {\n $contact = $this->crmEntityRepository->findContactByConfigurationAndId($this->config, $id);\n\n if (! $contact) {\n return false;\n }\n\n return $this->performContactAttachment($opportunity, $contact, $crmId);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to add contact association', [\n 'opportunity_id' => $opportunity->getId(),\n 'contact_crm_id' => $crmId,\n 'error' => $e->getMessage(),\n ]);\n\n return false;\n }\n }\n\n private function performContactAttachment(Opportunity $opportunity, Contact $contact, string $crmId): bool\n {\n try {\n $opportunity->contacts()->attach($contact->getId(), [\n 'crm_provider_id' => $crmId,\n ]);\n\n return true;\n } catch (\\Illuminate\\Database\\QueryException $e) {\n if (str_contains($e->getMessage(), 'Duplicate entry')) {\n $this->logger->info('[' . $this->getDisplayName() . '] Contact association already exists', [\n 'contact_id' => $contact->getId(),\n 'contact_crm_id' => $crmId,\n 'opportunity_id' => $opportunity->getId(),\n ]);\n\n return false;\n }\n\n throw $e;\n }\n }\n\n private function logAddedContacts(Opportunity $opportunity, array $contactsAdded): void\n {\n if (! empty($contactsAdded)) {\n $this->logger->info('[' . $this->getDisplayName() . '] Added contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'contacts_to_add_count' => count($contactsAdded),\n 'added_contact_crm_ids' => $contactsAdded,\n 'added_contacts_count' => count($contactsAdded),\n ]);\n }\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits;\n\nuse Carbon\\Carbon;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\CollectionResponseAssociatedId;\nuse Jiminny\\Exceptions\\InvalidArgumentException;\nuse Jiminny\\Models\\Account;\nuse Exception;\nuse Jiminny\\Component\\DealInsights\\Forecast\\Forecast;\nuse Jiminny\\Jobs\\Crm\\MatchActivitiesToNewOpportunity;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\BusinessProcess;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Models\\Opportunity;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\CrmEntityRepository;\nuse Jiminny\\Services\\Crm\\Hubspot\\DealFieldsService;\nuse Jiminny\\Services\\Crm\\Hubspot\\OpportunitySyncStrategy\\HubspotSingleSyncStrategy;\nuse Jiminny\\Services\\Crm\\Hubspot\\WebhookSyncBatchProcessor;\nuse Jiminny\\Services\\Crm\\OpportunitySyncStrategyResolver;\nuse Jiminny\\Utils\\CurrencyFormatter;\n\n/**\n * Optimized sync methods for better performance\n * These methods can be integrated into SyncCrmEntitiesTrait for significant performance gains\n */\ntrait OpportunitySyncTrait\n{\n private const int BATCH_SIZE = 100;\n private const int BATCH_PROCESS_SIZE = 800;\n\n protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;\n protected CrmEntityRepository $crmEntityRepository;\n protected DealFieldsService $dealFieldsService;\n\n private ?array $cachedClosedDealStages = null;\n private array $cachedBusinessProcesses = [];\n private array $cachedStages = [];\n\n public function syncOpportunities(array $parameters, ?string $strategy = null): int\n {\n $strategies = $this->opportunitySyncStrategyResolver->getStrategies($this->config, $strategy);\n $parameters['config'] = $this->config;\n $syncCount = 0;\n $reportedTotal = 0;\n $lastSyncedId = [];\n\n try {\n foreach ($strategies as $strategyName => $syncStrategy) {\n $this->logger->info(\n '[' . $this->getDisplayName() . '] Syncing opportunities using strategy: ' .\n $strategyName\n );\n\n $total = 0;\n $lastId = null;\n $buffer = [];\n\n // HubspotWebhookBatchSyncStrategy returns empty generator, this is for other strategies\n foreach ($syncStrategy->fetchOpportunities($parameters, $total, $lastId) as $hsOpportunity) {\n $buffer[] = $hsOpportunity;\n\n // process every 800 rows (fits < 1 000 association limit)\n if (\\count($buffer) >= self::BATCH_PROCESS_SIZE) {\n $syncCount += $this->processOpportunityBatch($buffer);\n $buffer = [];\n }\n }\n\n // leftovers\n if ($buffer) {\n $syncCount += $this->processOpportunityBatch($buffer);\n }\n\n $reportedTotal += $total;\n $lastSyncedId = $lastId;\n }\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException | CrmException $e) {\n $this->handleSyncException($e, $parameters);\n }\n\n $this->logger->info(\n '[HubSpot] Synced opportunities',\n [\n 'team' => $this->team->getId(),\n 'sync_count' => $syncCount,\n 'total' => $reportedTotal,\n 'last_synced_id' => $lastSyncedId,\n ]\n );\n\n return $reportedTotal;\n }\n\n private function handleSyncException(\\Throwable $e, array $parameters): void\n {\n if (($parameters['since'] ?? null) instanceof Carbon) {\n $parameters['since'] = $parameters['since']->toDateTimeString();\n }\n $parameters['config'] = $this->config->getId();\n\n $this->logger->warning('[' . $this->getDisplayName() . '] Sync opportunities failed', [\n 'teamId' => $this->team->getUuid(),\n 'parameters' => $parameters,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n /**\n * @inheritdoc\n */\n public function syncOpportunity(string $crmId): ?Opportunity\n {\n $strategy = $this->opportunitySyncStrategyResolver->resolve(\n $this->config,\n OpportunitySyncStrategyResolver::SINGLE_SYNC_OPPORTUNITY_STRATEGY,\n );\n\n $parameters = [\n 'config' => $this->config,\n 'crm_id' => $crmId,\n ];\n\n try {\n if (! $strategy instanceof HubspotSingleSyncStrategy) {\n throw new InvalidArgumentException('Strategy must by HubspotSingleSyncStrategy');\n }\n\n $hsOpportunity = $strategy->fetchOpportunity($parameters);\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException $e) {\n $this->logger->info('[' . $this->getDisplayName() . '] Opportunity not found', [\n 'teamId' => $this->team->getUuid(),\n 'crmId' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n return null;\n }\n\n $hsOpportunity['associations'] = $this->convertDealAssociations($hsOpportunity['associations'] ?? []);\n\n return $this->importOrUpdateOpportunity($hsOpportunity);\n }\n\n /**\n * Process webhook-collected opportunity batches.\n *\n * Drains Redis sets containing company CRM IDs collected from webhook events\n * and dispatches ImportOpportunityBatch jobs for batch processing.\n *\n * @return int Number of opportunity IDs dispatched to jobs\n */\n public function batchSyncOpportunities(): int\n {\n $configId = $this->team->getCrmConfiguration()->getId();\n\n return $this->batchProcessor->processBatchesForObjectType(\n WebhookSyncBatchProcessor::OBJECT_TYPE_DEAL,\n $configId\n );\n }\n\n /**\n * Import a batch of opportunities by their CRM IDs.\n * Fetches opportunity data from HubSpot API and delegates to importOpportunityBatch().\n *\n * @param array<string> $crmIds HubSpot deal CRM IDs\n *\n * @return array{success: array, failed_ids: array, errors?: array<string, string>}\n */\n public function importOpportunityBatchByIds(array $crmIds): array\n {\n $fields = $this->dealFieldsService->getFieldsForConfiguration($this->config);\n\n $allDeals = [];\n foreach (array_chunk($crmIds, self::BATCH_SIZE) as $chunk) {\n $deals = $this->client->getOpportunitiesByIds($chunk, $fields);\n foreach ($deals as $deal) {\n $allDeals[] = $deal;\n }\n }\n\n // IDs not returned by HubSpot are likely deleted or inaccessible deals.\n // These are not failures — retrying won't bring them back.\n $fetchedIds = array_map('strval', array_column($allDeals, 'id'));\n $notFoundIds = array_values(array_diff(array_map('strval', $crmIds), $fetchedIds));\n\n if (! empty($notFoundIds)) {\n $this->logger->info('[' . $this->getDisplayName() . '] CRM IDs not found in HubSpot (likely deleted)', [\n 'teamId' => $this->team->getId(),\n 'notFoundCount' => \\count($notFoundIds),\n 'notFoundIds' => $notFoundIds,\n 'requestedCount' => \\count($crmIds),\n 'fetchedCount' => \\count($allDeals),\n ]);\n }\n\n if (empty($allDeals)) {\n return ['success' => [], 'failed_ids' => []];\n }\n\n return $this->importOpportunityBatch($allDeals);\n }\n\n private function getClosedDealStages(): array\n {\n if ($this->cachedClosedDealStages !== null) {\n return $this->cachedClosedDealStages;\n }\n\n $stages = $this->crmEntityRepository->getOpportunityClosedStages($this->config);\n $data = [\n 'lost' => [],\n 'won' => [],\n ];\n\n foreach ($stages as $stage) {\n if ($stage->probability == 0.00) {\n $data['lost'][] = $stage->crm_provider_id;\n }\n if ($stage->probability == 100.00) {\n $data['won'][] = $stage->crm_provider_id;\n }\n }\n\n $this->cachedClosedDealStages = $data;\n\n return $data;\n }\n\n /**\n * Import deals into the database with pre-fetched associations.\n *\n * API calls here (getAssociationsData, getExistingOpportunityCrmIds) are NOT\n * caught — if they throw, the exception propagates to ImportOpportunityBatch::handle()\n * where Laravel retries the whole job with backoff. After all retries exhausted,\n * failed() requeues all IDs to Redis.\n *\n * The per-deal loop catches exceptions individually. A deal can end up in three states:\n * - success: imported/updated successfully\n * - failed_ids: exception thrown (DB constraint violation, corrupt data, etc.)\n * These are permanent issues — retrying won't fix them.\n * - skipped (null): missing dependencies (no account, unknown pipeline/stage).\n * This is acceptable — the deal cannot be imported until those exist.\n */\n private function importOpportunityBatch(array $deals): array\n {\n $syncedOpportunities = [\n 'success' => [],\n 'failed_ids' => [],\n ];\n $dealIds = array_column($deals, 'id');\n\n // Shared association/existing-ID preparation is batch-level state. If it fails, rethrow so the\n // queue job retries the whole batch and eventually requeues all deal IDs back to Redis.\n try {\n $companyAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'companies');\n $contactAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'contacts');\n\n $associationsData = $this->prepareAssociatedEntities($companyAssociations, $contactAssociations);\n\n $existingCrmIds = $this->crmEntityRepository->getExistingOpportunityCrmIds(\n $this->config,\n array_map('strval', $dealIds)\n );\n $existingCrmIdSet = array_flip($existingCrmIds);\n } catch (\\Throwable $e) {\n $this->logger->error('[' . $this->getDisplayName() . '] Failed to fetch associations or existing IDs', [\n 'teamId' => $this->team->getId(),\n 'dealCount' => count($dealIds),\n 'error' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n foreach ($deals as $deal) {\n try {\n $deal['associations'] = $this->prepareAssociationsForOpportunity(\n $deal['id'],\n $companyAssociations,\n $contactAssociations,\n $associationsData\n );\n\n $syncedOpportunity = $this->importOrUpdateOpportunity(\n $deal,\n isset($existingCrmIdSet[(string) $deal['id']])\n );\n if ($syncedOpportunity) {\n $syncedOpportunities['success'][] = $syncedOpportunity;\n }\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to import opportunity', [\n 'teamId' => $this->team->getId(),\n 'crmId' => $deal['id'],\n 'error' => $e->getMessage(),\n ]);\n $syncedOpportunities['failed_ids'][] = $deal['id'];\n $syncedOpportunities['errors'][$deal['id']] = $e->getMessage();\n }\n }\n\n return $syncedOpportunities;\n }\n\n /**\n * Prepare associated entities for opportunities with optimized batch processing\n * Returns structured data with CRM ID to DB ID mappings for each opportunity\n */\n private function prepareAssociatedEntities(array $companyAssociations, array $contactAssociations): array\n {\n // Step 1: Collect all unique company and contact IDs from associations\n $allCompanyIds = $this->flattenAssociationIds($companyAssociations);\n $allContactIds = $this->flattenAssociationIds($contactAssociations);\n\n // Step 2: Batch sync missing entities and get CRM ID to DB ID mappings\n $companyIdMappings = [];\n $contactIdMappings = [];\n\n if (! empty($allCompanyIds)) {\n $companyIdMappings = $this->prepareAssociatedAccounts($allCompanyIds);\n }\n\n if (! empty($allContactIds)) {\n $contactIdMappings = $this->prepareAssociatedContacts($allContactIds);\n }\n\n return [\n 'company_id_mappings' => $companyIdMappings,\n 'contact_id_mappings' => $contactIdMappings,\n ];\n }\n\n /**\n * Flatten association data to get unique IDs\n */\n private function flattenAssociationIds(array $associations): array\n {\n $ids = [];\n foreach ($associations as $dealAssociations) {\n if (is_array($dealAssociations)) {\n foreach ($dealAssociations as $id) {\n $ids[$id] = true;\n }\n }\n }\n\n return array_keys($ids);\n }\n\n /**\n * Batch sync missing accounts\n */\n private function prepareAssociatedAccounts(array $companyIds): array\n {\n // Find which accounts already exist\n $existingAccounts = $this->crmEntityRepository\n ->findAccountsByExternalIds($this->config, $companyIds);\n\n $existingCompanyIds = $existingAccounts->pluck('crm_provider_id')->toArray();\n\n $existingAccountsData = $existingAccounts->mapWithKeys(function ($account) {\n return [$account->getCrmProviderId() => $account->getId()];\n })->toArray();\n\n $missingCompanyIds = array_diff($companyIds, $existingCompanyIds);\n\n if (empty($missingCompanyIds)) {\n return $existingAccountsData;\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing accounts', [\n 'teamId' => $this->team->getUuid(),\n 'total_companies' => count($companyIds),\n 'existing_companies' => count($existingCompanyIds),\n 'missing_companies' => count($missingCompanyIds),\n ]);\n\n // we already have limit on opportunity ids count\n // Initialize variable before try block\n $syncedAccountsData = [];\n\n try {\n $syncedAccountsData = $this->batchSyncCrmObjects('companies', $missingCompanyIds);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing accounts', [\n 'size' => count($missingCompanyIds),\n 'error' => $e->getMessage(),\n ]);\n $syncedAccountsData = [];\n }\n\n return $existingAccountsData + $syncedAccountsData;\n }\n\n /**\n * Prepare associated contacts - find existing and sync missing ones\n * Returns mapping of CRM ID to DB ID\n */\n private function prepareAssociatedContacts(array $contactIds): array\n {\n // Find which contacts already exist\n $existingContacts = $this->crmEntityRepository\n ->findContactsByExternalIds($this->config, $contactIds);\n\n $existingContactIds = $existingContacts->pluck('crm_provider_id')->toArray();\n\n // Create mapping for existing contacts\n $existingContactsData = $existingContacts->mapWithKeys(function ($contact) {\n return [$contact->getCrmProviderId() => $contact->getId()];\n })->toArray();\n\n $missingContactIds = array_diff($contactIds, $existingContactIds);\n\n if (empty($missingContactIds)) {\n return $existingContactsData;\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing contacts', [\n 'teamId' => $this->team->getUuid(),\n 'total_contacts' => count($contactIds),\n 'existing_contacts' => count($existingContactIds),\n 'missing_contacts' => count($missingContactIds),\n ]);\n\n // Sync missing contacts using batch API\n try {\n $syncedContactsData = $this->batchSyncCrmObjects('contacts', $missingContactIds);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing contacts', [\n 'size' => count($missingContactIds),\n 'error' => $e->getMessage(),\n ]);\n $syncedContactsData = [];\n }\n\n return $existingContactsData + $syncedContactsData;\n }\n\n private function batchSyncCrmObjects(string $objectType, array $crmIds): array\n {\n $syncObjects = [];\n $crmObjectIds = array_values($crmIds);\n\n foreach (array_chunk($crmObjectIds, self::BATCH_SIZE) as $chunk) {\n try {\n $objects = $objectType === 'companies' ?\n $this->client->getCompaniesByIds($chunk, $this->getCompanyFields()) :\n $this->client->getContactsByIds($chunk, $this->getContactFields());\n\n foreach ($objects as $objectId => $objectData) {\n $this->importCrmObject($objectType, (string) $objectId, $objectData, $syncObjects);\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch synced ' . $objectType, [\n 'requested_count' => count($chunk),\n 'synced_count' => count($objects),\n ]);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Batch ' . $objectType . ' sync failed', [\n 'ids' => $chunk,\n 'error' => $e->getMessage(),\n ]);\n }\n }\n\n return $syncObjects;\n }\n\n private function importCrmObject(string $objectType, string $objectId, mixed $objectData, array &$syncObjects): void\n {\n try {\n $object = $objectType === 'companies' ?\n $this->importAccount($objectData) :\n $this->importContact($objectData);\n\n if ($object) {\n $syncObjects[$object->getCrmProviderId()] = $object->getId();\n }\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to import batch ' . $objectType, [\n 'id' => $objectId,\n 'error' => $e->getMessage(),\n ]);\n }\n }\n\n /**\n * Prepare associations for a single opportunity\n *\n * The return value is an array with the following structure:\n * [\n * 'companies' => [\n * $companyCrmId => $companyId,\n * ...\n * ],\n * 'contacts' => [\n * $contactCrmId => $contactId,\n * ...\n * ],\n * 'account_id' => $accountId,\n * ]\n */\n private function prepareAssociationsForOpportunity(\n string $oppCrmId,\n array $companyAssociations,\n array $contactAssociations,\n array $associationsData\n ): array {\n $associations = [\n 'companies' => [],\n 'contacts' => [],\n 'account_id' => null, // Primary account for opportunity\n ];\n\n $oppCompanyIds = $companyAssociations[$oppCrmId] ?? [];\n foreach ($oppCompanyIds as $companyCrmId) {\n if (isset($associationsData['company_id_mappings'][$companyCrmId])) {\n $associations['companies'][$companyCrmId] = $associationsData['company_id_mappings'][$companyCrmId];\n\n // Set primary account (first company becomes primary account)\n if ($associations['account_id'] === null) {\n $associations['account_id'] = $associationsData['company_id_mappings'][$companyCrmId];\n }\n }\n }\n\n $oppContactIds = $contactAssociations[$oppCrmId] ?? [];\n foreach ($oppContactIds as $contactCrmId) {\n if (isset($associationsData['contact_id_mappings'][$contactCrmId])) {\n $associations['contacts'][$contactCrmId] = $associationsData['contact_id_mappings'][$contactCrmId];\n }\n }\n\n return $associations;\n }\n\n /**\n * Update only associations for an opportunity\n */\n private function updateOpportunityAssociations(Opportunity $opportunity, array $associations): void\n {\n // Update contact associations\n $this->importOpportunityContacts($opportunity, $associations['contacts']);\n\n // Update company (account) associations\n $this->updateOpportunityAccount($opportunity, $associations['account_id']);\n }\n\n /**\n * Remove all contact associations from an opportunity\n */\n private function removeAllOpportunityContacts(Opportunity $opportunity): void\n {\n $currentCount = (int) $opportunity->contacts()->count();\n\n if ($currentCount > 0) {\n $opportunity->contacts()->detach();\n\n $this->logger->info('[' . $this->getDisplayName() . '] Removed all contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'removed_count' => $currentCount,\n ]);\n }\n }\n\n private function updateOpportunityAccount(Opportunity $opportunity, ?int $accountId): void\n {\n if ($accountId === null) {\n // No account ID provided - keep current account\n return;\n }\n\n $currentAccountId = $opportunity->getAccountId();\n\n // Only update if account has changed\n if ($currentAccountId !== $accountId) {\n $opportunity->account_id = $accountId;\n $opportunity->save();\n\n $this->logger->info('[' . $this->getDisplayName() . '] Updated opportunity account association', [\n 'opportunity_id' => $opportunity->getId(),\n 'old_account_id' => $currentAccountId,\n 'new_account_id' => $accountId,\n ]);\n }\n }\n\n /**\n * Find existing opportunities by external IDs (OPTIMIZED VERSION)\n * Uses batch query for better performance\n */\n private function findExistingOpportunities(array $crmIds): Collection\n {\n return $this->crmEntityRepository\n ->findOpportunitiesByExternalIds($this->config, $crmIds);\n }\n\n private function processOpportunityBatch(array $opportunities): int\n {\n $syncedOpportunities = $this->importOpportunityBatch($opportunities);\n\n return count($syncedOpportunities['success'] ?? []);\n }\n\n /**\n * Convert single deal associations from HubSpot format to internal format\n * Handles both HubSpot SDK objects and array formats\n *\n * @param array $opportunityAssociations Raw associations from HubSpot API or pre-processed\n *\n * @return array Processed associations with DB IDs\n */\n private function convertDealAssociations(array $opportunityAssociations): array\n {\n $associations = $this->initializeAssociationsStructure();\n\n if (empty($opportunityAssociations)) {\n return $associations;\n }\n\n $associationIds = $this->extractAssociationIds($opportunityAssociations);\n\n $this->processCompanyAssociations($associationIds, $associations);\n $this->processContactAssociations($associationIds, $associations);\n\n return $associations;\n }\n\n private function initializeAssociationsStructure(): array\n {\n return [\n 'companies' => [],\n 'contacts' => [],\n 'account_id' => null, // Primary account for opportunity\n ];\n }\n\n private function extractAssociationIds(array $opportunityAssociations): array\n {\n $associationIds = [];\n\n foreach ($opportunityAssociations as $type => $associationData) {\n if (! empty($associationData)) {\n $associationIds[$type] = $this->convertSingleDealAssociations($associationData);\n }\n }\n\n return $associationIds;\n }\n\n private function processCompanyAssociations(array $associationIds, array &$associations): void\n {\n if (empty($associationIds['companies'])) {\n return;\n }\n\n $companyId = $associationIds['companies'][0];\n $account = $this->findOrSyncAccount($companyId);\n\n if ($account instanceof Account) {\n $associations['companies'][$companyId] = $account->getId();\n $associations['account_id'] = $account->getId();\n }\n }\n\n private function processContactAssociations(array $associationIds, array &$associations): void\n {\n if (empty($associationIds['contacts'])) {\n return;\n }\n\n foreach ($associationIds['contacts'] as $contactId) {\n $contact = $this->findOrSyncContact($contactId);\n\n if ($contact instanceof Contact) {\n $associations['contacts'][$contactId] = $contact->getId();\n }\n }\n }\n\n private function findOrSyncAccount(string $companyId): ?Account\n {\n $account = $this->crmEntityRepository->findAccountByExternalId($this->config, $companyId);\n\n if (! $account instanceof Account) {\n $account = $this->syncAccount($companyId);\n }\n\n return $account;\n }\n\n private function findOrSyncContact(string $contactId): ?Contact\n {\n $contact = $this->crmEntityRepository->findContactByExternalId($this->config, $contactId);\n\n if (! $contact instanceof Contact) {\n $contact = $this->syncContact($contactId);\n }\n\n return $contact;\n }\n\n private function convertSingleDealAssociations($opportunityAssociations = null): array\n {\n $associationData = [];\n\n if ($opportunityAssociations === null) {\n return $associationData;\n }\n\n // Handle array input (from extractAssociationIds)\n if (is_array($opportunityAssociations)) {\n return $opportunityAssociations;\n }\n\n // Handle CollectionResponseAssociatedId object\n if ($opportunityAssociations instanceof CollectionResponseAssociatedId) {\n foreach ($opportunityAssociations->getResults() as $association) {\n $associationData[] = $association->getId();\n }\n }\n\n return $associationData;\n }\n\n private function importOrUpdateOpportunity($crmData, ?bool $exists = null): ?Opportunity\n {\n if (empty($crmData['properties'])) {\n return null;\n }\n\n $crmId = (string) $crmData['id'];\n $properties = $crmData['properties'];\n $associations = $crmData['associations'] ?? [];\n\n $opportunityExists = $exists ?? (bool) $this->crmEntityRepository->findOpportunityByExternalId(\n $this->config,\n $crmId\n );\n\n if ($opportunityExists) {\n return $this->updateOpportunity($crmId, $properties, $associations);\n } else {\n return $this->createOpportunity($crmId, $properties, $associations);\n }\n }\n\n /**\n * Create new opportunity\n */\n private function createOpportunity(string $crmId, array $properties, array $associations): ?Opportunity\n {\n $accountId = $this->resolveAccountId($associations);\n if (! $accountId) {\n return null;\n }\n\n $businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);\n if (! $businessProcess) {\n return null;\n }\n\n $stage = $this->resolveStage($businessProcess, $properties['dealstage'] ?? null);\n if (! $stage) {\n return null;\n }\n\n $data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);\n\n $attributes = [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $crmId,\n ];\n\n $values = array_merge($attributes, $data);\n\n $opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);\n\n $this->importExternalFieldData($properties, $opportunity->getId());\n $this->importOpportunityContacts($opportunity, $associations['contacts']);\n\n if ($opportunity->wasRecentlyCreated) {\n MatchActivitiesToNewOpportunity::dispatch($opportunity->getId());\n }\n\n return $opportunity;\n }\n\n /**\n * Update existing opportunity\n */\n private function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity\n {\n $accountId = $this->resolveAccountId($associations);\n $businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);\n $stage = $businessProcess ? $this->resolveStage($businessProcess, $properties['dealstage'] ?? null) : null;\n\n $data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);\n\n $attributes = [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $crmId,\n ];\n\n $values = array_merge($attributes, $data);\n $opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);\n\n $this->importExternalFieldData($properties, $opportunity->getId());\n $this->updateOpportunityAssociations($opportunity, $associations);\n\n return $opportunity;\n }\n\n private function resolveAccountId(array $associations): ?int\n {\n if (! empty($associations['accountId'])) {\n return $associations['accountId'];\n }\n\n if (empty($associations)) {\n return null;\n }\n\n // we can't resolve multiple account ids (currently SDK returns one company)\n foreach ($associations['companies'] as $accountId) {\n return $accountId;\n }\n\n return null;\n }\n\n private function buildOpportunityData(\n array $properties,\n ?int $accountId,\n ?BusinessProcess $businessProcess,\n ?Stage $stage\n ): array {\n $ownerId = null;\n $profile = null;\n if (! empty($properties['hubspot_owner_id'])) {\n $ownerId = $properties['hubspot_owner_id'];\n $profile = $this->crmEntityRepository->findProfileByExternalId($this->config, (string) $ownerId);\n }\n\n $name = 'Unknown';\n if (isset($properties['dealname'])) {\n $name = mb_strimwidth($properties['dealname'], 0, 128);\n }\n\n $amount = $this->resolveAmount($properties);\n $currency = $properties['deal_currency_code'] ?? null;\n\n $closeDate = null;\n if (! empty($properties['closedate'])) {\n $closeDate = Carbon::parse($properties['closedate'])->format('Y-m-d');\n }\n\n $remotelyCreatedAt = null;\n if (! empty($properties['createdate']) && strtotime($properties['createdate'])) {\n $date = $this->parseCleanDatetime($properties['createdate']);\n $remotelyCreatedAt = $date?->format('Y-m-d H:i:s');\n }\n\n $closedStages = $this->getClosedDealStages();\n $isWon = in_array($properties['dealstage'], $closedStages['won']);\n $isLost = in_array($properties['dealstage'], $closedStages['lost']);\n\n $data = [\n 'team_id' => $this->team->getId(),\n 'user_id' => $profile ? $profile->user_id : null,\n 'owner_id' => $ownerId,\n 'name' => $name,\n 'value' => ! empty($amount) ? $amount : null,\n 'currency_code' => CurrencyFormatter::formatCode($currency),\n 'close_date' => $closeDate,\n 'is_closed' => $isWon || $isLost,\n 'is_won' => $isWon,\n 'remotely_created_at' => $remotelyCreatedAt,\n 'probability' => $this->resolveDealProbability($properties['hs_deal_stage_probability']),\n 'forecast_category' => $this->resolveForecastCategory($properties['hs_manual_forecast_category']),\n ];\n\n if ($accountId) {\n $data['account_id'] = $accountId;\n }\n\n if ($stage) {\n $data['stage_id'] = $stage->id;\n }\n\n if ($businessProcess) {\n $recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);\n if ($recordType) {\n $data['record_type_id'] = $recordType->id;\n }\n }\n\n return $data;\n }\n\n private function resolveBusinessProcess(?string $pipelineId): ?BusinessProcess\n {\n if ($pipelineId === null) {\n return null;\n }\n\n if (isset($this->cachedBusinessProcesses[$pipelineId])) {\n return $this->cachedBusinessProcesses[$pipelineId];\n }\n\n $businessProcess = $this->getBusinessProcess($pipelineId);\n\n if (! $businessProcess instanceof BusinessProcess) {\n $this->importStages();\n $businessProcess = $this->getBusinessProcess($pipelineId);\n }\n\n if (! $businessProcess instanceof BusinessProcess) {\n $this->logger->info(\n '[HubSpot] Deal is not attached to a pipeline',\n [\n 'pipeline' => $pipelineId]\n );\n }\n\n $this->cachedBusinessProcesses[$pipelineId] = $businessProcess;\n\n return $businessProcess;\n }\n\n private function getBusinessProcess(string $pipelineId): ?BusinessProcess\n {\n return $this->crmEntityRepository->findBusinessProcessesByExternalId($this->config, $pipelineId);\n }\n\n private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage\n {\n if (empty($stageId)) {\n return null;\n }\n\n $cacheKey = $businessProcess->getId() . ':' . $stageId;\n if (isset($this->cachedStages[$cacheKey])) {\n return $this->cachedStages[$cacheKey];\n }\n\n $stage = $this->crmEntityRepository->getPipelineStageByConditions(\n $businessProcess,\n [\n 'crm_provider_id' => $stageId,\n 'type' => Stage::TYPE_OPPORTUNITY,\n ]\n );\n\n if ($stage === null) {\n $this->importStages(null, $stageId);\n }\n\n if ($stage === null) {\n $this->logger->info('[HubSpot] Stage does not exist => ' . $stageId);\n }\n\n $this->cachedStages[$cacheKey] = $stage;\n\n return $stage;\n }\n\n private function resolveAmount(array $properties): ?string\n {\n $amount = null;\n if (! empty($properties['amount'])) {\n $amount = str_replace(',', '', $properties['amount']);\n }\n\n if ($this->config->hasDefaultCurrencyFieldSet()) {\n $valueFieldName = $this->config->getDefaultCurrencyField()->getCrmProviderId();\n $amount = $properties[$valueFieldName] ?? $amount;\n }\n\n return $amount;\n }\n\n private function parseCleanDatetime(string $datetime): ?Carbon\n {\n // Treat pre-1980 values as invalid\n $minValidDate = Carbon::parse('1980-01-01 00:00:00');\n\n try {\n $date = Carbon::parse($datetime);\n\n if ($minValidDate->gt($date)) {\n return null;\n }\n\n return $date;\n } catch (Exception) {\n return null; // On parse error, treat as null\n }\n }\n\n private function resolveDealProbability(?string $stageProbability): int\n {\n if ($stageProbability === null) {\n return 0;\n }\n\n $probability = (float) $stageProbability;\n\n return $probability > 1 ? 0 : (int) ($probability * 100);\n }\n\n private function resolveForecastCategory(?string $forecastCategory): string\n {\n if (! $forecastCategory) {\n return Forecast::FORECAST_CATEGORY_UNCATEGORIZED;\n }\n\n $forecastCategory = str_replace('_', ' ', $forecastCategory);\n\n return ucwords(strtolower($forecastCategory));\n }\n\n private function importExternalFieldData(array $properties, int $opportunityId): void\n {\n $crmFields = $this->getOpportunitySyncableFields();\n $this->importOpportunityCrmFieldData($properties, $crmFields, $opportunityId);\n }\n\n private function importOpportunityContacts(Opportunity $opportunity, array $associations): void\n {\n // Handle empty or missing contact associations\n if (empty($associations)) {\n // Remove all existing contact associations if none provided\n $this->removeAllOpportunityContacts($opportunity);\n\n return;\n }\n\n // Use differential sync approach for better performance and accuracy\n $this->syncOpportunityContactsDifferential($opportunity, $associations);\n }\n\n /**\n * Sync opportunity contacts using differential approach\n * This compares current vs new associations and only makes necessary changes\n */\n private function syncOpportunityContactsDifferential(Opportunity $opportunity, array $contactAssociations): void\n {\n $currentContactCrmIds = $this->getCurrentContactCrmIds($opportunity);\n $contactAssociationIds = array_keys($contactAssociations);\n\n $contactsToAdd = array_diff($contactAssociationIds, $currentContactCrmIds);\n $contactsToRemove = array_diff($currentContactCrmIds, $contactAssociationIds);\n\n if (empty($contactsToAdd) && empty($contactsToRemove)) {\n return;\n }\n\n $this->logContactAssociationChanges($opportunity, $currentContactCrmIds, $contactAssociations, $contactsToAdd, $contactsToRemove);\n\n $this->removeContactAssociations($opportunity, $contactsToRemove);\n $this->addContactAssociations($opportunity, $contactsToAdd, $contactAssociations);\n }\n\n private function getCurrentContactCrmIds(Opportunity $opportunity): array\n {\n return $opportunity->contacts()\n ->pluck('contacts.crm_provider_id')\n ->toArray();\n }\n\n private function logContactAssociationChanges(\n Opportunity $opportunity,\n array $currentContactCrmIds,\n array $contactAssociations,\n array $contactsToAdd,\n array $contactsToRemove\n ): void {\n $this->logger->info('[' . $this->getDisplayName() . '] Contact association changes', [\n 'opportunity_id' => $opportunity->getId(),\n 'current_contacts' => $currentContactCrmIds,\n 'new_contacts' => $contactAssociations,\n 'contacts_to_add' => $contactsToAdd,\n 'contacts_to_remove' => $contactsToRemove,\n ]);\n }\n\n private function removeContactAssociations(Opportunity $opportunity, array $contactsToRemove): void\n {\n if (empty($contactsToRemove)) {\n return;\n }\n\n $contactsToDetach = $opportunity->contacts()\n ->whereIn('contacts.crm_provider_id', $contactsToRemove)\n ->pluck('contacts.id')\n ->toArray();\n\n if (! empty($contactsToDetach)) {\n $opportunity->contacts()->detach($contactsToDetach);\n\n $this->logger->info('[' . $this->getDisplayName() . '] Removed contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'removed_contact_crm_ids' => $contactsToRemove,\n 'removed_contact_count' => count($contactsToDetach),\n ]);\n }\n }\n\n private function addContactAssociations(Opportunity $opportunity, array $contactsToAdd, array $contactAssociations): void\n {\n if (empty($contactsToAdd)) {\n return;\n }\n\n $contactsAdded = [];\n foreach ($contactsToAdd as $crmId) {\n $id = $contactAssociations[$crmId];\n\n if ($this->attachSingleContact($opportunity, (string) $crmId, $id)) {\n $contactsAdded[] = $crmId;\n }\n }\n\n $this->logAddedContacts($opportunity, $contactsAdded);\n }\n\n private function attachSingleContact(Opportunity $opportunity, string $crmId, int $id): bool\n {\n try {\n $contact = $this->crmEntityRepository->findContactByConfigurationAndId($this->config, $id);\n\n if (! $contact) {\n return false;\n }\n\n return $this->performContactAttachment($opportunity, $contact, $crmId);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to add contact association', [\n 'opportunity_id' => $opportunity->getId(),\n 'contact_crm_id' => $crmId,\n 'error' => $e->getMessage(),\n ]);\n\n return false;\n }\n }\n\n private function performContactAttachment(Opportunity $opportunity, Contact $contact, string $crmId): bool\n {\n try {\n $opportunity->contacts()->attach($contact->getId(), [\n 'crm_provider_id' => $crmId,\n ]);\n\n return true;\n } catch (\\Illuminate\\Database\\QueryException $e) {\n if (str_contains($e->getMessage(), 'Duplicate entry')) {\n $this->logger->info('[' . $this->getDisplayName() . '] Contact association already exists', [\n 'contact_id' => $contact->getId(),\n 'contact_crm_id' => $crmId,\n 'opportunity_id' => $opportunity->getId(),\n ]);\n\n return false;\n }\n\n throw $e;\n }\n }\n\n private function logAddedContacts(Opportunity $opportunity, array $contactsAdded): void\n {\n if (! empty($contactsAdded)) {\n $this->logger->info('[' . $this->getDisplayName() . '] Added contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'contacts_to_add_count' => count($contactsAdded),\n 'added_contact_crm_ids' => $contactsAdded,\n 'added_contacts_count' => count($contactsAdded),\n ]);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-1275708447305567427
|
-8178087410993426138
|
app_switch
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AutomatedReportsCommandTest
Run 'AutomatedReportsCommandTest'
Debug 'AutomatedReportsCommandTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Show Replace Field
Search History
"podcast_audio_url"
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
0 results
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Code changed:
Hide
Sync Changes
Hide This Notification
32
2
19
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot\ServiceTraits;
use Carbon\Carbon;
use HubSpot\Client\Crm\Deals\Model\CollectionResponseAssociatedId;
use Jiminny\Exceptions\InvalidArgumentException;
use Jiminny\Models\Account;
use Exception;
use Jiminny\Component\DealInsights\Forecast\Forecast;
use Jiminny\Jobs\Crm\MatchActivitiesToNewOpportunity;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\BusinessProcess;
use Jiminny\Exceptions\CrmException;
use Jiminny\Models\Opportunity;
use Illuminate\Support\Collection;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\CrmEntityRepository;
use Jiminny\Services\Crm\Hubspot\DealFieldsService;
use Jiminny\Services\Crm\Hubspot\OpportunitySyncStrategy\HubspotSingleSyncStrategy;
use Jiminny\Services\Crm\Hubspot\WebhookSyncBatchProcessor;
use Jiminny\Services\Crm\OpportunitySyncStrategyResolver;
use Jiminny\Utils\CurrencyFormatter;
/**
* Optimized sync methods for better performance
* These methods can be integrated into SyncCrmEntitiesTrait for significant performance gains
*/
trait OpportunitySyncTrait
{
private const int BATCH_SIZE = 100;
private const int BATCH_PROCESS_SIZE = 800;
protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;
protected CrmEntityRepository $crmEntityRepository;
protected DealFieldsService $dealFieldsService;
private ?array $cachedClosedDealStages = null;
private array $cachedBusinessProcesses = [];
private array $cachedStages = [];
public function syncOpportunities(array $parameters, ?string $strategy = null): int
{
$strategies = $this->opportunitySyncStrategyResolver->getStrategies($this->config, $strategy);
$parameters['config'] = $this->config;
$syncCount = 0;
$reportedTotal = 0;
$lastSyncedId = [];
try {
foreach ($strategies as $strategyName => $syncStrategy) {
$this->logger->info(
'[' . $this->getDisplayName() . '] Syncing opportunities using strategy: ' .
$strategyName
);
$total = 0;
$lastId = null;
$buffer = [];
// HubspotWebhookBatchSyncStrategy returns empty generator, this is for other strategies
foreach ($syncStrategy->fetchOpportunities($parameters, $total, $lastId) as $hsOpportunity) {
$buffer[] = $hsOpportunity;
// process every 800 rows (fits < 1 000 association limit)
if (\count($buffer) >= self::BATCH_PROCESS_SIZE) {
$syncCount += $this->processOpportunityBatch($buffer);
$buffer = [];
}
}
// leftovers
if ($buffer) {
$syncCount += $this->processOpportunityBatch($buffer);
}
$reportedTotal += $total;
$lastSyncedId = $lastId;
}
} catch (\HubSpot\Client\Crm\Deals\ApiException | CrmException $e) {
$this->handleSyncException($e, $parameters);
}
$this->logger->info(
'[HubSpot] Synced opportunities',
[
'team' => $this->team->getId(),
'sync_count' => $syncCount,
'total' => $reportedTotal,
'last_synced_id' => $lastSyncedId,
]
);
return $reportedTotal;
}
private function handleSyncException(\Throwable $e, array $parameters): void
{
if (($parameters['since'] ?? null) instanceof Carbon) {
$parameters['since'] = $parameters['since']->toDateTimeString();
}
$parameters['config'] = $this->config->getId();
$this->logger->warning('[' . $this->getDisplayName() . '] Sync opportunities failed', [
'teamId' => $this->team->getUuid(),
'parameters' => $parameters,
'reason' => $e->getMessage(),
]);
}
/**
* @inheritdoc
*/
public function syncOpportunity(string $crmId): ?Opportunity
{
$strategy = $this->opportunitySyncStrategyResolver->resolve(
$this->config,
OpportunitySyncStrategyResolver::SINGLE_SYNC_OPPORTUNITY_STRATEGY,
);
$parameters = [
'config' => $this->config,
'crm_id' => $crmId,
];
try {
if (! $strategy instanceof HubspotSingleSyncStrategy) {
throw new InvalidArgumentException('Strategy must by HubspotSingleSyncStrategy');
}
$hsOpportunity = $strategy->fetchOpportunity($parameters);
} catch (\HubSpot\Client\Crm\Deals\ApiException $e) {
$this->logger->info('[' . $this->getDisplayName() . '] Opportunity not found', [
'teamId' => $this->team->getUuid(),
'crmId' => $crmId,
'reason' => $e->getMessage(),
]);
return null;
}
$hsOpportunity['associations'] = $this->convertDealAssociations($hsOpportunity['associations'] ?? []);
return $this->importOrUpdateOpportunity($hsOpportunity);
}
/**
* Process webhook-collected opportunity batches.
*
* Drains Redis sets containing company CRM IDs collected from webhook events
* and dispatches ImportOpportunityBatch jobs for batch processing.
*
* @return int Number of opportunity IDs dispatched to jobs
*/
public function batchSyncOpportunities(): int
{
$configId = $this->team->getCrmConfiguration()->getId();
return $this->batchProcessor->processBatchesForObjectType(
WebhookSyncBatchProcessor::OBJECT_TYPE_DEAL,
$configId
);
}
/**
* Import a batch of opportunities by their CRM IDs.
* Fetches opportunity data from HubSpot API and delegates to importOpportunityBatch().
*
* @param array<string> $crmIds HubSpot deal CRM IDs
*
* @return array{success: array, failed_ids: array, errors?: array<string, string>}
*/
public function importOpportunityBatchByIds(array $crmIds): array
{
$fields = $this->dealFieldsService->getFieldsForConfiguration($this->config);
$allDeals = [];
foreach (array_chunk($crmIds, self::BATCH_SIZE) as $chunk) {
$deals = $this->client->getOpportunitiesByIds($chunk, $fields);
foreach ($deals as $deal) {
$allDeals[] = $deal;
}
}
// IDs not returned by HubSpot are likely deleted or inaccessible deals.
// These are not failures — retrying won't bring them back.
$fetchedIds = array_map('strval', array_column($allDeals, 'id'));
$notFoundIds = array_values(array_diff(array_map('strval', $crmIds), $fetchedIds));
if (! empty($notFoundIds)) {
$this->logger->info('[' . $this->getDisplayName() . '] CRM IDs not found in HubSpot (likely deleted)', [
'teamId' => $this->team->getId(),
'notFoundCount' => \count($notFoundIds),
'notFoundIds' => $notFoundIds,
'requestedCount' => \count($crmIds),
'fetchedCount' => \count($allDeals),
]);
}
if (empty($allDeals)) {
return ['success' => [], 'failed_ids' => []];
}
return $this->importOpportunityBatch($allDeals);
}
private function getClosedDealStages(): array
{
if ($this->cachedClosedDealStages !== null) {
return $this->cachedClosedDealStages;
}
$stages = $this->crmEntityRepository->getOpportunityClosedStages($this->config);
$data = [
'lost' => [],
'won' => [],
];
foreach ($stages as $stage) {
if ($stage->probability == 0.00) {
$data['lost'][] = $stage->crm_provider_id;
}
if ($stage->probability == 100.00) {
$data['won'][] = $stage->crm_provider_id;
}
}
$this->cachedClosedDealStages = $data;
return $data;
}
/**
* Import deals into the database with pre-fetched associations.
*
* API calls here (getAssociationsData, getExistingOpportunityCrmIds) are NOT
* caught — if they throw, the exception propagates to ImportOpportunityBatch::handle()
* where Laravel retries the whole job with backoff. After all retries exhausted,
* failed() requeues all IDs to Redis.
*
* The per-deal loop catches exceptions individually. A deal can end up in three states:
* - success: imported/updated successfully
* - failed_ids: exception thrown (DB constraint violation, corrupt data, etc.)
* These are permanent issues — retrying won't fix them.
* - skipped (null): missing dependencies (no account, unknown pipeline/stage).
* This is acceptable — the deal cannot be imported until those exist.
*/
private function importOpportunityBatch(array $deals): array
{
$syncedOpportunities = [
'success' => [],
'failed_ids' => [],
];
$dealIds = array_column($deals, 'id');
// Shared association/existing-ID preparation is batch-level state. If it fails, rethrow so the
// queue job retries the whole batch and eventually requeues all deal IDs back to Redis.
try {
$companyAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'companies');
$contactAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'contacts');
$associationsData = $this->prepareAssociatedEntities($companyAssociations, $contactAssociations);
$existingCrmIds = $this->crmEntityRepository->getExistingOpportunityCrmIds(
$this->config,
array_map('strval', $dealIds)
);
$existingCrmIdSet = array_flip($existingCrmIds);
} catch (\Throwable $e) {
$this->logger->error('[' . $this->getDisplayName() . '] Failed to fetch associations or existing IDs', [
'teamId' => $this->team->getId(),
'dealCount' => count($dealIds),
'error' => $e->getMessage(),
]);
throw $e;
}
foreach ($deals as $deal) {
try {
$deal['associations'] = $this->prepareAssociationsForOpportunity(
$deal['id'],
$companyAssociations,
$contactAssociations,
$associationsData
);
$syncedOpportunity = $this->importOrUpdateOpportunity(
$deal,
isset($existingCrmIdSet[(string) $deal['id']])
);
if ($syncedOpportunity) {
$syncedOpportunities['success'][] = $syncedOpportunity;
}
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to import opportunity', [
'teamId' => $this->team->getId(),
'crmId' => $deal['id'],
'error' => $e->getMessage(),
]);
$syncedOpportunities['failed_ids'][] = $deal['id'];
$syncedOpportunities['errors'][$deal['id']] = $e->getMessage();
}
}
return $syncedOpportunities;
}
/**
* Prepare associated entities for opportunities with optimized batch processing
* Returns structured data with CRM ID to DB ID mappings for each opportunity
*/
private function prepareAssociatedEntities(array $companyAssociations, array $contactAssociations): array
{
// Step 1: Collect all unique company and contact IDs from associations
$allCompanyIds = $this->flattenAssociationIds($companyAssociations);
$allContactIds = $this->flattenAssociationIds($contactAssociations);
// Step 2: Batch sync missing entities and get CRM ID to DB ID mappings
$companyIdMappings = [];
$contactIdMappings = [];
if (! empty($allCompanyIds)) {
$companyIdMappings = $this->prepareAssociatedAccounts($allCompanyIds);
}
if (! empty($allContactIds)) {
$contactIdMappings = $this->prepareAssociatedContacts($allContactIds);
}
return [
'company_id_mappings' => $companyIdMappings,
'contact_id_mappings' => $contactIdMappings,
];
}
/**
* Flatten association data to get unique IDs
*/
private function flattenAssociationIds(array $associations): array
{
$ids = [];
foreach ($associations as $dealAssociations) {
if (is_array($dealAssociations)) {
foreach ($dealAssociations as $id) {
$ids[$id] = true;
}
}
}
return array_keys($ids);
}
/**
* Batch sync missing accounts
*/
private function prepareAssociatedAccounts(array $companyIds): array
{
// Find which accounts already exist
$existingAccounts = $this->crmEntityRepository
->findAccountsByExternalIds($this->config, $companyIds);
$existingCompanyIds = $existingAccounts->pluck('crm_provider_id')->toArray();
$existingAccountsData = $existingAccounts->mapWithKeys(function ($account) {
return [$account->getCrmProviderId() => $account->getId()];
})->toArray();
$missingCompanyIds = array_diff($companyIds, $existingCompanyIds);
if (empty($missingCompanyIds)) {
return $existingAccountsData;
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing accounts', [
'teamId' => $this->team->getUuid(),
'total_companies' => count($companyIds),
'existing_companies' => count($existingCompanyIds),
'missing_companies' => count($missingCompanyIds),
]);
// we already have limit on opportunity ids count
// Initialize variable before try block
$syncedAccountsData = [];
try {
$syncedAccountsData = $this->batchSyncCrmObjects('companies', $missingCompanyIds);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing accounts', [
'size' => count($missingCompanyIds),
'error' => $e->getMessage(),
]);
$syncedAccountsData = [];
}
return $existingAccountsData + $syncedAccountsData;
}
/**
* Prepare associated contacts - find existing and sync missing ones
* Returns mapping of CRM ID to DB ID
*/
private function prepareAssociatedContacts(array $contactIds): array
{
// Find which contacts already exist
$existingContacts = $this->crmEntityRepository
->findContactsByExternalIds($this->config, $contactIds);
$existingContactIds = $existingContacts->pluck('crm_provider_id')->toArray();
// Create mapping for existing contacts
$existingContactsData = $existingContacts->mapWithKeys(function ($contact) {
return [$contact->getCrmProviderId() => $contact->getId()];
})->toArray();
$missingContactIds = array_diff($contactIds, $existingContactIds);
if (empty($missingContactIds)) {
return $existingContactsData;
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing contacts', [
'teamId' => $this->team->getUuid(),
'total_contacts' => count($contactIds),
'existing_contacts' => count($existingContactIds),
'missing_contacts' => count($missingContactIds),
]);
// Sync missing contacts using batch API
try {
$syncedContactsData = $this->batchSyncCrmObjects('contacts', $missingContactIds);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing contacts', [
'size' => count($missingContactIds),
'error' => $e->getMessage(),
]);
$syncedContactsData = [];
}
return $existingContactsData + $syncedContactsData;
}
private function batchSyncCrmObjects(string $objectType, array $crmIds): array
{
$syncObjects = [];
$crmObjectIds = array_values($crmIds);
foreach (array_chunk($crmObjectIds, self::BATCH_SIZE) as $chunk) {
try {
$objects = $objectType === 'companies' ?
$this->client->getCompaniesByIds($chunk, $this->getCompanyFields()) :
$this->client->getContactsByIds($chunk, $this->getContactFields());
foreach ($objects as $objectId => $objectData) {
$this->importCrmObject($objectType, (string) $objectId, $objectData, $syncObjects);
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch synced ' . $objectType, [
'requested_count' => count($chunk),
'synced_count' => count($objects),
]);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Batch ' . $objectType . ' sync failed', [
'ids' => $chunk,
'error' => $e->getMessage(),
]);
}
}
return $syncObjects;
}
private function importCrmObject(string $objectType, string $objectId, mixed $objectData, array &$syncObjects): void
{
try {
$object = $objectType === 'companies' ?
$this->importAccount($objectData) :
$this->importContact($objectData);
if ($object) {
$syncObjects[$object->getCrmProviderId()] = $object->getId();
}
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to import batch ' . $objectType, [
'id' => $objectId,
'error' => $e->getMessage(),
]);
}
}
/**
* Prepare associations for a single opportunity
*
* The return value is an array with the following structure:
* [
* 'companies' => [
* $companyCrmId => $companyId,
* ...
* ],
* 'contacts' => [
* $contactCrmId => $contactId,
* ...
* ],
* 'account_id' => $accountId,
* ]
*/
private function prepareAssociationsForOpportunity(
string $oppCrmId,
array $companyAssociations,
array $contactAssociations,
array $associationsData
): array {
$associations = [
'companies' => [],
'contacts' => [],
'account_id' => null, // Primary account for opportunity
];
$oppCompanyIds = $companyAssociations[$oppCrmId] ?? [];
foreach ($oppCompanyIds as $companyCrmId) {
if (isset($associationsData['company_id_mappings'][$companyCrmId])) {
$associations['companies'][$companyCrmId] = $associationsData['company_id_mappings'][$companyCrmId];
// Set primary account (first company becomes primary account)
if ($associations['account_id'] === null) {
$associations['account_id'] = $associationsData['company_id_mappings'][$companyCrmId];
}
}
}
$oppContactIds = $contactAssociations[$oppCrmId] ?? [];
foreach ($oppContactIds as $contactCrmId) {
if (isset($associationsData['contact_id_mappings'][$contactCrmId])) {
$associations['contacts'][$contactCrmId] = $associationsData['contact_id_mappings'][$contactCrmId];
}
}
return $associations;
}
/**
* Update only associations for an opportunity
*/
private function updateOpportunityAssociations(Opportunity $opportunity, array $associations): void
{
// Update contact associations
$this->importOpportunityContacts($opportunity, $associations['contacts']);
// Update company (account) associations
$this->updateOpportunityAccount($opportunity, $associations['account_id']);
}
/**
* Remove all contact associations from an opportunity
*/
private function removeAllOpportunityContacts(Opportunity $opportunity): void
{
$currentCount = (int) $opportunity->contacts()->count();
if ($currentCount > 0) {
$opportunity->contacts()->detach();
$this->logger->info('[' . $this->getDisplayName() . '] Removed all contact associations', [
'opportunity_id' => $opportunity->getId(),
'removed_count' => $currentCount,
]);
}
}
private function updateOpportunityAccount(Opportunity $opportunity, ?int $accountId): void
{
if ($accountId === null) {
// No account ID provided - keep current account
return;
}
$currentAccountId = $opportunity->getAccountId();
// Only update if account has changed
if ($currentAccountId !== $accountId) {
$opportunity->account_id = $accountId;
$opportunity->save();
$this->logger->info('[' . $this->getDisplayName() . '] Updated opportunity account association', [
'opportunity_id' => $opportunity->getId(),
'old_account_id' => $currentAccountId,
'new_account_id' => $accountId,
]);
}
}
/**
* Find existing opportunities by external IDs (OPTIMIZED VERSION)
* Uses batch query for better performance
*/
private function findExistingOpportunities(array $crmIds): Collection
{
return $this->crmEntityRepository
->findOpportunitiesByExternalIds($this->config, $crmIds);
}
private function processOpportunityBatch(array $opportunities): int
{
$syncedOpportunities = $this->importOpportunityBatch($opportunities);
return count($syncedOpportunities['success'] ?? []);
}
/**
* Convert single deal associations from HubSpot format to internal format
* Handles both HubSpot SDK objects and array formats
*
* @param array $opportunityAssociations Raw associations from HubSpot API or pre-processed
*
* @return array Processed associations with DB IDs
*/
private function convertDealAssociations(array $opportunityAssociations): array
{
$associations = $this->initializeAssociationsStructure();
if (empty($opportunityAssociations)) {
return $associations;
}
$associationIds = $this->extractAssociationIds($opportunityAssociations);
$this->processCompanyAssociations($associationIds, $associations);
$this->processContactAssociations($associationIds, $associations);
return $associations;
}
private function initializeAssociationsStructure(): array
{
return [
'companies' => [],
'contacts' => [],
'account_id' => null, // Primary account for opportunity
];
}
private function extractAssociationIds(array $opportunityAssociations): array
{
$associationIds = [];
foreach ($opportunityAssociations as $type => $associationData) {
if (! empty($associationData)) {
$associationIds[$type] = $this->convertSingleDealAssociations($associationData);
}
}
return $associationIds;
}
private function processCompanyAssociations(array $associationIds, array &$associations): void
{
if (empty($associationIds['companies'])) {
return;
}
$companyId = $associationIds['companies'][0];
$account = $this->findOrSyncAccount($companyId);
if ($account instanceof Account) {
$associations['companies'][$companyId] = $account->getId();
$associations['account_id'] = $account->getId();
}
}
private function processContactAssociations(array $associationIds, array &$associations): void
{
if (empty($associationIds['contacts'])) {
return;
}
foreach ($associationIds['contacts'] as $contactId) {
$contact = $this->findOrSyncContact($contactId);
if ($contact instanceof Contact) {
$associations['contacts'][$contactId] = $contact->getId();
}
}
}
private function findOrSyncAccount(string $companyId): ?Account
{
$account = $this->crmEntityRepository->findAccountByExternalId($this->config, $companyId);
if (! $account instanceof Account) {
$account = $this->syncAccount($companyId);
}
return $account;
}
private function findOrSyncContact(string $contactId): ?Contact
{
$contact = $this->crmEntityRepository->findContactByExternalId($this->config, $contactId);
if (! $contact instanceof Contact) {
$contact = $this->syncContact($contactId);
}
return $contact;
}
private function convertSingleDealAssociations($opportunityAssociations = null): array
{
$associationData = [];
if ($opportunityAssociations === null) {
return $associationData;
}
// Handle array input (from extractAssociationIds)
if (is_array($opportunityAssociations)) {
return $opportunityAssociations;
}
// Handle CollectionResponseAssociatedId object
if ($opportunityAssociations instanceof CollectionResponseAssociatedId) {
foreach ($opportunityAssociations->getResults() as $association) {
$associationData[] = $association->getId();
}
}
return $associationData;
}
private function importOrUpdateOpportunity($crmData, ?bool $exists = null): ?Opportunity
{
if (empty($crmData['properties'])) {
return null;
}
$crmId = (string) $crmData['id'];
$properties = $crmData['properties'];
$associations = $crmData['associations'] ?? [];
$opportunityExists = $exists ?? (bool) $this->crmEntityRepository->findOpportunityByExternalId(
$this->config,
$crmId
);
if ($opportunityExists) {
return $this->updateOpportunity($crmId, $properties, $associations);
} else {
return $this->createOpportunity($crmId, $properties, $associations);
}
}
/**
* Create new opportunity
*/
private function createOpportunity(string $crmId, array $properties, array $associations): ?Opportunity
{
$accountId = $this->resolveAccountId($associations);
if (! $accountId) {
return null;
}
$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);
if (! $businessProcess) {
return null;
}
$stage = $this->resolveStage($businessProcess, $properties['dealstage'] ?? null);
if (! $stage) {
return null;
}
$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);
$attributes = [
'crm_configuration_id' => $this->config->getId(),
'crm_provider_id' => $crmId,
];
$values = array_merge($attributes, $data);
$opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);
$this->importExternalFieldData($properties, $opportunity->getId());
$this->importOpportunityContacts($opportunity, $associations['contacts']);
if ($opportunity->wasRecentlyCreated) {
MatchActivitiesToNewOpportunity::dispatch($opportunity->getId());
}
return $opportunity;
}
/**
* Update existing opportunity
*/
private function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity
{
$accountId = $this->resolveAccountId($associations);
$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);
$stage = $businessProcess ? $this->resolveStage($businessProcess, $properties['dealstage'] ?? null) : null;
$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);
$attributes = [
'crm_configuration_id' => $this->config->getId(),
'crm_provider_id' => $crmId,
];
$values = array_merge($attributes, $data);
$opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);
$this->importExternalFieldData($properties, $opportunity->getId());
$this->updateOpportunityAssociations($opportunity, $associations);
return $opportunity;
}
private function resolveAccountId(array $associations): ?int
{
if (! empty($associations['accountId'])) {
return $associations['accountId'];
}
if (empty($associations)) {
return null;
}
// we can't resolve multiple account ids (currently SDK returns one company)
foreach ($associations['companies'] as $accountId) {
return $accountId;
}
return null;
}
private function buildOpportunityData(
array $properties,
?int $accountId,
?BusinessProcess $businessProcess,
?Stage $stage
): array {
$ownerId = null;
$profile = null;
if (! empty($properties['hubspot_owner_id'])) {
$ownerId = $properties['hubspot_owner_id'];
$profile = $this->crmEntityRepository->findProfileByExternalId($this->config, (string) $ownerId);
}
$name = 'Unknown';
if (isset($properties['dealname'])) {
$name = mb_strimwidth($properties['dealname'], 0, 128);
}
$amount = $this->resolveAmount($properties);
$currency = $properties['deal_currency_code'] ?? null;
$closeDate = null;
if (! empty($properties['closedate'])) {
$closeDate = Carbon::parse($properties['closedate'])->format('Y-m-d');
}
$remotelyCreatedAt = null;
if (! empty($properties['createdate']) && strtotime($properties['createdate'])) {
$date = $this->parseCleanDatetime($properties['createdate']);
$remotelyCreatedAt = $date?->format('Y-m-d H:i:s');
}
$closedStages = $this->getClosedDealStages();
$isWon = in_array($properties['dealstage'], $closedStages['won']);
$isLost = in_array($properties['dealstage'], $closedStages['lost']);
$data = [
'team_id' => $this->team->getId(),
'user_id' => $profile ? $profile->user_id : null,
'owner_id' => $ownerId,
'name' => $name,
'value' => ! empty($amount) ? $amount : null,
'currency_code' => CurrencyFormatter::formatCode($currency),
'close_date' => $closeDate,
'is_closed' => $isWon || $isLost,
'is_won' => $isWon,
'remotely_created_at' => $remotelyCreatedAt,
'probability' => $this->resolveDealProbability($properties['hs_deal_stage_probability']),
'forecast_category' => $this->resolveForecastCategory($properties['hs_manual_forecast_category']),
];
if ($accountId) {
$data['account_id'] = $accountId;
}
if ($stage) {
$data['stage_id'] = $stage->id;
}
if ($businessProcess) {
$recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);
if ($recordType) {
$data['record_type_id'] = $recordType->id;
}
}
return $data;
}
private function resolveBusinessProcess(?string $pipelineId): ?BusinessProcess
{
if ($pipelineId === null) {
return null;
}
if (isset($this->cachedBusinessProcesses[$pipelineId])) {
return $this->cachedBusinessProcesses[$pipelineId];
}
$businessProcess = $this->getBusinessProcess($pipelineId);
if (! $businessProcess instanceof BusinessProcess) {
$this->importStages();
$businessProcess = $this->getBusinessProcess($pipelineId);
}
if (! $businessProcess instanceof BusinessProcess) {
$this->logger->info(
'[HubSpot] Deal is not attached to a pipeline',
[
'pipeline' => $pipelineId]
);
}
$this->cachedBusinessProcesses[$pipelineId] = $businessProcess;
return $businessProcess;
}
private function getBusinessProcess(string $pipelineId): ?BusinessProcess
{
return $this->crmEntityRepository->findBusinessProcessesByExternalId($this->config, $pipelineId);
}
private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage
{
if (empty($stageId)) {
return null;
}
$cacheKey = $businessProcess->getId() . ':' . $stageId;
if (isset($this->cachedStages[$cacheKey])) {
return $this->cachedStages[$cacheKey];
}
$stage = $this->crmEntityRepository->getPipelineStageByConditions(
$businessProcess,
[
'crm_provider_id' => $stageId,
'type' => Stage::TYPE_OPPORTUNITY,
]
);
if ($stage === null) {
$this->importStages(null, $stageId);
}
if ($stage === null) {
$this->logger->info('[HubSpot] Stage does not exist => ' . $stageId);
}
$this->cachedStages[$cacheKey] = $stage;
return $stage;
}
private function resolveAmount(array $properties): ?string
{
$amount = null;
if (! empty($properties['amount'])) {
$amount = str_replace(',', '', $properties['amount']);
}
if ($this->config->hasDefaultCurrencyFieldSet()) {
$valueFieldName = $this->config->getDefaultCurrencyField()->getCrmProviderId();
$amount = $properties[$valueFieldName] ?? $amount;
}
return $amount;
}
private function parseCleanDatetime(string $datetime): ?Carbon
{
// Treat pre-1980 values as invalid
$minValidDate = Carbon::parse('1980-01-01 00:00:00');
try {
$date = Carbon::parse($datetime);
if ($minValidDate->gt($date)) {
return null;
}
return $date;
} catch (Exception) {
return null; // On parse error, treat as null
}
}
private function resolveDealProbability(?string $stageProbability): int
{
if ($stageProbability === null) {
return 0;
}
$probability = (float) $stageProbability;
return $probability > 1 ? 0 : (int) ($probability * 100);
}
private function resolveForecastCategory(?string $forecastCategory): string
{
if (! $forecastCategory) {
return Forecast::FORECAST_CATEGORY_UNCATEGORIZED;
}
$forecastCategory = str_replace('_', ' ', $forecastCategory);
return ucwords(strtolower($forecastCategory));
}
private function importExternalFieldData(array $properties, int $opportunityId): void
{
$crmFields = $this->getOpportunitySyncableFields();
$this->importOpportunityCrmFieldData($properties, $crmFields, $opportunityId);
}
private function importOpportunityContacts(Opportunity $opportunity, array $associations): void
{
// Handle empty or missing contact associations
if (empty($associations)) {
// Remove all existing contact associations if none provided
$this->removeAllOpportunityContacts($opportunity);
return;
}
// Use differential sync approach for better performance and accuracy
$this->syncOpportunityContactsDifferential($opportunity, $associations);
}
/**
* Sync opportunity contacts using differential approach
* This compares current vs new associations and only makes necessary changes
*/
private function syncOpportunityContactsDifferential(Opportunity $opportunity, array $contactAssociations): void
{
$currentContactCrmIds = $this->getCurrentContactCrmIds($opportunity);
$contactAssociationIds = array_keys($contactAssociations);
$contactsToAdd = array_diff($contactAssociationIds, $currentContactCrmIds);
$contactsToRemove = array_diff($currentContactCrmIds, $contactAssociationIds);
if (empty($contactsToAdd) && empty($contactsToRemove)) {
return;
}
$this->logContactAssociationChanges($opportunity, $currentContactCrmIds, $contactAssociations, $contactsToAdd, $contactsToRemove);
$this->removeContactAssociations($opportunity, $contactsToRemove);
$this->addContactAssociations($opportunity, $contactsToAdd, $contactAssociations);
}
private function getCurrentContactCrmIds(Opportunity $opportunity): array
{
return $opportunity->contacts()
->pluck('contacts.crm_provider_id')
->toArray();
}
private function logContactAssociationChanges(
Opportunity $opportunity,
array $currentContactCrmIds,
array $contactAssociations,
array $contactsToAdd,
array $contactsToRemove
): void {
$this->logger->info('[' . $this->getDisplayName() . '] Contact association changes', [
'opportunity_id' => $opportunity->getId(),
'current_contacts' => $currentContactCrmIds,
'new_contacts' => $contactAssociations,
'contacts_to_add' => $contactsToAdd,
'contacts_to_remove' => $contactsToRemove,
]);
}
private function removeContactAssociations(Opportunity $opportunity, array $contactsToRemove): void
{
if (empty($contactsToRemove)) {
return;
}
$contactsToDetach = $opportunity->contacts()
->whereIn('contacts.crm_provider_id', $contactsToRemove)
->pluck('contacts.id')
->toArray();
if (! empty($contactsToDetach)) {
$opportunity->contacts()->detach($contactsToDetach);
$this->logger->info('[' . $this->getDisplayName() . '] Removed contact associations', [
'opportunity_id' => $opportunity->getId(),
'removed_contact_crm_ids' => $contactsToRemove,
'removed_contact_count' => count($contactsToDetach),
]);
}
}
private function addContactAssociations(Opportunity $opportunity, array $contactsToAdd, array $contactAssociations): void
{
if (empty($contactsToAdd)) {
return;
}
$contactsAdded = [];
foreach ($contactsToAdd as $crmId) {
$id = $contactAssociations[$crmId];
if ($this->attachSingleContact($opportunity, (string) $crmId, $id)) {
$contactsAdded[] = $crmId;
}
}
$this->logAddedContacts($opportunity, $contactsAdded);
}
private function attachSingleContact(Opportunity $opportunity, string $crmId, int $id): bool
{
try {
$contact = $this->crmEntityRepository->findContactByConfigurationAndId($this->config, $id);
if (! $contact) {
return false;
}
return $this->performContactAttachment($opportunity, $contact, $crmId);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to add contact association', [
'opportunity_id' => $opportunity->getId(),
'contact_crm_id' => $crmId,
'error' => $e->getMessage(),
]);
return false;
}
}
private function performContactAttachment(Opportunity $opportunity, Contact $contact, string $crmId): bool
{
try {
$opportunity->contacts()->attach($contact->getId(), [
'crm_provider_id' => $crmId,
]);
return true;
} catch (\Illuminate\Database\QueryException $e) {
if (str_contains($e->getMessage(), 'Duplicate entry')) {
$this->logger->info('[' . $this->getDisplayName() . '] Contact association already exists', [
'contact_id' => $contact->getId(),
'contact_crm_id' => $crmId,
'opportunity_id' => $opportunity->getId(),
]);
return false;
}
throw $e;
}
}
private function logAddedContacts(Opportunity $opportunity, array $contactsAdded): void
{
if (! empty($contactsAdded)) {
$this->logger->info('[' . $this->getDisplayName() . '] Added contact associations', [
'opportunity_id' => $opportunity->getId(),
'contacts_to_add_count' => count($contactsAdded),
'added_contact_crm_ids' => $contactsAdded,
'added_contacts_count' => count($contactsAdded),
]);
}
}
}
Execute
Explain Plan...
|
NULL
|
|
43325
|
923
|
4
|
2026-04-17T08:03:18.934253+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776412998934_m2.jpg...
|
PhpStorm
|
faVsco.js – OpportunitySyncTrait.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AutomatedReportsCommandTest
Run 'AutomatedReportsCommandTest'
Debug 'AutomatedReportsCommandTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Show Replace Field
Search History
"podcast_audio_url"
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
0 results
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Code changed:
Hide
Sync Changes
Hide This Notification
32
2
19
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot\ServiceTraits;
use Carbon\Carbon;
use HubSpot\Client\Crm\Deals\Model\CollectionResponseAssociatedId;
use Jiminny\Exceptions\InvalidArgumentException;
use Jiminny\Models\Account;
use Exception;
use Jiminny\Component\DealInsights\Forecast\Forecast;
use Jiminny\Jobs\Crm\MatchActivitiesToNewOpportunity;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\BusinessProcess;
use Jiminny\Exceptions\CrmException;
use Jiminny\Models\Opportunity;
use Illuminate\Support\Collection;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\CrmEntityRepository;
use Jiminny\Services\Crm\Hubspot\DealFieldsService;
use Jiminny\Services\Crm\Hubspot\OpportunitySyncStrategy\HubspotSingleSyncStrategy;
use Jiminny\Services\Crm\Hubspot\WebhookSyncBatchProcessor;
use Jiminny\Services\Crm\OpportunitySyncStrategyResolver;
use Jiminny\Utils\CurrencyFormatter;
/**
* Optimized sync methods for better performance
* These methods can be integrated into SyncCrmEntitiesTrait for significant performance gains
*/
trait OpportunitySyncTrait
{
private const int BATCH_SIZE = 100;
private const int BATCH_PROCESS_SIZE = 800;
protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;
protected CrmEntityRepository $crmEntityRepository;
protected DealFieldsService $dealFieldsService;
private ?array $cachedClosedDealStages = null;
private array $cachedBusinessProcesses = [];
private array $cachedStages = [];
public function syncOpportunities(array $parameters, ?string $strategy = null): int
{
$strategies = $this->opportunitySyncStrategyResolver->getStrategies($this->config, $strategy);
$parameters['config'] = $this->config;
$syncCount = 0;
$reportedTotal = 0;
$lastSyncedId = [];
try {
foreach ($strategies as $strategyName => $syncStrategy) {
$this->logger->info(
'[' . $this->getDisplayName() . '] Syncing opportunities using strategy: ' .
$strategyName
);
$total = 0;
$lastId = null;
$buffer = [];
// HubspotWebhookBatchSyncStrategy returns empty generator, this is for other strategies
foreach ($syncStrategy->fetchOpportunities($parameters, $total, $lastId) as $hsOpportunity) {
$buffer[] = $hsOpportunity;
// process every 800 rows (fits < 1 000 association limit)
if (\count($buffer) >= self::BATCH_PROCESS_SIZE) {
$syncCount += $this->processOpportunityBatch($buffer);
$buffer = [];
}
}
// leftovers
if ($buffer) {
$syncCount += $this->processOpportunityBatch($buffer);
}
$reportedTotal += $total;
$lastSyncedId = $lastId;
}
} catch (\HubSpot\Client\Crm\Deals\ApiException | CrmException $e) {
$this->handleSyncException($e, $parameters);
}
$this->logger->info(
'[HubSpot] Synced opportunities',
[
'team' => $this->team->getId(),
'sync_count' => $syncCount,
'total' => $reportedTotal,
'last_synced_id' => $lastSyncedId,
]
);
return $reportedTotal;
}
private function handleSyncException(\Throwable $e, array $parameters): void
{
if (($parameters['since'] ?? null) instanceof Carbon) {
$parameters['since'] = $parameters['since']->toDateTimeString();
}
$parameters['config'] = $this->config->getId();
$this->logger->warning('[' . $this->getDisplayName() . '] Sync opportunities failed', [
'teamId' => $this->team->getUuid(),
'parameters' => $parameters,
'reason' => $e->getMessage(),
]);
}
/**
* @inheritdoc
*/
public function syncOpportunity(string $crmId): ?Opportunity
{
$strategy = $this->opportunitySyncStrategyResolver->resolve(
$this->config,
OpportunitySyncStrategyResolver::SINGLE_SYNC_OPPORTUNITY_STRATEGY,
);
$parameters = [
'config' => $this->config,
'crm_id' => $crmId,
];
try {
if (! $strategy instanceof HubspotSingleSyncStrategy) {
throw new InvalidArgumentException('Strategy must by HubspotSingleSyncStrategy');
}
$hsOpportunity = $strategy->fetchOpportunity($parameters);
} catch (\HubSpot\Client\Crm\Deals\ApiException $e) {
$this->logger->info('[' . $this->getDisplayName() . '] Opportunity not found', [
'teamId' => $this->team->getUuid(),
'crmId' => $crmId,
'reason' => $e->getMessage(),
]);
return null;
}
$hsOpportunity['associations'] = $this->convertDealAssociations($hsOpportunity['associations'] ?? []);
return $this->importOrUpdateOpportunity($hsOpportunity);
}
/**
* Process webhook-collected opportunity batches.
*
* Drains Redis sets containing company CRM IDs collected from webhook events
* and dispatches ImportOpportunityBatch jobs for batch processing.
*
* @return int Number of opportunity IDs dispatched to jobs
*/
public function batchSyncOpportunities(): int
{
$configId = $this->team->getCrmConfiguration()->getId();
return $this->batchProcessor->processBatchesForObjectType(
WebhookSyncBatchProcessor::OBJECT_TYPE_DEAL,
$configId
);
}
/**
* Import a batch of opportunities by their CRM IDs.
* Fetches opportunity data from HubSpot API and delegates to importOpportunityBatch().
*
* @param array<string> $crmIds HubSpot deal CRM IDs
*
* @return array{success: array, failed_ids: array, errors?: array<string, string>}
*/
public function importOpportunityBatchByIds(array $crmIds): array
{
$fields = $this->dealFieldsService->getFieldsForConfiguration($this->config);
$allDeals = [];
foreach (array_chunk($crmIds, self::BATCH_SIZE) as $chunk) {
$deals = $this->client->getOpportunitiesByIds($chunk, $fields);
foreach ($deals as $deal) {
$allDeals[] = $deal;
}
}
// IDs not returned by HubSpot are likely deleted or inaccessible deals.
// These are not failures — retrying won't bring them back.
$fetchedIds = array_map('strval', array_column($allDeals, 'id'));
$notFoundIds = array_values(array_diff(array_map('strval', $crmIds), $fetchedIds));
if (! empty($notFoundIds)) {
$this->logger->info('[' . $this->getDisplayName() . '] CRM IDs not found in HubSpot (likely deleted)', [
'teamId' => $this->team->getId(),
'notFoundCount' => \count($notFoundIds),
'notFoundIds' => $notFoundIds,
'requestedCount' => \count($crmIds),
'fetchedCount' => \count($allDeals),
]);
}
if (empty($allDeals)) {
return ['success' => [], 'failed_ids' => []];
}
return $this->importOpportunityBatch($allDeals);
}
private function getClosedDealStages(): array
{
if ($this->cachedClosedDealStages !== null) {
return $this->cachedClosedDealStages;
}
$stages = $this->crmEntityRepository->getOpportunityClosedStages($this->config);
$data = [
'lost' => [],
'won' => [],
];
foreach ($stages as $stage) {
if ($stage->probability == 0.00) {
$data['lost'][] = $stage->crm_provider_id;
}
if ($stage->probability == 100.00) {
$data['won'][] = $stage->crm_provider_id;
}
}
$this->cachedClosedDealStages = $data;
return $data;
}
/**
* Import deals into the database with pre-fetched associations.
*
* API calls here (getAssociationsData, getExistingOpportunityCrmIds) are NOT
* caught — if they throw, the exception propagates to ImportOpportunityBatch::handle()
* where Laravel retries the whole job with backoff. After all retries exhausted,
* failed() requeues all IDs to Redis.
*
* The per-deal loop catches exceptions individually. A deal can end up in three states:
* - success: imported/updated successfully
* - failed_ids: exception thrown (DB constraint violation, corrupt data, etc.)
* These are permanent issues — retrying won't fix them.
* - skipped (null): missing dependencies (no account, unknown pipeline/stage).
* This is acceptable — the deal cannot be imported until those exist.
*/
private function importOpportunityBatch(array $deals): array
{
$syncedOpportunities = [
'success' => [],
'failed_ids' => [],
];
$dealIds = array_column($deals, 'id');
// Shared association/existing-ID preparation is batch-level state. If it fails, rethrow so the
// queue job retries the whole batch and eventually requeues all deal IDs back to Redis.
try {
$companyAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'companies');
$contactAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'contacts');
$associationsData = $this->prepareAssociatedEntities($companyAssociations, $contactAssociations);
$existingCrmIds = $this->crmEntityRepository->getExistingOpportunityCrmIds(
$this->config,
array_map('strval', $dealIds)
);
$existingCrmIdSet = array_flip($existingCrmIds);
} catch (\Throwable $e) {
$this->logger->error('[' . $this->getDisplayName() . '] Failed to fetch associations or existing IDs', [
'teamId' => $this->team->getId(),
'dealCount' => count($dealIds),
'error' => $e->getMessage(),
]);
throw $e;
}
foreach ($deals as $deal) {
try {
$deal['associations'] = $this->prepareAssociationsForOpportunity(
$deal['id'],
$companyAssociations,
$contactAssociations,
$associationsData
);
$syncedOpportunity = $this->importOrUpdateOpportunity(
$deal,
isset($existingCrmIdSet[(string) $deal['id']])
);
if ($syncedOpportunity) {
$syncedOpportunities['success'][] = $syncedOpportunity;
}
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to import opportunity', [
'teamId' => $this->team->getId(),
'crmId' => $deal['id'],
'error' => $e->getMessage(),
]);
$syncedOpportunities['failed_ids'][] = $deal['id'];
$syncedOpportunities['errors'][$deal['id']] = $e->getMessage();
}
}
return $syncedOpportunities;
}
/**
* Prepare associated entities for opportunities with optimized batch processing
* Returns structured data with CRM ID to DB ID mappings for each opportunity
*/
private function prepareAssociatedEntities(array $companyAssociations, array $contactAssociations): array
{
// Step 1: Collect all unique company and contact IDs from associations
$allCompanyIds = $this->flattenAssociationIds($companyAssociations);
$allContactIds = $this->flattenAssociationIds($contactAssociations);
// Step 2: Batch sync missing entities and get CRM ID to DB ID mappings
$companyIdMappings = [];
$contactIdMappings = [];
if (! empty($allCompanyIds)) {
$companyIdMappings = $this->prepareAssociatedAccounts($allCompanyIds);
}
if (! empty($allContactIds)) {
$contactIdMappings = $this->prepareAssociatedContacts($allContactIds);
}
return [
'company_id_mappings' => $companyIdMappings,
'contact_id_mappings' => $contactIdMappings,
];
}
/**
* Flatten association data to get unique IDs
*/
private function flattenAssociationIds(array $associations): array
{
$ids = [];
foreach ($associations as $dealAssociations) {
if (is_array($dealAssociations)) {
foreach ($dealAssociations as $id) {
$ids[$id] = true;
}
}
}
return array_keys($ids);
}
/**
* Batch sync missing accounts
*/
private function prepareAssociatedAccounts(array $companyIds): array
{
// Find which accounts already exist
$existingAccounts = $this->crmEntityRepository
->findAccountsByExternalIds($this->config, $companyIds);
$existingCompanyIds = $existingAccounts->pluck('crm_provider_id')->toArray();
$existingAccountsData = $existingAccounts->mapWithKeys(function ($account) {
return [$account->getCrmProviderId() => $account->getId()];
})->toArray();
$missingCompanyIds = array_diff($companyIds, $existingCompanyIds);
if (empty($missingCompanyIds)) {
return $existingAccountsData;
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing accounts', [
'teamId' => $this->team->getUuid(),
'total_companies' => count($companyIds),
'existing_companies' => count($existingCompanyIds),
'missing_companies' => count($missingCompanyIds),
]);
// we already have limit on opportunity ids count
// Initialize variable before try block
$syncedAccountsData = [];
try {
$syncedAccountsData = $this->batchSyncCrmObjects('companies', $missingCompanyIds);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing accounts', [
'size' => count($missingCompanyIds),
'error' => $e->getMessage(),
]);
$syncedAccountsData = [];
}
return $existingAccountsData + $syncedAccountsData;
}
/**
* Prepare associated contacts - find existing and sync missing ones
* Returns mapping of CRM ID to DB ID
*/
private function prepareAssociatedContacts(array $contactIds): array
{
// Find which contacts already exist
$existingContacts = $this->crmEntityRepository
->findContactsByExternalIds($this->config, $contactIds);
$existingContactIds = $existingContacts->pluck('crm_provider_id')->toArray();
// Create mapping for existing contacts
$existingContactsData = $existingContacts->mapWithKeys(function ($contact) {
return [$contact->getCrmProviderId() => $contact->getId()];
})->toArray();
$missingContactIds = array_diff($contactIds, $existingContactIds);
if (empty($missingContactIds)) {
return $existingContactsData;
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing contacts', [
'teamId' => $this->team->getUuid(),
'total_contacts' => count($contactIds),
'existing_contacts' => count($existingContactIds),
'missing_contacts' => count($missingContactIds),
]);
// Sync missing contacts using batch API
try {
$syncedContactsData = $this->batchSyncCrmObjects('contacts', $missingContactIds);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing contacts', [
'size' => count($missingContactIds),
'error' => $e->getMessage(),
]);
$syncedContactsData = [];
}
return $existingContactsData + $syncedContactsData;
}
private function batchSyncCrmObjects(string $objectType, array $crmIds): array
{
$syncObjects = [];
$crmObjectIds = array_values($crmIds);
foreach (array_chunk($crmObjectIds, self::BATCH_SIZE) as $chunk) {
try {
$objects = $objectType === 'companies' ?
$this->client->getCompaniesByIds($chunk, $this->getCompanyFields()) :
$this->client->getContactsByIds($chunk, $this->getContactFields());
foreach ($objects as $objectId => $objectData) {
$this->importCrmObject($objectType, (string) $objectId, $objectData, $syncObjects);
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch synced ' . $objectType, [
'requested_count' => count($chunk),
'synced_count' => count($objects),
]);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Batch ' . $objectType . ' sync failed', [
'ids' => $chunk,
'error' => $e->getMessage(),
]);
}
}
return $syncObjects;
}
private function importCrmObject(string $objectType, string $objectId, mixed $objectData, array &$syncObjects): void
{
try {
$object = $objectType === 'companies' ?
$this->importAccount($objectData) :
$this->importContact($objectData);
if ($object) {
$syncObjects[$object->getCrmProviderId()] = $object->getId();
}
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to import batch ' . $objectType, [
'id' => $objectId,
'error' => $e->getMessage(),
]);
}
}
/**
* Prepare associations for a single opportunity
*
* The return value is an array with the following structure:
* [
* 'companies' => [
* $companyCrmId => $companyId,
* ...
* ],
* 'contacts' => [
* $contactCrmId => $contactId,
* ...
* ],
* 'account_id' => $accountId,
* ]
*/
private function prepareAssociationsForOpportunity(
string $oppCrmId,
array $companyAssociations,
array $contactAssociations,
array $associationsData
): array {
$associations = [
'companies' => [],
'contacts' => [],
'account_id' => null, // Primary account for opportunity
];
$oppCompanyIds = $companyAssociations[$oppCrmId] ?? [];
foreach ($oppCompanyIds as $companyCrmId) {
if (isset($associationsData['company_id_mappings'][$companyCrmId])) {
$associations['companies'][$companyCrmId] = $associationsData['company_id_mappings'][$companyCrmId];
// Set primary account (first company becomes primary account)
if ($associations['account_id'] === null) {
$associations['account_id'] = $associationsData['company_id_mappings'][$companyCrmId];
}
}
}
$oppContactIds = $contactAssociations[$oppCrmId] ?? [];
foreach ($oppContactIds as $contactCrmId) {
if (isset($associationsData['contact_id_mappings'][$contactCrmId])) {
$associations['contacts'][$contactCrmId] = $associationsData['contact_id_mappings'][$contactCrmId];
}
}
return $associations;
}
/**
* Update only associations for an opportunity
*/
private function updateOpportunityAssociations(Opportunity $opportunity, array $associations): void
{
// Update contact associations
$this->importOpportunityContacts($opportunity, $associations['contacts']);
// Update company (account) associations
$this->updateOpportunityAccount($opportunity, $associations['account_id']);
}
/**
* Remove all contact associations from an opportunity
*/
private function removeAllOpportunityContacts(Opportunity $opportunity): void
{
$currentCount = (int) $opportunity->contacts()->count();
if ($currentCount > 0) {
$opportunity->contacts()->detach();
$this->logger->info('[' . $this->getDisplayName() . '] Removed all contact associations', [
'opportunity_id' => $opportunity->getId(),
'removed_count' => $currentCount,
]);
}
}
private function updateOpportunityAccount(Opportunity $opportunity, ?int $accountId): void
{
if ($accountId === null) {
// No account ID provided - keep current account
return;
}
$currentAccountId = $opportunity->getAccountId();
// Only update if account has changed
if ($currentAccountId !== $accountId) {
$opportunity->account_id = $accountId;
$opportunity->save();
$this->logger->info('[' . $this->getDisplayName() . '] Updated opportunity account association', [
'opportunity_id' => $opportunity->getId(),
'old_account_id' => $currentAccountId,
'new_account_id' => $accountId,
]);
}
}
/**
* Find existing opportunities by external IDs (OPTIMIZED VERSION)
* Uses batch query for better performance
*/
private function findExistingOpportunities(array $crmIds): Collection
{
return $this->crmEntityRepository
->findOpportunitiesByExternalIds($this->config, $crmIds);
}
private function processOpportunityBatch(array $opportunities): int
{
$syncedOpportunities = $this->importOpportunityBatch($opportunities);
return count($syncedOpportunities['success'] ?? []);
}
/**
* Convert single deal associations from HubSpot format to internal format
* Handles both HubSpot SDK objects and array formats
*
* @param array $opportunityAssociations Raw associations from HubSpot API or pre-processed
*
* @return array Processed associations with DB IDs
*/
private function convertDealAssociations(array $opportunityAssociations): array
{
$associations = $this->initializeAssociationsStructure();
if (empty($opportunityAssociations)) {
return $associations;
}
$associationIds = $this->extractAssociationIds($opportunityAssociations);
$this->processCompanyAssociations($associationIds, $associations);
$this->processContactAssociations($associationIds, $associations);
return $associations;
}
private function initializeAssociationsStructure(): array
{
return [
'companies' => [],
'contacts' => [],
'account_id' => null, // Primary account for opportunity
];
}
private function extractAssociationIds(array $opportunityAssociations): array
{
$associationIds = [];
foreach ($opportunityAssociations as $type => $associationData) {
if (! empty($associationData)) {
$associationIds[$type] = $this->convertSingleDealAssociations($associationData);
}
}
return $associationIds;
}
private function processCompanyAssociations(array $associationIds, array &$associations): void
{
if (empty($associationIds['companies'])) {
return;
}
$companyId = $associationIds['companies'][0];
$account = $this->findOrSyncAccount($companyId);
if ($account instanceof Account) {
$associations['companies'][$companyId] = $account->getId();
$associations['account_id'] = $account->getId();
}
}
private function processContactAssociations(array $associationIds, array &$associations): void
{
if (empty($associationIds['contacts'])) {
return;
}
foreach ($associationIds['contacts'] as $contactId) {
$contact = $this->findOrSyncContact($contactId);
if ($contact instanceof Contact) {
$associations['contacts'][$contactId] = $contact->getId();
}
}
}
private function findOrSyncAccount(string $companyId): ?Account
{
$account = $this->crmEntityRepository->findAccountByExternalId($this->config, $companyId);
if (! $account instanceof Account) {
$account = $this->syncAccount($companyId);
}
return $account;
}
private function findOrSyncContact(string $contactId): ?Contact
{
$contact = $this->crmEntityRepository->findContactByExternalId($this->config, $contactId);
if (! $contact instanceof Contact) {
$contact = $this->syncContact($contactId);
}
return $contact;
}
private function convertSingleDealAssociations($opportunityAssociations = null): array
{
$associationData = [];
if ($opportunityAssociations === null) {
return $associationData;
}
// Handle array input (from extractAssociationIds)
if (is_array($opportunityAssociations)) {
return $opportunityAssociations;
}
// Handle CollectionResponseAssociatedId object
if ($opportunityAssociations instanceof CollectionResponseAssociatedId) {
foreach ($opportunityAssociations->getResults() as $association) {
$associationData[] = $association->getId();
}
}
return $associationData;
}
private function importOrUpdateOpportunity($crmData, ?bool $exists = null): ?Opportunity
{
if (empty($crmData['properties'])) {
return null;
}
$crmId = (string) $crmData['id'];
$properties = $crmData['properties'];
$associations = $crmData['associations'] ?? [];
$opportunityExists = $exists ?? (bool) $this->crmEntityRepository->findOpportunityByExternalId(
$this->config,
$crmId
);
if ($opportunityExists) {
return $this->updateOpportunity($crmId, $properties, $associations);
} else {
return $this->createOpportunity($crmId, $properties, $associations);
}
}
/**
* Create new opportunity
*/
private function createOpportunity(string $crmId, array $properties, array $associations): ?Opportunity
{
$accountId = $this->resolveAccountId($associations);
if (! $accountId) {
return null;
}
$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);
if (! $businessProcess) {
return null;
}
$stage = $this->resolveStage($businessProcess, $properties['dealstage'] ?? null);
if (! $stage) {
return null;
}
$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);
$attributes = [
'crm_configuration_id' => $this->config->getId(),
'crm_provider_id' => $crmId,
];
$values = array_merge($attributes, $data);
$opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);
$this->importExternalFieldData($properties, $opportunity->getId());
$this->importOpportunityContacts($opportunity, $associations['contacts']);
if ($opportunity->wasRecentlyCreated) {
MatchActivitiesToNewOpportunity::dispatch($opportunity->getId());
}
return $opportunity;
}
/**
* Update existing opportunity
*/
private function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity
{
$accountId = $this->resolveAccountId($associations);
$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);
$stage = $businessProcess ? $this->resolveStage($businessProcess, $properties['dealstage'] ?? null) : null;
$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);
$attributes = [
'crm_configuration_id' => $this->config->getId(),
'crm_provider_id' => $crmId,
];
$values = array_merge($attributes, $data);
$opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);
$this->importExternalFieldData($properties, $opportunity->getId());
$this->updateOpportunityAssociations($opportunity, $associations);
return $opportunity;
}
private function resolveAccountId(array $associations): ?int
{
if (! empty($associations['accountId'])) {
return $associations['accountId'];
}
if (empty($associations)) {
return null;
}
// we can't resolve multiple account ids (currently SDK returns one company)
foreach ($associations['companies'] as $accountId) {
return $accountId;
}
return null;
}
private function buildOpportunityData(
array $properties,
?int $accountId,
?BusinessProcess $businessProcess,
?Stage $stage
): array {
$ownerId = null;
$profile = null;
if (! empty($properties['hubspot_owner_id'])) {
$ownerId = $properties['hubspot_owner_id'];
$profile = $this->crmEntityRepository->findProfileByExternalId($this->config, (string) $ownerId);
}
$name = 'Unknown';
if (isset($properties['dealname'])) {
$name = mb_strimwidth($properties['dealname'], 0, 128);
}
$amount = $this->resolveAmount($properties);
$currency = $properties['deal_currency_code'] ?? null;
$closeDate = null;
if (! empty($properties['closedate'])) {
$closeDate = Carbon::parse($properties['closedate'])->format('Y-m-d');
}
$remotelyCreatedAt = null;
if (! empty($properties['createdate']) && strtotime($properties['createdate'])) {
$date = $this->parseCleanDatetime($properties['createdate']);
$remotelyCreatedAt = $date?->format('Y-m-d H:i:s');
}
$closedStages = $this->getClosedDealStages();
$isWon = in_array($properties['dealstage'], $closedStages['won']);
$isLost = in_array($properties['dealstage'], $closedStages['lost']);
$data = [
'team_id' => $this->team->getId(),
'user_id' => $profile ? $profile->user_id : null,
'owner_id' => $ownerId,
'name' => $name,
'value' => ! empty($amount) ? $amount : null,
'currency_code' => CurrencyFormatter::formatCode($currency),
'close_date' => $closeDate,
'is_closed' => $isWon || $isLost,
'is_won' => $isWon,
'remotely_created_at' => $remotelyCreatedAt,
'probability' => $this->resolveDealProbability($properties['hs_deal_stage_probability']),
'forecast_category' => $this->resolveForecastCategory($properties['hs_manual_forecast_category']),
];
if ($accountId) {
$data['account_id'] = $accountId;
}
if ($stage) {
$data['stage_id'] = $stage->id;
}
if ($businessProcess) {
$recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);
if ($recordType) {
$data['record_type_id'] = $recordType->id;
}
}
return $data;
}
private function resolveBusinessProcess(?string $pipelineId): ?BusinessProcess
{
if ($pipelineId === null) {
return null;
}
if (isset($this->cachedBusinessProcesses[$pipelineId])) {
return $this->cachedBusinessProcesses[$pipelineId];
}
$businessProcess = $this->getBusinessProcess($pipelineId);
if (! $businessProcess instanceof BusinessProcess) {
$this->importStages();
$businessProcess = $this->getBusinessProcess($pipelineId);
}
if (! $businessProcess instanceof BusinessProcess) {
$this->logger->info(
'[HubSpot] Deal is not attached to a pipeline',
[
'pipeline' => $pipelineId]
);
}
$this->cachedBusinessProcesses[$pipelineId] = $businessProcess;
return $businessProcess;
}
private function getBusinessProcess(string $pipelineId): ?BusinessProcess
{
return $this->crmEntityRepository->findBusinessProcessesByExternalId($this->config, $pipelineId);
}
private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage
{
if (empty($stageId)) {
return null;
}
$cacheKey = $businessProcess->getId() . ':' . $stageId;
if (isset($this->cachedStages[$cacheKey])) {
return $this->cachedStages[$cacheKey];
}
$stage = $this->crmEntityRepository->getPipelineStageByConditions(
$businessProcess,
[
'crm_provider_id' => $stageId,
'type' => Stage::TYPE_OPPORTUNITY,
]
);
if ($stage === null) {
$this->importStages(null, $stageId);
}
if ($stage === null) {
$this->logger->info('[HubSpot] Stage does not exist => ' . $stageId);
}
$this->cachedStages[$cacheKey] = $stage;
return $stage;
}
private function resolveAmount(array $properties): ?string
{
$amount = null;
if (! empty($properties['amount'])) {
$amount = str_replace(',', '', $properties['amount']);
}
if ($this->config->hasDefaultCurrencyFieldSet()) {
$valueFieldName = $this->config->getDefaultCurrencyField()->getCrmProviderId();
$amount = $properties[$valueFieldName] ?? $amount;
}
return $amount;
}
private function parseCleanDatetime(string $datetime): ?Carbon
{
// Treat pre-1980 values as invalid
$minValidDate = Carbon::parse('1980-01-01 00:00:00');
try {
$date = Carbon::parse($datetime);
if ($minValidDate->gt($date)) {
return null;
}
return $date;
} catch (Exception) {
return null; // On parse error, treat as null
}
}
private function resolveDealProbability(?string $stageProbability): int
{
if ($stageProbability === null) {
return 0;
}
$probability = (float) $stageProbability;
return $probability > 1 ? 0 : (int) ($probability * 100);
}
private function resolveForecastCategory(?string $forecastCategory): string
{
if (! $forecastCategory) {
return Forecast::FORECAST_CATEGORY_UNCATEGORIZED;
}
$forecastCategory = str_replace('_', ' ', $forecastCategory);
return ucwords(strtolower($forecastCategory));
}
private function importExternalFieldData(array $properties, int $opportunityId): void
{
$crmFields = $this->getOpportunitySyncableFields();
$this->importOpportunityCrmFieldData($properties, $crmFields, $opportunityId);
}
private function importOpportunityContacts(Opportunity $opportunity, array $associations): void
{
// Handle empty or missing contact associations
if (empty($associations)) {
// Remove all existing contact associations if none provided
$this->removeAllOpportunityContacts($opportunity);
return;
}
// Use differential sync approach for better performance and accuracy
$this->syncOpportunityContactsDifferential($opportunity, $associations);
}
/**
* Sync opportunity contacts using differential approach
* This compares current vs new associations and only makes necessary changes
*/
private function syncOpportunityContactsDifferential(Opportunity $opportunity, array $contactAssociations): void
{
$currentContactCrmIds = $this->getCurrentContactCrmIds($opportunity);
$contactAssociationIds = array_keys($contactAssociations);
$contactsToAdd = array_diff($contactAssociationIds, $currentContactCrmIds);
$contactsToRemove = array_diff($currentContactCrmIds, $contactAssociationIds);
if (empty($contactsToAdd) && empty($contactsToRemove)) {
return;
}
$this->logContactAssociationChanges($opportunity, $currentContactCrmIds, $contactAssociations, $contactsToAdd, $contactsToRemove);
$this->removeContactAssociations($opportunity, $contactsToRemove);
$this->addContactAssociations($opportunity, $contactsToAdd, $contactAssociations);
}
private function getCurrentContactCrmIds(Opportunity $opportunity): array
{
return $opportunity->contacts()
->pluck('contacts.crm_provider_id')
->toArray();
}
private function logContactAssociationChanges(
Opportunity $opportunity,
array $currentContactCrmIds,
array $contactAssociations,
array $contactsToAdd,
array $contactsToRemove
): void {
$this->logger->info('[' . $this->getDisplayName() . '] Contact association changes', [
'opportunity_id' => $opportunity->getId(),
'current_contacts' => $currentContactCrmIds,
'new_contacts' => $contactAssociations,
'contacts_to_add' => $contactsToAdd,
'contacts_to_remove' => $contactsToRemove,
]);
}
private function removeContactAssociations(Opportunity $opportunity, array $contactsToRemove): void
{
if (empty($contactsToRemove)) {
return;
}
$contactsToDetach = $opportunity->contacts()
->whereIn('contacts.crm_provider_id', $contactsToRemove)
->pluck('contacts.id')
->toArray();
if (! empty($contactsToDetach)) {
$opportunity->contacts()->detach($contactsToDetach);
$this->logger->info('[' . $this->getDisplayName() . '] Removed contact associations', [
'opportunity_id' => $opportunity->getId(),
'removed_contact_crm_ids' => $contactsToRemove,
'removed_contact_count' => count($contactsToDetach),
]);
}
}
private function addContactAssociations(Opportunity $opportunity, array $contactsToAdd, array $contactAssociations): void
{
if (empty($contactsToAdd)) {
return;
}
$contactsAdded = [];
foreach ($contactsToAdd as $crmId) {
$id = $contactAssociations[$crmId];
if ($this->attachSingleContact($opportunity, (string) $crmId, $id)) {
$contactsAdded[] = $crmId;
}
}
$this->logAddedContacts($opportunity, $contactsAdded);
}
private function attachSingleContact(Opportunity $opportunity, string $crmId, int $id): bool
{
try {
$contact = $this->crmEntityRepository->findContactByConfigurationAndId($this->config, $id);
if (! $contact) {
return false;
}
return $this->performContactAttachment($opportunity, $contact, $crmId);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to add contact association', [
'opportunity_id' => $opportunity->getId(),
'contact_crm_id' => $crmId,
'error' => $e->getMessage(),
]);
return false;
}
}
private function performContactAttachment(Opportunity $opportunity, Contact $contact, string $crmId): bool
{
try {
$opportunity->contacts()->attach($contact->getId(), [
'crm_provider_id' => $crmId,
]);
return true;
} catch (\Illuminate\Database\QueryException $e) {
if (str_contains($e->getMessage(), 'Duplicate entry')) {
$this->logger->info('[' . $this->getDisplayName() . '] Contact association already exists', [
'contact_id' => $contact->getId(),
'contact_crm_id' => $crmId,
'opportunity_id' => $opportunity->getId(),
]);
return false;
}
throw $e;
}
}
private function logAddedContacts(Opportunity $opportunity, array $contactsAdded): void
{
if (! empty($contactsAdded)) {
$this->logger->info('[' . $this->getDisplayName() . '] Added contact associations', [
'opportunity_id' => $opportunity->getId(),
'contacts_to_add_count' => count($contactsAdded),
'added_contact_crm_ids' => $contactsAdded,
'added_contacts_count' => count($contactsAdded),
]);
}
}
}
Execute
Explain Plan
Browse Query History...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.03046875,"top":0.017361112,"width":0.0453125,"height":0.022222223},"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"bounds":{"left":0.07578125,"top":0.017361112,"width":0.14960937,"height":0.022222223},"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.78515625,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AutomatedReportsCommandTest","depth":6,"bounds":{"left":0.803125,"top":0.017361112,"width":0.09765625,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AutomatedReportsCommandTest'","depth":6,"bounds":{"left":0.9007813,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AutomatedReportsCommandTest'","depth":6,"bounds":{"left":0.9140625,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"More Actions","depth":6,"bounds":{"left":0.9273437,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JetBrains AI","depth":5,"bounds":{"left":0.96015626,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search Everywhere","depth":5,"bounds":{"left":0.9734375,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"IDE and Project Settings","depth":5,"bounds":{"left":0.9867188,"top":0.017361112,"width":0.013281226,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"bounds":{"left":0.12382813,"top":0.19930555,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.13867188,"top":0.19861111,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"\"podcast_audio_url\"","depth":4,"bounds":{"left":0.1515625,"top":0.19861111,"width":0.06367187,"height":0.013888889},"value":"\"podcast_audio_url\"","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.22578125,"top":0.19861111,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"bounds":{"left":0.2375,"top":0.19861111,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"bounds":{"left":0.24765626,"top":0.19861111,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"bounds":{"left":0.2578125,"top":0.19861111,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"0 results","depth":4,"bounds":{"left":0.27382812,"top":0.19791667,"width":0.030078124,"height":0.015277778},"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.30390626,"top":0.19722222,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.3140625,"top":0.19722222,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"bounds":{"left":0.32421875,"top":0.19722222,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"bounds":{"left":0.334375,"top":0.19722222,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.46640626,"top":0.19722222,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.049609374,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"32","depth":4,"bounds":{"left":0.42539063,"top":0.22430556,"width":0.012109375,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.43984374,"top":0.22430556,"width":0.009375,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.4515625,"top":0.22430556,"width":0.011328125,"height":0.013194445},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.46484375,"top":0.22291666,"width":0.00859375,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Highlighted Error","depth":4,"bounds":{"left":0.4734375,"top":0.22291666,"width":0.008203125,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits;\n\nuse Carbon\\Carbon;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\CollectionResponseAssociatedId;\nuse Jiminny\\Exceptions\\InvalidArgumentException;\nuse Jiminny\\Models\\Account;\nuse Exception;\nuse Jiminny\\Component\\DealInsights\\Forecast\\Forecast;\nuse Jiminny\\Jobs\\Crm\\MatchActivitiesToNewOpportunity;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\BusinessProcess;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Models\\Opportunity;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\CrmEntityRepository;\nuse Jiminny\\Services\\Crm\\Hubspot\\DealFieldsService;\nuse Jiminny\\Services\\Crm\\Hubspot\\OpportunitySyncStrategy\\HubspotSingleSyncStrategy;\nuse Jiminny\\Services\\Crm\\Hubspot\\WebhookSyncBatchProcessor;\nuse Jiminny\\Services\\Crm\\OpportunitySyncStrategyResolver;\nuse Jiminny\\Utils\\CurrencyFormatter;\n\n/**\n * Optimized sync methods for better performance\n * These methods can be integrated into SyncCrmEntitiesTrait for significant performance gains\n */\ntrait OpportunitySyncTrait\n{\n private const int BATCH_SIZE = 100;\n private const int BATCH_PROCESS_SIZE = 800;\n\n protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;\n protected CrmEntityRepository $crmEntityRepository;\n protected DealFieldsService $dealFieldsService;\n\n private ?array $cachedClosedDealStages = null;\n private array $cachedBusinessProcesses = [];\n private array $cachedStages = [];\n\n public function syncOpportunities(array $parameters, ?string $strategy = null): int\n {\n $strategies = $this->opportunitySyncStrategyResolver->getStrategies($this->config, $strategy);\n $parameters['config'] = $this->config;\n $syncCount = 0;\n $reportedTotal = 0;\n $lastSyncedId = [];\n\n try {\n foreach ($strategies as $strategyName => $syncStrategy) {\n $this->logger->info(\n '[' . $this->getDisplayName() . '] Syncing opportunities using strategy: ' .\n $strategyName\n );\n\n $total = 0;\n $lastId = null;\n $buffer = [];\n\n // HubspotWebhookBatchSyncStrategy returns empty generator, this is for other strategies\n foreach ($syncStrategy->fetchOpportunities($parameters, $total, $lastId) as $hsOpportunity) {\n $buffer[] = $hsOpportunity;\n\n // process every 800 rows (fits < 1 000 association limit)\n if (\\count($buffer) >= self::BATCH_PROCESS_SIZE) {\n $syncCount += $this->processOpportunityBatch($buffer);\n $buffer = [];\n }\n }\n\n // leftovers\n if ($buffer) {\n $syncCount += $this->processOpportunityBatch($buffer);\n }\n\n $reportedTotal += $total;\n $lastSyncedId = $lastId;\n }\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException | CrmException $e) {\n $this->handleSyncException($e, $parameters);\n }\n\n $this->logger->info(\n '[HubSpot] Synced opportunities',\n [\n 'team' => $this->team->getId(),\n 'sync_count' => $syncCount,\n 'total' => $reportedTotal,\n 'last_synced_id' => $lastSyncedId,\n ]\n );\n\n return $reportedTotal;\n }\n\n private function handleSyncException(\\Throwable $e, array $parameters): void\n {\n if (($parameters['since'] ?? null) instanceof Carbon) {\n $parameters['since'] = $parameters['since']->toDateTimeString();\n }\n $parameters['config'] = $this->config->getId();\n\n $this->logger->warning('[' . $this->getDisplayName() . '] Sync opportunities failed', [\n 'teamId' => $this->team->getUuid(),\n 'parameters' => $parameters,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n /**\n * @inheritdoc\n */\n public function syncOpportunity(string $crmId): ?Opportunity\n {\n $strategy = $this->opportunitySyncStrategyResolver->resolve(\n $this->config,\n OpportunitySyncStrategyResolver::SINGLE_SYNC_OPPORTUNITY_STRATEGY,\n );\n\n $parameters = [\n 'config' => $this->config,\n 'crm_id' => $crmId,\n ];\n\n try {\n if (! $strategy instanceof HubspotSingleSyncStrategy) {\n throw new InvalidArgumentException('Strategy must by HubspotSingleSyncStrategy');\n }\n\n $hsOpportunity = $strategy->fetchOpportunity($parameters);\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException $e) {\n $this->logger->info('[' . $this->getDisplayName() . '] Opportunity not found', [\n 'teamId' => $this->team->getUuid(),\n 'crmId' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n return null;\n }\n\n $hsOpportunity['associations'] = $this->convertDealAssociations($hsOpportunity['associations'] ?? []);\n\n return $this->importOrUpdateOpportunity($hsOpportunity);\n }\n\n /**\n * Process webhook-collected opportunity batches.\n *\n * Drains Redis sets containing company CRM IDs collected from webhook events\n * and dispatches ImportOpportunityBatch jobs for batch processing.\n *\n * @return int Number of opportunity IDs dispatched to jobs\n */\n public function batchSyncOpportunities(): int\n {\n $configId = $this->team->getCrmConfiguration()->getId();\n\n return $this->batchProcessor->processBatchesForObjectType(\n WebhookSyncBatchProcessor::OBJECT_TYPE_DEAL,\n $configId\n );\n }\n\n /**\n * Import a batch of opportunities by their CRM IDs.\n * Fetches opportunity data from HubSpot API and delegates to importOpportunityBatch().\n *\n * @param array<string> $crmIds HubSpot deal CRM IDs\n *\n * @return array{success: array, failed_ids: array, errors?: array<string, string>}\n */\n public function importOpportunityBatchByIds(array $crmIds): array\n {\n $fields = $this->dealFieldsService->getFieldsForConfiguration($this->config);\n\n $allDeals = [];\n foreach (array_chunk($crmIds, self::BATCH_SIZE) as $chunk) {\n $deals = $this->client->getOpportunitiesByIds($chunk, $fields);\n foreach ($deals as $deal) {\n $allDeals[] = $deal;\n }\n }\n\n // IDs not returned by HubSpot are likely deleted or inaccessible deals.\n // These are not failures — retrying won't bring them back.\n $fetchedIds = array_map('strval', array_column($allDeals, 'id'));\n $notFoundIds = array_values(array_diff(array_map('strval', $crmIds), $fetchedIds));\n\n if (! empty($notFoundIds)) {\n $this->logger->info('[' . $this->getDisplayName() . '] CRM IDs not found in HubSpot (likely deleted)', [\n 'teamId' => $this->team->getId(),\n 'notFoundCount' => \\count($notFoundIds),\n 'notFoundIds' => $notFoundIds,\n 'requestedCount' => \\count($crmIds),\n 'fetchedCount' => \\count($allDeals),\n ]);\n }\n\n if (empty($allDeals)) {\n return ['success' => [], 'failed_ids' => []];\n }\n\n return $this->importOpportunityBatch($allDeals);\n }\n\n private function getClosedDealStages(): array\n {\n if ($this->cachedClosedDealStages !== null) {\n return $this->cachedClosedDealStages;\n }\n\n $stages = $this->crmEntityRepository->getOpportunityClosedStages($this->config);\n $data = [\n 'lost' => [],\n 'won' => [],\n ];\n\n foreach ($stages as $stage) {\n if ($stage->probability == 0.00) {\n $data['lost'][] = $stage->crm_provider_id;\n }\n if ($stage->probability == 100.00) {\n $data['won'][] = $stage->crm_provider_id;\n }\n }\n\n $this->cachedClosedDealStages = $data;\n\n return $data;\n }\n\n /**\n * Import deals into the database with pre-fetched associations.\n *\n * API calls here (getAssociationsData, getExistingOpportunityCrmIds) are NOT\n * caught — if they throw, the exception propagates to ImportOpportunityBatch::handle()\n * where Laravel retries the whole job with backoff. After all retries exhausted,\n * failed() requeues all IDs to Redis.\n *\n * The per-deal loop catches exceptions individually. A deal can end up in three states:\n * - success: imported/updated successfully\n * - failed_ids: exception thrown (DB constraint violation, corrupt data, etc.)\n * These are permanent issues — retrying won't fix them.\n * - skipped (null): missing dependencies (no account, unknown pipeline/stage).\n * This is acceptable — the deal cannot be imported until those exist.\n */\n private function importOpportunityBatch(array $deals): array\n {\n $syncedOpportunities = [\n 'success' => [],\n 'failed_ids' => [],\n ];\n $dealIds = array_column($deals, 'id');\n\n // Shared association/existing-ID preparation is batch-level state. If it fails, rethrow so the\n // queue job retries the whole batch and eventually requeues all deal IDs back to Redis.\n try {\n $companyAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'companies');\n $contactAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'contacts');\n\n $associationsData = $this->prepareAssociatedEntities($companyAssociations, $contactAssociations);\n\n $existingCrmIds = $this->crmEntityRepository->getExistingOpportunityCrmIds(\n $this->config,\n array_map('strval', $dealIds)\n );\n $existingCrmIdSet = array_flip($existingCrmIds);\n } catch (\\Throwable $e) {\n $this->logger->error('[' . $this->getDisplayName() . '] Failed to fetch associations or existing IDs', [\n 'teamId' => $this->team->getId(),\n 'dealCount' => count($dealIds),\n 'error' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n foreach ($deals as $deal) {\n try {\n $deal['associations'] = $this->prepareAssociationsForOpportunity(\n $deal['id'],\n $companyAssociations,\n $contactAssociations,\n $associationsData\n );\n\n $syncedOpportunity = $this->importOrUpdateOpportunity(\n $deal,\n isset($existingCrmIdSet[(string) $deal['id']])\n );\n if ($syncedOpportunity) {\n $syncedOpportunities['success'][] = $syncedOpportunity;\n }\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to import opportunity', [\n 'teamId' => $this->team->getId(),\n 'crmId' => $deal['id'],\n 'error' => $e->getMessage(),\n ]);\n $syncedOpportunities['failed_ids'][] = $deal['id'];\n $syncedOpportunities['errors'][$deal['id']] = $e->getMessage();\n }\n }\n\n return $syncedOpportunities;\n }\n\n /**\n * Prepare associated entities for opportunities with optimized batch processing\n * Returns structured data with CRM ID to DB ID mappings for each opportunity\n */\n private function prepareAssociatedEntities(array $companyAssociations, array $contactAssociations): array\n {\n // Step 1: Collect all unique company and contact IDs from associations\n $allCompanyIds = $this->flattenAssociationIds($companyAssociations);\n $allContactIds = $this->flattenAssociationIds($contactAssociations);\n\n // Step 2: Batch sync missing entities and get CRM ID to DB ID mappings\n $companyIdMappings = [];\n $contactIdMappings = [];\n\n if (! empty($allCompanyIds)) {\n $companyIdMappings = $this->prepareAssociatedAccounts($allCompanyIds);\n }\n\n if (! empty($allContactIds)) {\n $contactIdMappings = $this->prepareAssociatedContacts($allContactIds);\n }\n\n return [\n 'company_id_mappings' => $companyIdMappings,\n 'contact_id_mappings' => $contactIdMappings,\n ];\n }\n\n /**\n * Flatten association data to get unique IDs\n */\n private function flattenAssociationIds(array $associations): array\n {\n $ids = [];\n foreach ($associations as $dealAssociations) {\n if (is_array($dealAssociations)) {\n foreach ($dealAssociations as $id) {\n $ids[$id] = true;\n }\n }\n }\n\n return array_keys($ids);\n }\n\n /**\n * Batch sync missing accounts\n */\n private function prepareAssociatedAccounts(array $companyIds): array\n {\n // Find which accounts already exist\n $existingAccounts = $this->crmEntityRepository\n ->findAccountsByExternalIds($this->config, $companyIds);\n\n $existingCompanyIds = $existingAccounts->pluck('crm_provider_id')->toArray();\n\n $existingAccountsData = $existingAccounts->mapWithKeys(function ($account) {\n return [$account->getCrmProviderId() => $account->getId()];\n })->toArray();\n\n $missingCompanyIds = array_diff($companyIds, $existingCompanyIds);\n\n if (empty($missingCompanyIds)) {\n return $existingAccountsData;\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing accounts', [\n 'teamId' => $this->team->getUuid(),\n 'total_companies' => count($companyIds),\n 'existing_companies' => count($existingCompanyIds),\n 'missing_companies' => count($missingCompanyIds),\n ]);\n\n // we already have limit on opportunity ids count\n // Initialize variable before try block\n $syncedAccountsData = [];\n\n try {\n $syncedAccountsData = $this->batchSyncCrmObjects('companies', $missingCompanyIds);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing accounts', [\n 'size' => count($missingCompanyIds),\n 'error' => $e->getMessage(),\n ]);\n $syncedAccountsData = [];\n }\n\n return $existingAccountsData + $syncedAccountsData;\n }\n\n /**\n * Prepare associated contacts - find existing and sync missing ones\n * Returns mapping of CRM ID to DB ID\n */\n private function prepareAssociatedContacts(array $contactIds): array\n {\n // Find which contacts already exist\n $existingContacts = $this->crmEntityRepository\n ->findContactsByExternalIds($this->config, $contactIds);\n\n $existingContactIds = $existingContacts->pluck('crm_provider_id')->toArray();\n\n // Create mapping for existing contacts\n $existingContactsData = $existingContacts->mapWithKeys(function ($contact) {\n return [$contact->getCrmProviderId() => $contact->getId()];\n })->toArray();\n\n $missingContactIds = array_diff($contactIds, $existingContactIds);\n\n if (empty($missingContactIds)) {\n return $existingContactsData;\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing contacts', [\n 'teamId' => $this->team->getUuid(),\n 'total_contacts' => count($contactIds),\n 'existing_contacts' => count($existingContactIds),\n 'missing_contacts' => count($missingContactIds),\n ]);\n\n // Sync missing contacts using batch API\n try {\n $syncedContactsData = $this->batchSyncCrmObjects('contacts', $missingContactIds);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing contacts', [\n 'size' => count($missingContactIds),\n 'error' => $e->getMessage(),\n ]);\n $syncedContactsData = [];\n }\n\n return $existingContactsData + $syncedContactsData;\n }\n\n private function batchSyncCrmObjects(string $objectType, array $crmIds): array\n {\n $syncObjects = [];\n $crmObjectIds = array_values($crmIds);\n\n foreach (array_chunk($crmObjectIds, self::BATCH_SIZE) as $chunk) {\n try {\n $objects = $objectType === 'companies' ?\n $this->client->getCompaniesByIds($chunk, $this->getCompanyFields()) :\n $this->client->getContactsByIds($chunk, $this->getContactFields());\n\n foreach ($objects as $objectId => $objectData) {\n $this->importCrmObject($objectType, (string) $objectId, $objectData, $syncObjects);\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch synced ' . $objectType, [\n 'requested_count' => count($chunk),\n 'synced_count' => count($objects),\n ]);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Batch ' . $objectType . ' sync failed', [\n 'ids' => $chunk,\n 'error' => $e->getMessage(),\n ]);\n }\n }\n\n return $syncObjects;\n }\n\n private function importCrmObject(string $objectType, string $objectId, mixed $objectData, array &$syncObjects): void\n {\n try {\n $object = $objectType === 'companies' ?\n $this->importAccount($objectData) :\n $this->importContact($objectData);\n\n if ($object) {\n $syncObjects[$object->getCrmProviderId()] = $object->getId();\n }\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to import batch ' . $objectType, [\n 'id' => $objectId,\n 'error' => $e->getMessage(),\n ]);\n }\n }\n\n /**\n * Prepare associations for a single opportunity\n *\n * The return value is an array with the following structure:\n * [\n * 'companies' => [\n * $companyCrmId => $companyId,\n * ...\n * ],\n * 'contacts' => [\n * $contactCrmId => $contactId,\n * ...\n * ],\n * 'account_id' => $accountId,\n * ]\n */\n private function prepareAssociationsForOpportunity(\n string $oppCrmId,\n array $companyAssociations,\n array $contactAssociations,\n array $associationsData\n ): array {\n $associations = [\n 'companies' => [],\n 'contacts' => [],\n 'account_id' => null, // Primary account for opportunity\n ];\n\n $oppCompanyIds = $companyAssociations[$oppCrmId] ?? [];\n foreach ($oppCompanyIds as $companyCrmId) {\n if (isset($associationsData['company_id_mappings'][$companyCrmId])) {\n $associations['companies'][$companyCrmId] = $associationsData['company_id_mappings'][$companyCrmId];\n\n // Set primary account (first company becomes primary account)\n if ($associations['account_id'] === null) {\n $associations['account_id'] = $associationsData['company_id_mappings'][$companyCrmId];\n }\n }\n }\n\n $oppContactIds = $contactAssociations[$oppCrmId] ?? [];\n foreach ($oppContactIds as $contactCrmId) {\n if (isset($associationsData['contact_id_mappings'][$contactCrmId])) {\n $associations['contacts'][$contactCrmId] = $associationsData['contact_id_mappings'][$contactCrmId];\n }\n }\n\n return $associations;\n }\n\n /**\n * Update only associations for an opportunity\n */\n private function updateOpportunityAssociations(Opportunity $opportunity, array $associations): void\n {\n // Update contact associations\n $this->importOpportunityContacts($opportunity, $associations['contacts']);\n\n // Update company (account) associations\n $this->updateOpportunityAccount($opportunity, $associations['account_id']);\n }\n\n /**\n * Remove all contact associations from an opportunity\n */\n private function removeAllOpportunityContacts(Opportunity $opportunity): void\n {\n $currentCount = (int) $opportunity->contacts()->count();\n\n if ($currentCount > 0) {\n $opportunity->contacts()->detach();\n\n $this->logger->info('[' . $this->getDisplayName() . '] Removed all contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'removed_count' => $currentCount,\n ]);\n }\n }\n\n private function updateOpportunityAccount(Opportunity $opportunity, ?int $accountId): void\n {\n if ($accountId === null) {\n // No account ID provided - keep current account\n return;\n }\n\n $currentAccountId = $opportunity->getAccountId();\n\n // Only update if account has changed\n if ($currentAccountId !== $accountId) {\n $opportunity->account_id = $accountId;\n $opportunity->save();\n\n $this->logger->info('[' . $this->getDisplayName() . '] Updated opportunity account association', [\n 'opportunity_id' => $opportunity->getId(),\n 'old_account_id' => $currentAccountId,\n 'new_account_id' => $accountId,\n ]);\n }\n }\n\n /**\n * Find existing opportunities by external IDs (OPTIMIZED VERSION)\n * Uses batch query for better performance\n */\n private function findExistingOpportunities(array $crmIds): Collection\n {\n return $this->crmEntityRepository\n ->findOpportunitiesByExternalIds($this->config, $crmIds);\n }\n\n private function processOpportunityBatch(array $opportunities): int\n {\n $syncedOpportunities = $this->importOpportunityBatch($opportunities);\n\n return count($syncedOpportunities['success'] ?? []);\n }\n\n /**\n * Convert single deal associations from HubSpot format to internal format\n * Handles both HubSpot SDK objects and array formats\n *\n * @param array $opportunityAssociations Raw associations from HubSpot API or pre-processed\n *\n * @return array Processed associations with DB IDs\n */\n private function convertDealAssociations(array $opportunityAssociations): array\n {\n $associations = $this->initializeAssociationsStructure();\n\n if (empty($opportunityAssociations)) {\n return $associations;\n }\n\n $associationIds = $this->extractAssociationIds($opportunityAssociations);\n\n $this->processCompanyAssociations($associationIds, $associations);\n $this->processContactAssociations($associationIds, $associations);\n\n return $associations;\n }\n\n private function initializeAssociationsStructure(): array\n {\n return [\n 'companies' => [],\n 'contacts' => [],\n 'account_id' => null, // Primary account for opportunity\n ];\n }\n\n private function extractAssociationIds(array $opportunityAssociations): array\n {\n $associationIds = [];\n\n foreach ($opportunityAssociations as $type => $associationData) {\n if (! empty($associationData)) {\n $associationIds[$type] = $this->convertSingleDealAssociations($associationData);\n }\n }\n\n return $associationIds;\n }\n\n private function processCompanyAssociations(array $associationIds, array &$associations): void\n {\n if (empty($associationIds['companies'])) {\n return;\n }\n\n $companyId = $associationIds['companies'][0];\n $account = $this->findOrSyncAccount($companyId);\n\n if ($account instanceof Account) {\n $associations['companies'][$companyId] = $account->getId();\n $associations['account_id'] = $account->getId();\n }\n }\n\n private function processContactAssociations(array $associationIds, array &$associations): void\n {\n if (empty($associationIds['contacts'])) {\n return;\n }\n\n foreach ($associationIds['contacts'] as $contactId) {\n $contact = $this->findOrSyncContact($contactId);\n\n if ($contact instanceof Contact) {\n $associations['contacts'][$contactId] = $contact->getId();\n }\n }\n }\n\n private function findOrSyncAccount(string $companyId): ?Account\n {\n $account = $this->crmEntityRepository->findAccountByExternalId($this->config, $companyId);\n\n if (! $account instanceof Account) {\n $account = $this->syncAccount($companyId);\n }\n\n return $account;\n }\n\n private function findOrSyncContact(string $contactId): ?Contact\n {\n $contact = $this->crmEntityRepository->findContactByExternalId($this->config, $contactId);\n\n if (! $contact instanceof Contact) {\n $contact = $this->syncContact($contactId);\n }\n\n return $contact;\n }\n\n private function convertSingleDealAssociations($opportunityAssociations = null): array\n {\n $associationData = [];\n\n if ($opportunityAssociations === null) {\n return $associationData;\n }\n\n // Handle array input (from extractAssociationIds)\n if (is_array($opportunityAssociations)) {\n return $opportunityAssociations;\n }\n\n // Handle CollectionResponseAssociatedId object\n if ($opportunityAssociations instanceof CollectionResponseAssociatedId) {\n foreach ($opportunityAssociations->getResults() as $association) {\n $associationData[] = $association->getId();\n }\n }\n\n return $associationData;\n }\n\n private function importOrUpdateOpportunity($crmData, ?bool $exists = null): ?Opportunity\n {\n if (empty($crmData['properties'])) {\n return null;\n }\n\n $crmId = (string) $crmData['id'];\n $properties = $crmData['properties'];\n $associations = $crmData['associations'] ?? [];\n\n $opportunityExists = $exists ?? (bool) $this->crmEntityRepository->findOpportunityByExternalId(\n $this->config,\n $crmId\n );\n\n if ($opportunityExists) {\n return $this->updateOpportunity($crmId, $properties, $associations);\n } else {\n return $this->createOpportunity($crmId, $properties, $associations);\n }\n }\n\n /**\n * Create new opportunity\n */\n private function createOpportunity(string $crmId, array $properties, array $associations): ?Opportunity\n {\n $accountId = $this->resolveAccountId($associations);\n if (! $accountId) {\n return null;\n }\n\n $businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);\n if (! $businessProcess) {\n return null;\n }\n\n $stage = $this->resolveStage($businessProcess, $properties['dealstage'] ?? null);\n if (! $stage) {\n return null;\n }\n\n $data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);\n\n $attributes = [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $crmId,\n ];\n\n $values = array_merge($attributes, $data);\n\n $opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);\n\n $this->importExternalFieldData($properties, $opportunity->getId());\n $this->importOpportunityContacts($opportunity, $associations['contacts']);\n\n if ($opportunity->wasRecentlyCreated) {\n MatchActivitiesToNewOpportunity::dispatch($opportunity->getId());\n }\n\n return $opportunity;\n }\n\n /**\n * Update existing opportunity\n */\n private function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity\n {\n $accountId = $this->resolveAccountId($associations);\n $businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);\n $stage = $businessProcess ? $this->resolveStage($businessProcess, $properties['dealstage'] ?? null) : null;\n\n $data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);\n\n $attributes = [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $crmId,\n ];\n\n $values = array_merge($attributes, $data);\n $opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);\n\n $this->importExternalFieldData($properties, $opportunity->getId());\n $this->updateOpportunityAssociations($opportunity, $associations);\n\n return $opportunity;\n }\n\n private function resolveAccountId(array $associations): ?int\n {\n if (! empty($associations['accountId'])) {\n return $associations['accountId'];\n }\n\n if (empty($associations)) {\n return null;\n }\n\n // we can't resolve multiple account ids (currently SDK returns one company)\n foreach ($associations['companies'] as $accountId) {\n return $accountId;\n }\n\n return null;\n }\n\n private function buildOpportunityData(\n array $properties,\n ?int $accountId,\n ?BusinessProcess $businessProcess,\n ?Stage $stage\n ): array {\n $ownerId = null;\n $profile = null;\n if (! empty($properties['hubspot_owner_id'])) {\n $ownerId = $properties['hubspot_owner_id'];\n $profile = $this->crmEntityRepository->findProfileByExternalId($this->config, (string) $ownerId);\n }\n\n $name = 'Unknown';\n if (isset($properties['dealname'])) {\n $name = mb_strimwidth($properties['dealname'], 0, 128);\n }\n\n $amount = $this->resolveAmount($properties);\n $currency = $properties['deal_currency_code'] ?? null;\n\n $closeDate = null;\n if (! empty($properties['closedate'])) {\n $closeDate = Carbon::parse($properties['closedate'])->format('Y-m-d');\n }\n\n $remotelyCreatedAt = null;\n if (! empty($properties['createdate']) && strtotime($properties['createdate'])) {\n $date = $this->parseCleanDatetime($properties['createdate']);\n $remotelyCreatedAt = $date?->format('Y-m-d H:i:s');\n }\n\n $closedStages = $this->getClosedDealStages();\n $isWon = in_array($properties['dealstage'], $closedStages['won']);\n $isLost = in_array($properties['dealstage'], $closedStages['lost']);\n\n $data = [\n 'team_id' => $this->team->getId(),\n 'user_id' => $profile ? $profile->user_id : null,\n 'owner_id' => $ownerId,\n 'name' => $name,\n 'value' => ! empty($amount) ? $amount : null,\n 'currency_code' => CurrencyFormatter::formatCode($currency),\n 'close_date' => $closeDate,\n 'is_closed' => $isWon || $isLost,\n 'is_won' => $isWon,\n 'remotely_created_at' => $remotelyCreatedAt,\n 'probability' => $this->resolveDealProbability($properties['hs_deal_stage_probability']),\n 'forecast_category' => $this->resolveForecastCategory($properties['hs_manual_forecast_category']),\n ];\n\n if ($accountId) {\n $data['account_id'] = $accountId;\n }\n\n if ($stage) {\n $data['stage_id'] = $stage->id;\n }\n\n if ($businessProcess) {\n $recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);\n if ($recordType) {\n $data['record_type_id'] = $recordType->id;\n }\n }\n\n return $data;\n }\n\n private function resolveBusinessProcess(?string $pipelineId): ?BusinessProcess\n {\n if ($pipelineId === null) {\n return null;\n }\n\n if (isset($this->cachedBusinessProcesses[$pipelineId])) {\n return $this->cachedBusinessProcesses[$pipelineId];\n }\n\n $businessProcess = $this->getBusinessProcess($pipelineId);\n\n if (! $businessProcess instanceof BusinessProcess) {\n $this->importStages();\n $businessProcess = $this->getBusinessProcess($pipelineId);\n }\n\n if (! $businessProcess instanceof BusinessProcess) {\n $this->logger->info(\n '[HubSpot] Deal is not attached to a pipeline',\n [\n 'pipeline' => $pipelineId]\n );\n }\n\n $this->cachedBusinessProcesses[$pipelineId] = $businessProcess;\n\n return $businessProcess;\n }\n\n private function getBusinessProcess(string $pipelineId): ?BusinessProcess\n {\n return $this->crmEntityRepository->findBusinessProcessesByExternalId($this->config, $pipelineId);\n }\n\n private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage\n {\n if (empty($stageId)) {\n return null;\n }\n\n $cacheKey = $businessProcess->getId() . ':' . $stageId;\n if (isset($this->cachedStages[$cacheKey])) {\n return $this->cachedStages[$cacheKey];\n }\n\n $stage = $this->crmEntityRepository->getPipelineStageByConditions(\n $businessProcess,\n [\n 'crm_provider_id' => $stageId,\n 'type' => Stage::TYPE_OPPORTUNITY,\n ]\n );\n\n if ($stage === null) {\n $this->importStages(null, $stageId);\n }\n\n if ($stage === null) {\n $this->logger->info('[HubSpot] Stage does not exist => ' . $stageId);\n }\n\n $this->cachedStages[$cacheKey] = $stage;\n\n return $stage;\n }\n\n private function resolveAmount(array $properties): ?string\n {\n $amount = null;\n if (! empty($properties['amount'])) {\n $amount = str_replace(',', '', $properties['amount']);\n }\n\n if ($this->config->hasDefaultCurrencyFieldSet()) {\n $valueFieldName = $this->config->getDefaultCurrencyField()->getCrmProviderId();\n $amount = $properties[$valueFieldName] ?? $amount;\n }\n\n return $amount;\n }\n\n private function parseCleanDatetime(string $datetime): ?Carbon\n {\n // Treat pre-1980 values as invalid\n $minValidDate = Carbon::parse('1980-01-01 00:00:00');\n\n try {\n $date = Carbon::parse($datetime);\n\n if ($minValidDate->gt($date)) {\n return null;\n }\n\n return $date;\n } catch (Exception) {\n return null; // On parse error, treat as null\n }\n }\n\n private function resolveDealProbability(?string $stageProbability): int\n {\n if ($stageProbability === null) {\n return 0;\n }\n\n $probability = (float) $stageProbability;\n\n return $probability > 1 ? 0 : (int) ($probability * 100);\n }\n\n private function resolveForecastCategory(?string $forecastCategory): string\n {\n if (! $forecastCategory) {\n return Forecast::FORECAST_CATEGORY_UNCATEGORIZED;\n }\n\n $forecastCategory = str_replace('_', ' ', $forecastCategory);\n\n return ucwords(strtolower($forecastCategory));\n }\n\n private function importExternalFieldData(array $properties, int $opportunityId): void\n {\n $crmFields = $this->getOpportunitySyncableFields();\n $this->importOpportunityCrmFieldData($properties, $crmFields, $opportunityId);\n }\n\n private function importOpportunityContacts(Opportunity $opportunity, array $associations): void\n {\n // Handle empty or missing contact associations\n if (empty($associations)) {\n // Remove all existing contact associations if none provided\n $this->removeAllOpportunityContacts($opportunity);\n\n return;\n }\n\n // Use differential sync approach for better performance and accuracy\n $this->syncOpportunityContactsDifferential($opportunity, $associations);\n }\n\n /**\n * Sync opportunity contacts using differential approach\n * This compares current vs new associations and only makes necessary changes\n */\n private function syncOpportunityContactsDifferential(Opportunity $opportunity, array $contactAssociations): void\n {\n $currentContactCrmIds = $this->getCurrentContactCrmIds($opportunity);\n $contactAssociationIds = array_keys($contactAssociations);\n\n $contactsToAdd = array_diff($contactAssociationIds, $currentContactCrmIds);\n $contactsToRemove = array_diff($currentContactCrmIds, $contactAssociationIds);\n\n if (empty($contactsToAdd) && empty($contactsToRemove)) {\n return;\n }\n\n $this->logContactAssociationChanges($opportunity, $currentContactCrmIds, $contactAssociations, $contactsToAdd, $contactsToRemove);\n\n $this->removeContactAssociations($opportunity, $contactsToRemove);\n $this->addContactAssociations($opportunity, $contactsToAdd, $contactAssociations);\n }\n\n private function getCurrentContactCrmIds(Opportunity $opportunity): array\n {\n return $opportunity->contacts()\n ->pluck('contacts.crm_provider_id')\n ->toArray();\n }\n\n private function logContactAssociationChanges(\n Opportunity $opportunity,\n array $currentContactCrmIds,\n array $contactAssociations,\n array $contactsToAdd,\n array $contactsToRemove\n ): void {\n $this->logger->info('[' . $this->getDisplayName() . '] Contact association changes', [\n 'opportunity_id' => $opportunity->getId(),\n 'current_contacts' => $currentContactCrmIds,\n 'new_contacts' => $contactAssociations,\n 'contacts_to_add' => $contactsToAdd,\n 'contacts_to_remove' => $contactsToRemove,\n ]);\n }\n\n private function removeContactAssociations(Opportunity $opportunity, array $contactsToRemove): void\n {\n if (empty($contactsToRemove)) {\n return;\n }\n\n $contactsToDetach = $opportunity->contacts()\n ->whereIn('contacts.crm_provider_id', $contactsToRemove)\n ->pluck('contacts.id')\n ->toArray();\n\n if (! empty($contactsToDetach)) {\n $opportunity->contacts()->detach($contactsToDetach);\n\n $this->logger->info('[' . $this->getDisplayName() . '] Removed contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'removed_contact_crm_ids' => $contactsToRemove,\n 'removed_contact_count' => count($contactsToDetach),\n ]);\n }\n }\n\n private function addContactAssociations(Opportunity $opportunity, array $contactsToAdd, array $contactAssociations): void\n {\n if (empty($contactsToAdd)) {\n return;\n }\n\n $contactsAdded = [];\n foreach ($contactsToAdd as $crmId) {\n $id = $contactAssociations[$crmId];\n\n if ($this->attachSingleContact($opportunity, (string) $crmId, $id)) {\n $contactsAdded[] = $crmId;\n }\n }\n\n $this->logAddedContacts($opportunity, $contactsAdded);\n }\n\n private function attachSingleContact(Opportunity $opportunity, string $crmId, int $id): bool\n {\n try {\n $contact = $this->crmEntityRepository->findContactByConfigurationAndId($this->config, $id);\n\n if (! $contact) {\n return false;\n }\n\n return $this->performContactAttachment($opportunity, $contact, $crmId);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to add contact association', [\n 'opportunity_id' => $opportunity->getId(),\n 'contact_crm_id' => $crmId,\n 'error' => $e->getMessage(),\n ]);\n\n return false;\n }\n }\n\n private function performContactAttachment(Opportunity $opportunity, Contact $contact, string $crmId): bool\n {\n try {\n $opportunity->contacts()->attach($contact->getId(), [\n 'crm_provider_id' => $crmId,\n ]);\n\n return true;\n } catch (\\Illuminate\\Database\\QueryException $e) {\n if (str_contains($e->getMessage(), 'Duplicate entry')) {\n $this->logger->info('[' . $this->getDisplayName() . '] Contact association already exists', [\n 'contact_id' => $contact->getId(),\n 'contact_crm_id' => $crmId,\n 'opportunity_id' => $opportunity->getId(),\n ]);\n\n return false;\n }\n\n throw $e;\n }\n }\n\n private function logAddedContacts(Opportunity $opportunity, array $contactsAdded): void\n {\n if (! empty($contactsAdded)) {\n $this->logger->info('[' . $this->getDisplayName() . '] Added contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'contacts_to_add_count' => count($contactsAdded),\n 'added_contact_crm_ids' => $contactsAdded,\n 'added_contacts_count' => count($contactsAdded),\n ]);\n }\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits;\n\nuse Carbon\\Carbon;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\CollectionResponseAssociatedId;\nuse Jiminny\\Exceptions\\InvalidArgumentException;\nuse Jiminny\\Models\\Account;\nuse Exception;\nuse Jiminny\\Component\\DealInsights\\Forecast\\Forecast;\nuse Jiminny\\Jobs\\Crm\\MatchActivitiesToNewOpportunity;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\BusinessProcess;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Models\\Opportunity;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\CrmEntityRepository;\nuse Jiminny\\Services\\Crm\\Hubspot\\DealFieldsService;\nuse Jiminny\\Services\\Crm\\Hubspot\\OpportunitySyncStrategy\\HubspotSingleSyncStrategy;\nuse Jiminny\\Services\\Crm\\Hubspot\\WebhookSyncBatchProcessor;\nuse Jiminny\\Services\\Crm\\OpportunitySyncStrategyResolver;\nuse Jiminny\\Utils\\CurrencyFormatter;\n\n/**\n * Optimized sync methods for better performance\n * These methods can be integrated into SyncCrmEntitiesTrait for significant performance gains\n */\ntrait OpportunitySyncTrait\n{\n private const int BATCH_SIZE = 100;\n private const int BATCH_PROCESS_SIZE = 800;\n\n protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;\n protected CrmEntityRepository $crmEntityRepository;\n protected DealFieldsService $dealFieldsService;\n\n private ?array $cachedClosedDealStages = null;\n private array $cachedBusinessProcesses = [];\n private array $cachedStages = [];\n\n public function syncOpportunities(array $parameters, ?string $strategy = null): int\n {\n $strategies = $this->opportunitySyncStrategyResolver->getStrategies($this->config, $strategy);\n $parameters['config'] = $this->config;\n $syncCount = 0;\n $reportedTotal = 0;\n $lastSyncedId = [];\n\n try {\n foreach ($strategies as $strategyName => $syncStrategy) {\n $this->logger->info(\n '[' . $this->getDisplayName() . '] Syncing opportunities using strategy: ' .\n $strategyName\n );\n\n $total = 0;\n $lastId = null;\n $buffer = [];\n\n // HubspotWebhookBatchSyncStrategy returns empty generator, this is for other strategies\n foreach ($syncStrategy->fetchOpportunities($parameters, $total, $lastId) as $hsOpportunity) {\n $buffer[] = $hsOpportunity;\n\n // process every 800 rows (fits < 1 000 association limit)\n if (\\count($buffer) >= self::BATCH_PROCESS_SIZE) {\n $syncCount += $this->processOpportunityBatch($buffer);\n $buffer = [];\n }\n }\n\n // leftovers\n if ($buffer) {\n $syncCount += $this->processOpportunityBatch($buffer);\n }\n\n $reportedTotal += $total;\n $lastSyncedId = $lastId;\n }\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException | CrmException $e) {\n $this->handleSyncException($e, $parameters);\n }\n\n $this->logger->info(\n '[HubSpot] Synced opportunities',\n [\n 'team' => $this->team->getId(),\n 'sync_count' => $syncCount,\n 'total' => $reportedTotal,\n 'last_synced_id' => $lastSyncedId,\n ]\n );\n\n return $reportedTotal;\n }\n\n private function handleSyncException(\\Throwable $e, array $parameters): void\n {\n if (($parameters['since'] ?? null) instanceof Carbon) {\n $parameters['since'] = $parameters['since']->toDateTimeString();\n }\n $parameters['config'] = $this->config->getId();\n\n $this->logger->warning('[' . $this->getDisplayName() . '] Sync opportunities failed', [\n 'teamId' => $this->team->getUuid(),\n 'parameters' => $parameters,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n /**\n * @inheritdoc\n */\n public function syncOpportunity(string $crmId): ?Opportunity\n {\n $strategy = $this->opportunitySyncStrategyResolver->resolve(\n $this->config,\n OpportunitySyncStrategyResolver::SINGLE_SYNC_OPPORTUNITY_STRATEGY,\n );\n\n $parameters = [\n 'config' => $this->config,\n 'crm_id' => $crmId,\n ];\n\n try {\n if (! $strategy instanceof HubspotSingleSyncStrategy) {\n throw new InvalidArgumentException('Strategy must by HubspotSingleSyncStrategy');\n }\n\n $hsOpportunity = $strategy->fetchOpportunity($parameters);\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException $e) {\n $this->logger->info('[' . $this->getDisplayName() . '] Opportunity not found', [\n 'teamId' => $this->team->getUuid(),\n 'crmId' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n return null;\n }\n\n $hsOpportunity['associations'] = $this->convertDealAssociations($hsOpportunity['associations'] ?? []);\n\n return $this->importOrUpdateOpportunity($hsOpportunity);\n }\n\n /**\n * Process webhook-collected opportunity batches.\n *\n * Drains Redis sets containing company CRM IDs collected from webhook events\n * and dispatches ImportOpportunityBatch jobs for batch processing.\n *\n * @return int Number of opportunity IDs dispatched to jobs\n */\n public function batchSyncOpportunities(): int\n {\n $configId = $this->team->getCrmConfiguration()->getId();\n\n return $this->batchProcessor->processBatchesForObjectType(\n WebhookSyncBatchProcessor::OBJECT_TYPE_DEAL,\n $configId\n );\n }\n\n /**\n * Import a batch of opportunities by their CRM IDs.\n * Fetches opportunity data from HubSpot API and delegates to importOpportunityBatch().\n *\n * @param array<string> $crmIds HubSpot deal CRM IDs\n *\n * @return array{success: array, failed_ids: array, errors?: array<string, string>}\n */\n public function importOpportunityBatchByIds(array $crmIds): array\n {\n $fields = $this->dealFieldsService->getFieldsForConfiguration($this->config);\n\n $allDeals = [];\n foreach (array_chunk($crmIds, self::BATCH_SIZE) as $chunk) {\n $deals = $this->client->getOpportunitiesByIds($chunk, $fields);\n foreach ($deals as $deal) {\n $allDeals[] = $deal;\n }\n }\n\n // IDs not returned by HubSpot are likely deleted or inaccessible deals.\n // These are not failures — retrying won't bring them back.\n $fetchedIds = array_map('strval', array_column($allDeals, 'id'));\n $notFoundIds = array_values(array_diff(array_map('strval', $crmIds), $fetchedIds));\n\n if (! empty($notFoundIds)) {\n $this->logger->info('[' . $this->getDisplayName() . '] CRM IDs not found in HubSpot (likely deleted)', [\n 'teamId' => $this->team->getId(),\n 'notFoundCount' => \\count($notFoundIds),\n 'notFoundIds' => $notFoundIds,\n 'requestedCount' => \\count($crmIds),\n 'fetchedCount' => \\count($allDeals),\n ]);\n }\n\n if (empty($allDeals)) {\n return ['success' => [], 'failed_ids' => []];\n }\n\n return $this->importOpportunityBatch($allDeals);\n }\n\n private function getClosedDealStages(): array\n {\n if ($this->cachedClosedDealStages !== null) {\n return $this->cachedClosedDealStages;\n }\n\n $stages = $this->crmEntityRepository->getOpportunityClosedStages($this->config);\n $data = [\n 'lost' => [],\n 'won' => [],\n ];\n\n foreach ($stages as $stage) {\n if ($stage->probability == 0.00) {\n $data['lost'][] = $stage->crm_provider_id;\n }\n if ($stage->probability == 100.00) {\n $data['won'][] = $stage->crm_provider_id;\n }\n }\n\n $this->cachedClosedDealStages = $data;\n\n return $data;\n }\n\n /**\n * Import deals into the database with pre-fetched associations.\n *\n * API calls here (getAssociationsData, getExistingOpportunityCrmIds) are NOT\n * caught — if they throw, the exception propagates to ImportOpportunityBatch::handle()\n * where Laravel retries the whole job with backoff. After all retries exhausted,\n * failed() requeues all IDs to Redis.\n *\n * The per-deal loop catches exceptions individually. A deal can end up in three states:\n * - success: imported/updated successfully\n * - failed_ids: exception thrown (DB constraint violation, corrupt data, etc.)\n * These are permanent issues — retrying won't fix them.\n * - skipped (null): missing dependencies (no account, unknown pipeline/stage).\n * This is acceptable — the deal cannot be imported until those exist.\n */\n private function importOpportunityBatch(array $deals): array\n {\n $syncedOpportunities = [\n 'success' => [],\n 'failed_ids' => [],\n ];\n $dealIds = array_column($deals, 'id');\n\n // Shared association/existing-ID preparation is batch-level state. If it fails, rethrow so the\n // queue job retries the whole batch and eventually requeues all deal IDs back to Redis.\n try {\n $companyAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'companies');\n $contactAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'contacts');\n\n $associationsData = $this->prepareAssociatedEntities($companyAssociations, $contactAssociations);\n\n $existingCrmIds = $this->crmEntityRepository->getExistingOpportunityCrmIds(\n $this->config,\n array_map('strval', $dealIds)\n );\n $existingCrmIdSet = array_flip($existingCrmIds);\n } catch (\\Throwable $e) {\n $this->logger->error('[' . $this->getDisplayName() . '] Failed to fetch associations or existing IDs', [\n 'teamId' => $this->team->getId(),\n 'dealCount' => count($dealIds),\n 'error' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n foreach ($deals as $deal) {\n try {\n $deal['associations'] = $this->prepareAssociationsForOpportunity(\n $deal['id'],\n $companyAssociations,\n $contactAssociations,\n $associationsData\n );\n\n $syncedOpportunity = $this->importOrUpdateOpportunity(\n $deal,\n isset($existingCrmIdSet[(string) $deal['id']])\n );\n if ($syncedOpportunity) {\n $syncedOpportunities['success'][] = $syncedOpportunity;\n }\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to import opportunity', [\n 'teamId' => $this->team->getId(),\n 'crmId' => $deal['id'],\n 'error' => $e->getMessage(),\n ]);\n $syncedOpportunities['failed_ids'][] = $deal['id'];\n $syncedOpportunities['errors'][$deal['id']] = $e->getMessage();\n }\n }\n\n return $syncedOpportunities;\n }\n\n /**\n * Prepare associated entities for opportunities with optimized batch processing\n * Returns structured data with CRM ID to DB ID mappings for each opportunity\n */\n private function prepareAssociatedEntities(array $companyAssociations, array $contactAssociations): array\n {\n // Step 1: Collect all unique company and contact IDs from associations\n $allCompanyIds = $this->flattenAssociationIds($companyAssociations);\n $allContactIds = $this->flattenAssociationIds($contactAssociations);\n\n // Step 2: Batch sync missing entities and get CRM ID to DB ID mappings\n $companyIdMappings = [];\n $contactIdMappings = [];\n\n if (! empty($allCompanyIds)) {\n $companyIdMappings = $this->prepareAssociatedAccounts($allCompanyIds);\n }\n\n if (! empty($allContactIds)) {\n $contactIdMappings = $this->prepareAssociatedContacts($allContactIds);\n }\n\n return [\n 'company_id_mappings' => $companyIdMappings,\n 'contact_id_mappings' => $contactIdMappings,\n ];\n }\n\n /**\n * Flatten association data to get unique IDs\n */\n private function flattenAssociationIds(array $associations): array\n {\n $ids = [];\n foreach ($associations as $dealAssociations) {\n if (is_array($dealAssociations)) {\n foreach ($dealAssociations as $id) {\n $ids[$id] = true;\n }\n }\n }\n\n return array_keys($ids);\n }\n\n /**\n * Batch sync missing accounts\n */\n private function prepareAssociatedAccounts(array $companyIds): array\n {\n // Find which accounts already exist\n $existingAccounts = $this->crmEntityRepository\n ->findAccountsByExternalIds($this->config, $companyIds);\n\n $existingCompanyIds = $existingAccounts->pluck('crm_provider_id')->toArray();\n\n $existingAccountsData = $existingAccounts->mapWithKeys(function ($account) {\n return [$account->getCrmProviderId() => $account->getId()];\n })->toArray();\n\n $missingCompanyIds = array_diff($companyIds, $existingCompanyIds);\n\n if (empty($missingCompanyIds)) {\n return $existingAccountsData;\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing accounts', [\n 'teamId' => $this->team->getUuid(),\n 'total_companies' => count($companyIds),\n 'existing_companies' => count($existingCompanyIds),\n 'missing_companies' => count($missingCompanyIds),\n ]);\n\n // we already have limit on opportunity ids count\n // Initialize variable before try block\n $syncedAccountsData = [];\n\n try {\n $syncedAccountsData = $this->batchSyncCrmObjects('companies', $missingCompanyIds);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing accounts', [\n 'size' => count($missingCompanyIds),\n 'error' => $e->getMessage(),\n ]);\n $syncedAccountsData = [];\n }\n\n return $existingAccountsData + $syncedAccountsData;\n }\n\n /**\n * Prepare associated contacts - find existing and sync missing ones\n * Returns mapping of CRM ID to DB ID\n */\n private function prepareAssociatedContacts(array $contactIds): array\n {\n // Find which contacts already exist\n $existingContacts = $this->crmEntityRepository\n ->findContactsByExternalIds($this->config, $contactIds);\n\n $existingContactIds = $existingContacts->pluck('crm_provider_id')->toArray();\n\n // Create mapping for existing contacts\n $existingContactsData = $existingContacts->mapWithKeys(function ($contact) {\n return [$contact->getCrmProviderId() => $contact->getId()];\n })->toArray();\n\n $missingContactIds = array_diff($contactIds, $existingContactIds);\n\n if (empty($missingContactIds)) {\n return $existingContactsData;\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing contacts', [\n 'teamId' => $this->team->getUuid(),\n 'total_contacts' => count($contactIds),\n 'existing_contacts' => count($existingContactIds),\n 'missing_contacts' => count($missingContactIds),\n ]);\n\n // Sync missing contacts using batch API\n try {\n $syncedContactsData = $this->batchSyncCrmObjects('contacts', $missingContactIds);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing contacts', [\n 'size' => count($missingContactIds),\n 'error' => $e->getMessage(),\n ]);\n $syncedContactsData = [];\n }\n\n return $existingContactsData + $syncedContactsData;\n }\n\n private function batchSyncCrmObjects(string $objectType, array $crmIds): array\n {\n $syncObjects = [];\n $crmObjectIds = array_values($crmIds);\n\n foreach (array_chunk($crmObjectIds, self::BATCH_SIZE) as $chunk) {\n try {\n $objects = $objectType === 'companies' ?\n $this->client->getCompaniesByIds($chunk, $this->getCompanyFields()) :\n $this->client->getContactsByIds($chunk, $this->getContactFields());\n\n foreach ($objects as $objectId => $objectData) {\n $this->importCrmObject($objectType, (string) $objectId, $objectData, $syncObjects);\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch synced ' . $objectType, [\n 'requested_count' => count($chunk),\n 'synced_count' => count($objects),\n ]);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Batch ' . $objectType . ' sync failed', [\n 'ids' => $chunk,\n 'error' => $e->getMessage(),\n ]);\n }\n }\n\n return $syncObjects;\n }\n\n private function importCrmObject(string $objectType, string $objectId, mixed $objectData, array &$syncObjects): void\n {\n try {\n $object = $objectType === 'companies' ?\n $this->importAccount($objectData) :\n $this->importContact($objectData);\n\n if ($object) {\n $syncObjects[$object->getCrmProviderId()] = $object->getId();\n }\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to import batch ' . $objectType, [\n 'id' => $objectId,\n 'error' => $e->getMessage(),\n ]);\n }\n }\n\n /**\n * Prepare associations for a single opportunity\n *\n * The return value is an array with the following structure:\n * [\n * 'companies' => [\n * $companyCrmId => $companyId,\n * ...\n * ],\n * 'contacts' => [\n * $contactCrmId => $contactId,\n * ...\n * ],\n * 'account_id' => $accountId,\n * ]\n */\n private function prepareAssociationsForOpportunity(\n string $oppCrmId,\n array $companyAssociations,\n array $contactAssociations,\n array $associationsData\n ): array {\n $associations = [\n 'companies' => [],\n 'contacts' => [],\n 'account_id' => null, // Primary account for opportunity\n ];\n\n $oppCompanyIds = $companyAssociations[$oppCrmId] ?? [];\n foreach ($oppCompanyIds as $companyCrmId) {\n if (isset($associationsData['company_id_mappings'][$companyCrmId])) {\n $associations['companies'][$companyCrmId] = $associationsData['company_id_mappings'][$companyCrmId];\n\n // Set primary account (first company becomes primary account)\n if ($associations['account_id'] === null) {\n $associations['account_id'] = $associationsData['company_id_mappings'][$companyCrmId];\n }\n }\n }\n\n $oppContactIds = $contactAssociations[$oppCrmId] ?? [];\n foreach ($oppContactIds as $contactCrmId) {\n if (isset($associationsData['contact_id_mappings'][$contactCrmId])) {\n $associations['contacts'][$contactCrmId] = $associationsData['contact_id_mappings'][$contactCrmId];\n }\n }\n\n return $associations;\n }\n\n /**\n * Update only associations for an opportunity\n */\n private function updateOpportunityAssociations(Opportunity $opportunity, array $associations): void\n {\n // Update contact associations\n $this->importOpportunityContacts($opportunity, $associations['contacts']);\n\n // Update company (account) associations\n $this->updateOpportunityAccount($opportunity, $associations['account_id']);\n }\n\n /**\n * Remove all contact associations from an opportunity\n */\n private function removeAllOpportunityContacts(Opportunity $opportunity): void\n {\n $currentCount = (int) $opportunity->contacts()->count();\n\n if ($currentCount > 0) {\n $opportunity->contacts()->detach();\n\n $this->logger->info('[' . $this->getDisplayName() . '] Removed all contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'removed_count' => $currentCount,\n ]);\n }\n }\n\n private function updateOpportunityAccount(Opportunity $opportunity, ?int $accountId): void\n {\n if ($accountId === null) {\n // No account ID provided - keep current account\n return;\n }\n\n $currentAccountId = $opportunity->getAccountId();\n\n // Only update if account has changed\n if ($currentAccountId !== $accountId) {\n $opportunity->account_id = $accountId;\n $opportunity->save();\n\n $this->logger->info('[' . $this->getDisplayName() . '] Updated opportunity account association', [\n 'opportunity_id' => $opportunity->getId(),\n 'old_account_id' => $currentAccountId,\n 'new_account_id' => $accountId,\n ]);\n }\n }\n\n /**\n * Find existing opportunities by external IDs (OPTIMIZED VERSION)\n * Uses batch query for better performance\n */\n private function findExistingOpportunities(array $crmIds): Collection\n {\n return $this->crmEntityRepository\n ->findOpportunitiesByExternalIds($this->config, $crmIds);\n }\n\n private function processOpportunityBatch(array $opportunities): int\n {\n $syncedOpportunities = $this->importOpportunityBatch($opportunities);\n\n return count($syncedOpportunities['success'] ?? []);\n }\n\n /**\n * Convert single deal associations from HubSpot format to internal format\n * Handles both HubSpot SDK objects and array formats\n *\n * @param array $opportunityAssociations Raw associations from HubSpot API or pre-processed\n *\n * @return array Processed associations with DB IDs\n */\n private function convertDealAssociations(array $opportunityAssociations): array\n {\n $associations = $this->initializeAssociationsStructure();\n\n if (empty($opportunityAssociations)) {\n return $associations;\n }\n\n $associationIds = $this->extractAssociationIds($opportunityAssociations);\n\n $this->processCompanyAssociations($associationIds, $associations);\n $this->processContactAssociations($associationIds, $associations);\n\n return $associations;\n }\n\n private function initializeAssociationsStructure(): array\n {\n return [\n 'companies' => [],\n 'contacts' => [],\n 'account_id' => null, // Primary account for opportunity\n ];\n }\n\n private function extractAssociationIds(array $opportunityAssociations): array\n {\n $associationIds = [];\n\n foreach ($opportunityAssociations as $type => $associationData) {\n if (! empty($associationData)) {\n $associationIds[$type] = $this->convertSingleDealAssociations($associationData);\n }\n }\n\n return $associationIds;\n }\n\n private function processCompanyAssociations(array $associationIds, array &$associations): void\n {\n if (empty($associationIds['companies'])) {\n return;\n }\n\n $companyId = $associationIds['companies'][0];\n $account = $this->findOrSyncAccount($companyId);\n\n if ($account instanceof Account) {\n $associations['companies'][$companyId] = $account->getId();\n $associations['account_id'] = $account->getId();\n }\n }\n\n private function processContactAssociations(array $associationIds, array &$associations): void\n {\n if (empty($associationIds['contacts'])) {\n return;\n }\n\n foreach ($associationIds['contacts'] as $contactId) {\n $contact = $this->findOrSyncContact($contactId);\n\n if ($contact instanceof Contact) {\n $associations['contacts'][$contactId] = $contact->getId();\n }\n }\n }\n\n private function findOrSyncAccount(string $companyId): ?Account\n {\n $account = $this->crmEntityRepository->findAccountByExternalId($this->config, $companyId);\n\n if (! $account instanceof Account) {\n $account = $this->syncAccount($companyId);\n }\n\n return $account;\n }\n\n private function findOrSyncContact(string $contactId): ?Contact\n {\n $contact = $this->crmEntityRepository->findContactByExternalId($this->config, $contactId);\n\n if (! $contact instanceof Contact) {\n $contact = $this->syncContact($contactId);\n }\n\n return $contact;\n }\n\n private function convertSingleDealAssociations($opportunityAssociations = null): array\n {\n $associationData = [];\n\n if ($opportunityAssociations === null) {\n return $associationData;\n }\n\n // Handle array input (from extractAssociationIds)\n if (is_array($opportunityAssociations)) {\n return $opportunityAssociations;\n }\n\n // Handle CollectionResponseAssociatedId object\n if ($opportunityAssociations instanceof CollectionResponseAssociatedId) {\n foreach ($opportunityAssociations->getResults() as $association) {\n $associationData[] = $association->getId();\n }\n }\n\n return $associationData;\n }\n\n private function importOrUpdateOpportunity($crmData, ?bool $exists = null): ?Opportunity\n {\n if (empty($crmData['properties'])) {\n return null;\n }\n\n $crmId = (string) $crmData['id'];\n $properties = $crmData['properties'];\n $associations = $crmData['associations'] ?? [];\n\n $opportunityExists = $exists ?? (bool) $this->crmEntityRepository->findOpportunityByExternalId(\n $this->config,\n $crmId\n );\n\n if ($opportunityExists) {\n return $this->updateOpportunity($crmId, $properties, $associations);\n } else {\n return $this->createOpportunity($crmId, $properties, $associations);\n }\n }\n\n /**\n * Create new opportunity\n */\n private function createOpportunity(string $crmId, array $properties, array $associations): ?Opportunity\n {\n $accountId = $this->resolveAccountId($associations);\n if (! $accountId) {\n return null;\n }\n\n $businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);\n if (! $businessProcess) {\n return null;\n }\n\n $stage = $this->resolveStage($businessProcess, $properties['dealstage'] ?? null);\n if (! $stage) {\n return null;\n }\n\n $data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);\n\n $attributes = [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $crmId,\n ];\n\n $values = array_merge($attributes, $data);\n\n $opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);\n\n $this->importExternalFieldData($properties, $opportunity->getId());\n $this->importOpportunityContacts($opportunity, $associations['contacts']);\n\n if ($opportunity->wasRecentlyCreated) {\n MatchActivitiesToNewOpportunity::dispatch($opportunity->getId());\n }\n\n return $opportunity;\n }\n\n /**\n * Update existing opportunity\n */\n private function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity\n {\n $accountId = $this->resolveAccountId($associations);\n $businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);\n $stage = $businessProcess ? $this->resolveStage($businessProcess, $properties['dealstage'] ?? null) : null;\n\n $data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);\n\n $attributes = [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $crmId,\n ];\n\n $values = array_merge($attributes, $data);\n $opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);\n\n $this->importExternalFieldData($properties, $opportunity->getId());\n $this->updateOpportunityAssociations($opportunity, $associations);\n\n return $opportunity;\n }\n\n private function resolveAccountId(array $associations): ?int\n {\n if (! empty($associations['accountId'])) {\n return $associations['accountId'];\n }\n\n if (empty($associations)) {\n return null;\n }\n\n // we can't resolve multiple account ids (currently SDK returns one company)\n foreach ($associations['companies'] as $accountId) {\n return $accountId;\n }\n\n return null;\n }\n\n private function buildOpportunityData(\n array $properties,\n ?int $accountId,\n ?BusinessProcess $businessProcess,\n ?Stage $stage\n ): array {\n $ownerId = null;\n $profile = null;\n if (! empty($properties['hubspot_owner_id'])) {\n $ownerId = $properties['hubspot_owner_id'];\n $profile = $this->crmEntityRepository->findProfileByExternalId($this->config, (string) $ownerId);\n }\n\n $name = 'Unknown';\n if (isset($properties['dealname'])) {\n $name = mb_strimwidth($properties['dealname'], 0, 128);\n }\n\n $amount = $this->resolveAmount($properties);\n $currency = $properties['deal_currency_code'] ?? null;\n\n $closeDate = null;\n if (! empty($properties['closedate'])) {\n $closeDate = Carbon::parse($properties['closedate'])->format('Y-m-d');\n }\n\n $remotelyCreatedAt = null;\n if (! empty($properties['createdate']) && strtotime($properties['createdate'])) {\n $date = $this->parseCleanDatetime($properties['createdate']);\n $remotelyCreatedAt = $date?->format('Y-m-d H:i:s');\n }\n\n $closedStages = $this->getClosedDealStages();\n $isWon = in_array($properties['dealstage'], $closedStages['won']);\n $isLost = in_array($properties['dealstage'], $closedStages['lost']);\n\n $data = [\n 'team_id' => $this->team->getId(),\n 'user_id' => $profile ? $profile->user_id : null,\n 'owner_id' => $ownerId,\n 'name' => $name,\n 'value' => ! empty($amount) ? $amount : null,\n 'currency_code' => CurrencyFormatter::formatCode($currency),\n 'close_date' => $closeDate,\n 'is_closed' => $isWon || $isLost,\n 'is_won' => $isWon,\n 'remotely_created_at' => $remotelyCreatedAt,\n 'probability' => $this->resolveDealProbability($properties['hs_deal_stage_probability']),\n 'forecast_category' => $this->resolveForecastCategory($properties['hs_manual_forecast_category']),\n ];\n\n if ($accountId) {\n $data['account_id'] = $accountId;\n }\n\n if ($stage) {\n $data['stage_id'] = $stage->id;\n }\n\n if ($businessProcess) {\n $recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);\n if ($recordType) {\n $data['record_type_id'] = $recordType->id;\n }\n }\n\n return $data;\n }\n\n private function resolveBusinessProcess(?string $pipelineId): ?BusinessProcess\n {\n if ($pipelineId === null) {\n return null;\n }\n\n if (isset($this->cachedBusinessProcesses[$pipelineId])) {\n return $this->cachedBusinessProcesses[$pipelineId];\n }\n\n $businessProcess = $this->getBusinessProcess($pipelineId);\n\n if (! $businessProcess instanceof BusinessProcess) {\n $this->importStages();\n $businessProcess = $this->getBusinessProcess($pipelineId);\n }\n\n if (! $businessProcess instanceof BusinessProcess) {\n $this->logger->info(\n '[HubSpot] Deal is not attached to a pipeline',\n [\n 'pipeline' => $pipelineId]\n );\n }\n\n $this->cachedBusinessProcesses[$pipelineId] = $businessProcess;\n\n return $businessProcess;\n }\n\n private function getBusinessProcess(string $pipelineId): ?BusinessProcess\n {\n return $this->crmEntityRepository->findBusinessProcessesByExternalId($this->config, $pipelineId);\n }\n\n private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage\n {\n if (empty($stageId)) {\n return null;\n }\n\n $cacheKey = $businessProcess->getId() . ':' . $stageId;\n if (isset($this->cachedStages[$cacheKey])) {\n return $this->cachedStages[$cacheKey];\n }\n\n $stage = $this->crmEntityRepository->getPipelineStageByConditions(\n $businessProcess,\n [\n 'crm_provider_id' => $stageId,\n 'type' => Stage::TYPE_OPPORTUNITY,\n ]\n );\n\n if ($stage === null) {\n $this->importStages(null, $stageId);\n }\n\n if ($stage === null) {\n $this->logger->info('[HubSpot] Stage does not exist => ' . $stageId);\n }\n\n $this->cachedStages[$cacheKey] = $stage;\n\n return $stage;\n }\n\n private function resolveAmount(array $properties): ?string\n {\n $amount = null;\n if (! empty($properties['amount'])) {\n $amount = str_replace(',', '', $properties['amount']);\n }\n\n if ($this->config->hasDefaultCurrencyFieldSet()) {\n $valueFieldName = $this->config->getDefaultCurrencyField()->getCrmProviderId();\n $amount = $properties[$valueFieldName] ?? $amount;\n }\n\n return $amount;\n }\n\n private function parseCleanDatetime(string $datetime): ?Carbon\n {\n // Treat pre-1980 values as invalid\n $minValidDate = Carbon::parse('1980-01-01 00:00:00');\n\n try {\n $date = Carbon::parse($datetime);\n\n if ($minValidDate->gt($date)) {\n return null;\n }\n\n return $date;\n } catch (Exception) {\n return null; // On parse error, treat as null\n }\n }\n\n private function resolveDealProbability(?string $stageProbability): int\n {\n if ($stageProbability === null) {\n return 0;\n }\n\n $probability = (float) $stageProbability;\n\n return $probability > 1 ? 0 : (int) ($probability * 100);\n }\n\n private function resolveForecastCategory(?string $forecastCategory): string\n {\n if (! $forecastCategory) {\n return Forecast::FORECAST_CATEGORY_UNCATEGORIZED;\n }\n\n $forecastCategory = str_replace('_', ' ', $forecastCategory);\n\n return ucwords(strtolower($forecastCategory));\n }\n\n private function importExternalFieldData(array $properties, int $opportunityId): void\n {\n $crmFields = $this->getOpportunitySyncableFields();\n $this->importOpportunityCrmFieldData($properties, $crmFields, $opportunityId);\n }\n\n private function importOpportunityContacts(Opportunity $opportunity, array $associations): void\n {\n // Handle empty or missing contact associations\n if (empty($associations)) {\n // Remove all existing contact associations if none provided\n $this->removeAllOpportunityContacts($opportunity);\n\n return;\n }\n\n // Use differential sync approach for better performance and accuracy\n $this->syncOpportunityContactsDifferential($opportunity, $associations);\n }\n\n /**\n * Sync opportunity contacts using differential approach\n * This compares current vs new associations and only makes necessary changes\n */\n private function syncOpportunityContactsDifferential(Opportunity $opportunity, array $contactAssociations): void\n {\n $currentContactCrmIds = $this->getCurrentContactCrmIds($opportunity);\n $contactAssociationIds = array_keys($contactAssociations);\n\n $contactsToAdd = array_diff($contactAssociationIds, $currentContactCrmIds);\n $contactsToRemove = array_diff($currentContactCrmIds, $contactAssociationIds);\n\n if (empty($contactsToAdd) && empty($contactsToRemove)) {\n return;\n }\n\n $this->logContactAssociationChanges($opportunity, $currentContactCrmIds, $contactAssociations, $contactsToAdd, $contactsToRemove);\n\n $this->removeContactAssociations($opportunity, $contactsToRemove);\n $this->addContactAssociations($opportunity, $contactsToAdd, $contactAssociations);\n }\n\n private function getCurrentContactCrmIds(Opportunity $opportunity): array\n {\n return $opportunity->contacts()\n ->pluck('contacts.crm_provider_id')\n ->toArray();\n }\n\n private function logContactAssociationChanges(\n Opportunity $opportunity,\n array $currentContactCrmIds,\n array $contactAssociations,\n array $contactsToAdd,\n array $contactsToRemove\n ): void {\n $this->logger->info('[' . $this->getDisplayName() . '] Contact association changes', [\n 'opportunity_id' => $opportunity->getId(),\n 'current_contacts' => $currentContactCrmIds,\n 'new_contacts' => $contactAssociations,\n 'contacts_to_add' => $contactsToAdd,\n 'contacts_to_remove' => $contactsToRemove,\n ]);\n }\n\n private function removeContactAssociations(Opportunity $opportunity, array $contactsToRemove): void\n {\n if (empty($contactsToRemove)) {\n return;\n }\n\n $contactsToDetach = $opportunity->contacts()\n ->whereIn('contacts.crm_provider_id', $contactsToRemove)\n ->pluck('contacts.id')\n ->toArray();\n\n if (! empty($contactsToDetach)) {\n $opportunity->contacts()->detach($contactsToDetach);\n\n $this->logger->info('[' . $this->getDisplayName() . '] Removed contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'removed_contact_crm_ids' => $contactsToRemove,\n 'removed_contact_count' => count($contactsToDetach),\n ]);\n }\n }\n\n private function addContactAssociations(Opportunity $opportunity, array $contactsToAdd, array $contactAssociations): void\n {\n if (empty($contactsToAdd)) {\n return;\n }\n\n $contactsAdded = [];\n foreach ($contactsToAdd as $crmId) {\n $id = $contactAssociations[$crmId];\n\n if ($this->attachSingleContact($opportunity, (string) $crmId, $id)) {\n $contactsAdded[] = $crmId;\n }\n }\n\n $this->logAddedContacts($opportunity, $contactsAdded);\n }\n\n private function attachSingleContact(Opportunity $opportunity, string $crmId, int $id): bool\n {\n try {\n $contact = $this->crmEntityRepository->findContactByConfigurationAndId($this->config, $id);\n\n if (! $contact) {\n return false;\n }\n\n return $this->performContactAttachment($opportunity, $contact, $crmId);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to add contact association', [\n 'opportunity_id' => $opportunity->getId(),\n 'contact_crm_id' => $crmId,\n 'error' => $e->getMessage(),\n ]);\n\n return false;\n }\n }\n\n private function performContactAttachment(Opportunity $opportunity, Contact $contact, string $crmId): bool\n {\n try {\n $opportunity->contacts()->attach($contact->getId(), [\n 'crm_provider_id' => $crmId,\n ]);\n\n return true;\n } catch (\\Illuminate\\Database\\QueryException $e) {\n if (str_contains($e->getMessage(), 'Duplicate entry')) {\n $this->logger->info('[' . $this->getDisplayName() . '] Contact association already exists', [\n 'contact_id' => $contact->getId(),\n 'contact_crm_id' => $crmId,\n 'opportunity_id' => $opportunity->getId(),\n ]);\n\n return false;\n }\n\n throw $e;\n }\n }\n\n private function logAddedContacts(Opportunity $opportunity, array $contactsAdded): void\n {\n if (! empty($contactsAdded)) {\n $this->logger->info('[' . $this->getDisplayName() . '] Added contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'contacts_to_add_count' => count($contactsAdded),\n 'added_contact_crm_ids' => $contactsAdded,\n 'added_contacts_count' => count($contactsAdded),\n ]);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Execute","depth":4,"bounds":{"left":0.48359376,"top":0.08611111,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Explain Plan","depth":4,"bounds":{"left":0.49375,"top":0.08611111,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Browse Query History","depth":4,"bounds":{"left":0.5066406,"top":0.08611111,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-347027978161856519
|
-8178087410993426138
|
app_switch
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AutomatedReportsCommandTest
Run 'AutomatedReportsCommandTest'
Debug 'AutomatedReportsCommandTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Show Replace Field
Search History
"podcast_audio_url"
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
0 results
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Code changed:
Hide
Sync Changes
Hide This Notification
32
2
19
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot\ServiceTraits;
use Carbon\Carbon;
use HubSpot\Client\Crm\Deals\Model\CollectionResponseAssociatedId;
use Jiminny\Exceptions\InvalidArgumentException;
use Jiminny\Models\Account;
use Exception;
use Jiminny\Component\DealInsights\Forecast\Forecast;
use Jiminny\Jobs\Crm\MatchActivitiesToNewOpportunity;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\BusinessProcess;
use Jiminny\Exceptions\CrmException;
use Jiminny\Models\Opportunity;
use Illuminate\Support\Collection;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\CrmEntityRepository;
use Jiminny\Services\Crm\Hubspot\DealFieldsService;
use Jiminny\Services\Crm\Hubspot\OpportunitySyncStrategy\HubspotSingleSyncStrategy;
use Jiminny\Services\Crm\Hubspot\WebhookSyncBatchProcessor;
use Jiminny\Services\Crm\OpportunitySyncStrategyResolver;
use Jiminny\Utils\CurrencyFormatter;
/**
* Optimized sync methods for better performance
* These methods can be integrated into SyncCrmEntitiesTrait for significant performance gains
*/
trait OpportunitySyncTrait
{
private const int BATCH_SIZE = 100;
private const int BATCH_PROCESS_SIZE = 800;
protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;
protected CrmEntityRepository $crmEntityRepository;
protected DealFieldsService $dealFieldsService;
private ?array $cachedClosedDealStages = null;
private array $cachedBusinessProcesses = [];
private array $cachedStages = [];
public function syncOpportunities(array $parameters, ?string $strategy = null): int
{
$strategies = $this->opportunitySyncStrategyResolver->getStrategies($this->config, $strategy);
$parameters['config'] = $this->config;
$syncCount = 0;
$reportedTotal = 0;
$lastSyncedId = [];
try {
foreach ($strategies as $strategyName => $syncStrategy) {
$this->logger->info(
'[' . $this->getDisplayName() . '] Syncing opportunities using strategy: ' .
$strategyName
);
$total = 0;
$lastId = null;
$buffer = [];
// HubspotWebhookBatchSyncStrategy returns empty generator, this is for other strategies
foreach ($syncStrategy->fetchOpportunities($parameters, $total, $lastId) as $hsOpportunity) {
$buffer[] = $hsOpportunity;
// process every 800 rows (fits < 1 000 association limit)
if (\count($buffer) >= self::BATCH_PROCESS_SIZE) {
$syncCount += $this->processOpportunityBatch($buffer);
$buffer = [];
}
}
// leftovers
if ($buffer) {
$syncCount += $this->processOpportunityBatch($buffer);
}
$reportedTotal += $total;
$lastSyncedId = $lastId;
}
} catch (\HubSpot\Client\Crm\Deals\ApiException | CrmException $e) {
$this->handleSyncException($e, $parameters);
}
$this->logger->info(
'[HubSpot] Synced opportunities',
[
'team' => $this->team->getId(),
'sync_count' => $syncCount,
'total' => $reportedTotal,
'last_synced_id' => $lastSyncedId,
]
);
return $reportedTotal;
}
private function handleSyncException(\Throwable $e, array $parameters): void
{
if (($parameters['since'] ?? null) instanceof Carbon) {
$parameters['since'] = $parameters['since']->toDateTimeString();
}
$parameters['config'] = $this->config->getId();
$this->logger->warning('[' . $this->getDisplayName() . '] Sync opportunities failed', [
'teamId' => $this->team->getUuid(),
'parameters' => $parameters,
'reason' => $e->getMessage(),
]);
}
/**
* @inheritdoc
*/
public function syncOpportunity(string $crmId): ?Opportunity
{
$strategy = $this->opportunitySyncStrategyResolver->resolve(
$this->config,
OpportunitySyncStrategyResolver::SINGLE_SYNC_OPPORTUNITY_STRATEGY,
);
$parameters = [
'config' => $this->config,
'crm_id' => $crmId,
];
try {
if (! $strategy instanceof HubspotSingleSyncStrategy) {
throw new InvalidArgumentException('Strategy must by HubspotSingleSyncStrategy');
}
$hsOpportunity = $strategy->fetchOpportunity($parameters);
} catch (\HubSpot\Client\Crm\Deals\ApiException $e) {
$this->logger->info('[' . $this->getDisplayName() . '] Opportunity not found', [
'teamId' => $this->team->getUuid(),
'crmId' => $crmId,
'reason' => $e->getMessage(),
]);
return null;
}
$hsOpportunity['associations'] = $this->convertDealAssociations($hsOpportunity['associations'] ?? []);
return $this->importOrUpdateOpportunity($hsOpportunity);
}
/**
* Process webhook-collected opportunity batches.
*
* Drains Redis sets containing company CRM IDs collected from webhook events
* and dispatches ImportOpportunityBatch jobs for batch processing.
*
* @return int Number of opportunity IDs dispatched to jobs
*/
public function batchSyncOpportunities(): int
{
$configId = $this->team->getCrmConfiguration()->getId();
return $this->batchProcessor->processBatchesForObjectType(
WebhookSyncBatchProcessor::OBJECT_TYPE_DEAL,
$configId
);
}
/**
* Import a batch of opportunities by their CRM IDs.
* Fetches opportunity data from HubSpot API and delegates to importOpportunityBatch().
*
* @param array<string> $crmIds HubSpot deal CRM IDs
*
* @return array{success: array, failed_ids: array, errors?: array<string, string>}
*/
public function importOpportunityBatchByIds(array $crmIds): array
{
$fields = $this->dealFieldsService->getFieldsForConfiguration($this->config);
$allDeals = [];
foreach (array_chunk($crmIds, self::BATCH_SIZE) as $chunk) {
$deals = $this->client->getOpportunitiesByIds($chunk, $fields);
foreach ($deals as $deal) {
$allDeals[] = $deal;
}
}
// IDs not returned by HubSpot are likely deleted or inaccessible deals.
// These are not failures — retrying won't bring them back.
$fetchedIds = array_map('strval', array_column($allDeals, 'id'));
$notFoundIds = array_values(array_diff(array_map('strval', $crmIds), $fetchedIds));
if (! empty($notFoundIds)) {
$this->logger->info('[' . $this->getDisplayName() . '] CRM IDs not found in HubSpot (likely deleted)', [
'teamId' => $this->team->getId(),
'notFoundCount' => \count($notFoundIds),
'notFoundIds' => $notFoundIds,
'requestedCount' => \count($crmIds),
'fetchedCount' => \count($allDeals),
]);
}
if (empty($allDeals)) {
return ['success' => [], 'failed_ids' => []];
}
return $this->importOpportunityBatch($allDeals);
}
private function getClosedDealStages(): array
{
if ($this->cachedClosedDealStages !== null) {
return $this->cachedClosedDealStages;
}
$stages = $this->crmEntityRepository->getOpportunityClosedStages($this->config);
$data = [
'lost' => [],
'won' => [],
];
foreach ($stages as $stage) {
if ($stage->probability == 0.00) {
$data['lost'][] = $stage->crm_provider_id;
}
if ($stage->probability == 100.00) {
$data['won'][] = $stage->crm_provider_id;
}
}
$this->cachedClosedDealStages = $data;
return $data;
}
/**
* Import deals into the database with pre-fetched associations.
*
* API calls here (getAssociationsData, getExistingOpportunityCrmIds) are NOT
* caught — if they throw, the exception propagates to ImportOpportunityBatch::handle()
* where Laravel retries the whole job with backoff. After all retries exhausted,
* failed() requeues all IDs to Redis.
*
* The per-deal loop catches exceptions individually. A deal can end up in three states:
* - success: imported/updated successfully
* - failed_ids: exception thrown (DB constraint violation, corrupt data, etc.)
* These are permanent issues — retrying won't fix them.
* - skipped (null): missing dependencies (no account, unknown pipeline/stage).
* This is acceptable — the deal cannot be imported until those exist.
*/
private function importOpportunityBatch(array $deals): array
{
$syncedOpportunities = [
'success' => [],
'failed_ids' => [],
];
$dealIds = array_column($deals, 'id');
// Shared association/existing-ID preparation is batch-level state. If it fails, rethrow so the
// queue job retries the whole batch and eventually requeues all deal IDs back to Redis.
try {
$companyAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'companies');
$contactAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'contacts');
$associationsData = $this->prepareAssociatedEntities($companyAssociations, $contactAssociations);
$existingCrmIds = $this->crmEntityRepository->getExistingOpportunityCrmIds(
$this->config,
array_map('strval', $dealIds)
);
$existingCrmIdSet = array_flip($existingCrmIds);
} catch (\Throwable $e) {
$this->logger->error('[' . $this->getDisplayName() . '] Failed to fetch associations or existing IDs', [
'teamId' => $this->team->getId(),
'dealCount' => count($dealIds),
'error' => $e->getMessage(),
]);
throw $e;
}
foreach ($deals as $deal) {
try {
$deal['associations'] = $this->prepareAssociationsForOpportunity(
$deal['id'],
$companyAssociations,
$contactAssociations,
$associationsData
);
$syncedOpportunity = $this->importOrUpdateOpportunity(
$deal,
isset($existingCrmIdSet[(string) $deal['id']])
);
if ($syncedOpportunity) {
$syncedOpportunities['success'][] = $syncedOpportunity;
}
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to import opportunity', [
'teamId' => $this->team->getId(),
'crmId' => $deal['id'],
'error' => $e->getMessage(),
]);
$syncedOpportunities['failed_ids'][] = $deal['id'];
$syncedOpportunities['errors'][$deal['id']] = $e->getMessage();
}
}
return $syncedOpportunities;
}
/**
* Prepare associated entities for opportunities with optimized batch processing
* Returns structured data with CRM ID to DB ID mappings for each opportunity
*/
private function prepareAssociatedEntities(array $companyAssociations, array $contactAssociations): array
{
// Step 1: Collect all unique company and contact IDs from associations
$allCompanyIds = $this->flattenAssociationIds($companyAssociations);
$allContactIds = $this->flattenAssociationIds($contactAssociations);
// Step 2: Batch sync missing entities and get CRM ID to DB ID mappings
$companyIdMappings = [];
$contactIdMappings = [];
if (! empty($allCompanyIds)) {
$companyIdMappings = $this->prepareAssociatedAccounts($allCompanyIds);
}
if (! empty($allContactIds)) {
$contactIdMappings = $this->prepareAssociatedContacts($allContactIds);
}
return [
'company_id_mappings' => $companyIdMappings,
'contact_id_mappings' => $contactIdMappings,
];
}
/**
* Flatten association data to get unique IDs
*/
private function flattenAssociationIds(array $associations): array
{
$ids = [];
foreach ($associations as $dealAssociations) {
if (is_array($dealAssociations)) {
foreach ($dealAssociations as $id) {
$ids[$id] = true;
}
}
}
return array_keys($ids);
}
/**
* Batch sync missing accounts
*/
private function prepareAssociatedAccounts(array $companyIds): array
{
// Find which accounts already exist
$existingAccounts = $this->crmEntityRepository
->findAccountsByExternalIds($this->config, $companyIds);
$existingCompanyIds = $existingAccounts->pluck('crm_provider_id')->toArray();
$existingAccountsData = $existingAccounts->mapWithKeys(function ($account) {
return [$account->getCrmProviderId() => $account->getId()];
})->toArray();
$missingCompanyIds = array_diff($companyIds, $existingCompanyIds);
if (empty($missingCompanyIds)) {
return $existingAccountsData;
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing accounts', [
'teamId' => $this->team->getUuid(),
'total_companies' => count($companyIds),
'existing_companies' => count($existingCompanyIds),
'missing_companies' => count($missingCompanyIds),
]);
// we already have limit on opportunity ids count
// Initialize variable before try block
$syncedAccountsData = [];
try {
$syncedAccountsData = $this->batchSyncCrmObjects('companies', $missingCompanyIds);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing accounts', [
'size' => count($missingCompanyIds),
'error' => $e->getMessage(),
]);
$syncedAccountsData = [];
}
return $existingAccountsData + $syncedAccountsData;
}
/**
* Prepare associated contacts - find existing and sync missing ones
* Returns mapping of CRM ID to DB ID
*/
private function prepareAssociatedContacts(array $contactIds): array
{
// Find which contacts already exist
$existingContacts = $this->crmEntityRepository
->findContactsByExternalIds($this->config, $contactIds);
$existingContactIds = $existingContacts->pluck('crm_provider_id')->toArray();
// Create mapping for existing contacts
$existingContactsData = $existingContacts->mapWithKeys(function ($contact) {
return [$contact->getCrmProviderId() => $contact->getId()];
})->toArray();
$missingContactIds = array_diff($contactIds, $existingContactIds);
if (empty($missingContactIds)) {
return $existingContactsData;
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing contacts', [
'teamId' => $this->team->getUuid(),
'total_contacts' => count($contactIds),
'existing_contacts' => count($existingContactIds),
'missing_contacts' => count($missingContactIds),
]);
// Sync missing contacts using batch API
try {
$syncedContactsData = $this->batchSyncCrmObjects('contacts', $missingContactIds);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing contacts', [
'size' => count($missingContactIds),
'error' => $e->getMessage(),
]);
$syncedContactsData = [];
}
return $existingContactsData + $syncedContactsData;
}
private function batchSyncCrmObjects(string $objectType, array $crmIds): array
{
$syncObjects = [];
$crmObjectIds = array_values($crmIds);
foreach (array_chunk($crmObjectIds, self::BATCH_SIZE) as $chunk) {
try {
$objects = $objectType === 'companies' ?
$this->client->getCompaniesByIds($chunk, $this->getCompanyFields()) :
$this->client->getContactsByIds($chunk, $this->getContactFields());
foreach ($objects as $objectId => $objectData) {
$this->importCrmObject($objectType, (string) $objectId, $objectData, $syncObjects);
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch synced ' . $objectType, [
'requested_count' => count($chunk),
'synced_count' => count($objects),
]);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Batch ' . $objectType . ' sync failed', [
'ids' => $chunk,
'error' => $e->getMessage(),
]);
}
}
return $syncObjects;
}
private function importCrmObject(string $objectType, string $objectId, mixed $objectData, array &$syncObjects): void
{
try {
$object = $objectType === 'companies' ?
$this->importAccount($objectData) :
$this->importContact($objectData);
if ($object) {
$syncObjects[$object->getCrmProviderId()] = $object->getId();
}
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to import batch ' . $objectType, [
'id' => $objectId,
'error' => $e->getMessage(),
]);
}
}
/**
* Prepare associations for a single opportunity
*
* The return value is an array with the following structure:
* [
* 'companies' => [
* $companyCrmId => $companyId,
* ...
* ],
* 'contacts' => [
* $contactCrmId => $contactId,
* ...
* ],
* 'account_id' => $accountId,
* ]
*/
private function prepareAssociationsForOpportunity(
string $oppCrmId,
array $companyAssociations,
array $contactAssociations,
array $associationsData
): array {
$associations = [
'companies' => [],
'contacts' => [],
'account_id' => null, // Primary account for opportunity
];
$oppCompanyIds = $companyAssociations[$oppCrmId] ?? [];
foreach ($oppCompanyIds as $companyCrmId) {
if (isset($associationsData['company_id_mappings'][$companyCrmId])) {
$associations['companies'][$companyCrmId] = $associationsData['company_id_mappings'][$companyCrmId];
// Set primary account (first company becomes primary account)
if ($associations['account_id'] === null) {
$associations['account_id'] = $associationsData['company_id_mappings'][$companyCrmId];
}
}
}
$oppContactIds = $contactAssociations[$oppCrmId] ?? [];
foreach ($oppContactIds as $contactCrmId) {
if (isset($associationsData['contact_id_mappings'][$contactCrmId])) {
$associations['contacts'][$contactCrmId] = $associationsData['contact_id_mappings'][$contactCrmId];
}
}
return $associations;
}
/**
* Update only associations for an opportunity
*/
private function updateOpportunityAssociations(Opportunity $opportunity, array $associations): void
{
// Update contact associations
$this->importOpportunityContacts($opportunity, $associations['contacts']);
// Update company (account) associations
$this->updateOpportunityAccount($opportunity, $associations['account_id']);
}
/**
* Remove all contact associations from an opportunity
*/
private function removeAllOpportunityContacts(Opportunity $opportunity): void
{
$currentCount = (int) $opportunity->contacts()->count();
if ($currentCount > 0) {
$opportunity->contacts()->detach();
$this->logger->info('[' . $this->getDisplayName() . '] Removed all contact associations', [
'opportunity_id' => $opportunity->getId(),
'removed_count' => $currentCount,
]);
}
}
private function updateOpportunityAccount(Opportunity $opportunity, ?int $accountId): void
{
if ($accountId === null) {
// No account ID provided - keep current account
return;
}
$currentAccountId = $opportunity->getAccountId();
// Only update if account has changed
if ($currentAccountId !== $accountId) {
$opportunity->account_id = $accountId;
$opportunity->save();
$this->logger->info('[' . $this->getDisplayName() . '] Updated opportunity account association', [
'opportunity_id' => $opportunity->getId(),
'old_account_id' => $currentAccountId,
'new_account_id' => $accountId,
]);
}
}
/**
* Find existing opportunities by external IDs (OPTIMIZED VERSION)
* Uses batch query for better performance
*/
private function findExistingOpportunities(array $crmIds): Collection
{
return $this->crmEntityRepository
->findOpportunitiesByExternalIds($this->config, $crmIds);
}
private function processOpportunityBatch(array $opportunities): int
{
$syncedOpportunities = $this->importOpportunityBatch($opportunities);
return count($syncedOpportunities['success'] ?? []);
}
/**
* Convert single deal associations from HubSpot format to internal format
* Handles both HubSpot SDK objects and array formats
*
* @param array $opportunityAssociations Raw associations from HubSpot API or pre-processed
*
* @return array Processed associations with DB IDs
*/
private function convertDealAssociations(array $opportunityAssociations): array
{
$associations = $this->initializeAssociationsStructure();
if (empty($opportunityAssociations)) {
return $associations;
}
$associationIds = $this->extractAssociationIds($opportunityAssociations);
$this->processCompanyAssociations($associationIds, $associations);
$this->processContactAssociations($associationIds, $associations);
return $associations;
}
private function initializeAssociationsStructure(): array
{
return [
'companies' => [],
'contacts' => [],
'account_id' => null, // Primary account for opportunity
];
}
private function extractAssociationIds(array $opportunityAssociations): array
{
$associationIds = [];
foreach ($opportunityAssociations as $type => $associationData) {
if (! empty($associationData)) {
$associationIds[$type] = $this->convertSingleDealAssociations($associationData);
}
}
return $associationIds;
}
private function processCompanyAssociations(array $associationIds, array &$associations): void
{
if (empty($associationIds['companies'])) {
return;
}
$companyId = $associationIds['companies'][0];
$account = $this->findOrSyncAccount($companyId);
if ($account instanceof Account) {
$associations['companies'][$companyId] = $account->getId();
$associations['account_id'] = $account->getId();
}
}
private function processContactAssociations(array $associationIds, array &$associations): void
{
if (empty($associationIds['contacts'])) {
return;
}
foreach ($associationIds['contacts'] as $contactId) {
$contact = $this->findOrSyncContact($contactId);
if ($contact instanceof Contact) {
$associations['contacts'][$contactId] = $contact->getId();
}
}
}
private function findOrSyncAccount(string $companyId): ?Account
{
$account = $this->crmEntityRepository->findAccountByExternalId($this->config, $companyId);
if (! $account instanceof Account) {
$account = $this->syncAccount($companyId);
}
return $account;
}
private function findOrSyncContact(string $contactId): ?Contact
{
$contact = $this->crmEntityRepository->findContactByExternalId($this->config, $contactId);
if (! $contact instanceof Contact) {
$contact = $this->syncContact($contactId);
}
return $contact;
}
private function convertSingleDealAssociations($opportunityAssociations = null): array
{
$associationData = [];
if ($opportunityAssociations === null) {
return $associationData;
}
// Handle array input (from extractAssociationIds)
if (is_array($opportunityAssociations)) {
return $opportunityAssociations;
}
// Handle CollectionResponseAssociatedId object
if ($opportunityAssociations instanceof CollectionResponseAssociatedId) {
foreach ($opportunityAssociations->getResults() as $association) {
$associationData[] = $association->getId();
}
}
return $associationData;
}
private function importOrUpdateOpportunity($crmData, ?bool $exists = null): ?Opportunity
{
if (empty($crmData['properties'])) {
return null;
}
$crmId = (string) $crmData['id'];
$properties = $crmData['properties'];
$associations = $crmData['associations'] ?? [];
$opportunityExists = $exists ?? (bool) $this->crmEntityRepository->findOpportunityByExternalId(
$this->config,
$crmId
);
if ($opportunityExists) {
return $this->updateOpportunity($crmId, $properties, $associations);
} else {
return $this->createOpportunity($crmId, $properties, $associations);
}
}
/**
* Create new opportunity
*/
private function createOpportunity(string $crmId, array $properties, array $associations): ?Opportunity
{
$accountId = $this->resolveAccountId($associations);
if (! $accountId) {
return null;
}
$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);
if (! $businessProcess) {
return null;
}
$stage = $this->resolveStage($businessProcess, $properties['dealstage'] ?? null);
if (! $stage) {
return null;
}
$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);
$attributes = [
'crm_configuration_id' => $this->config->getId(),
'crm_provider_id' => $crmId,
];
$values = array_merge($attributes, $data);
$opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);
$this->importExternalFieldData($properties, $opportunity->getId());
$this->importOpportunityContacts($opportunity, $associations['contacts']);
if ($opportunity->wasRecentlyCreated) {
MatchActivitiesToNewOpportunity::dispatch($opportunity->getId());
}
return $opportunity;
}
/**
* Update existing opportunity
*/
private function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity
{
$accountId = $this->resolveAccountId($associations);
$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);
$stage = $businessProcess ? $this->resolveStage($businessProcess, $properties['dealstage'] ?? null) : null;
$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);
$attributes = [
'crm_configuration_id' => $this->config->getId(),
'crm_provider_id' => $crmId,
];
$values = array_merge($attributes, $data);
$opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);
$this->importExternalFieldData($properties, $opportunity->getId());
$this->updateOpportunityAssociations($opportunity, $associations);
return $opportunity;
}
private function resolveAccountId(array $associations): ?int
{
if (! empty($associations['accountId'])) {
return $associations['accountId'];
}
if (empty($associations)) {
return null;
}
// we can't resolve multiple account ids (currently SDK returns one company)
foreach ($associations['companies'] as $accountId) {
return $accountId;
}
return null;
}
private function buildOpportunityData(
array $properties,
?int $accountId,
?BusinessProcess $businessProcess,
?Stage $stage
): array {
$ownerId = null;
$profile = null;
if (! empty($properties['hubspot_owner_id'])) {
$ownerId = $properties['hubspot_owner_id'];
$profile = $this->crmEntityRepository->findProfileByExternalId($this->config, (string) $ownerId);
}
$name = 'Unknown';
if (isset($properties['dealname'])) {
$name = mb_strimwidth($properties['dealname'], 0, 128);
}
$amount = $this->resolveAmount($properties);
$currency = $properties['deal_currency_code'] ?? null;
$closeDate = null;
if (! empty($properties['closedate'])) {
$closeDate = Carbon::parse($properties['closedate'])->format('Y-m-d');
}
$remotelyCreatedAt = null;
if (! empty($properties['createdate']) && strtotime($properties['createdate'])) {
$date = $this->parseCleanDatetime($properties['createdate']);
$remotelyCreatedAt = $date?->format('Y-m-d H:i:s');
}
$closedStages = $this->getClosedDealStages();
$isWon = in_array($properties['dealstage'], $closedStages['won']);
$isLost = in_array($properties['dealstage'], $closedStages['lost']);
$data = [
'team_id' => $this->team->getId(),
'user_id' => $profile ? $profile->user_id : null,
'owner_id' => $ownerId,
'name' => $name,
'value' => ! empty($amount) ? $amount : null,
'currency_code' => CurrencyFormatter::formatCode($currency),
'close_date' => $closeDate,
'is_closed' => $isWon || $isLost,
'is_won' => $isWon,
'remotely_created_at' => $remotelyCreatedAt,
'probability' => $this->resolveDealProbability($properties['hs_deal_stage_probability']),
'forecast_category' => $this->resolveForecastCategory($properties['hs_manual_forecast_category']),
];
if ($accountId) {
$data['account_id'] = $accountId;
}
if ($stage) {
$data['stage_id'] = $stage->id;
}
if ($businessProcess) {
$recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);
if ($recordType) {
$data['record_type_id'] = $recordType->id;
}
}
return $data;
}
private function resolveBusinessProcess(?string $pipelineId): ?BusinessProcess
{
if ($pipelineId === null) {
return null;
}
if (isset($this->cachedBusinessProcesses[$pipelineId])) {
return $this->cachedBusinessProcesses[$pipelineId];
}
$businessProcess = $this->getBusinessProcess($pipelineId);
if (! $businessProcess instanceof BusinessProcess) {
$this->importStages();
$businessProcess = $this->getBusinessProcess($pipelineId);
}
if (! $businessProcess instanceof BusinessProcess) {
$this->logger->info(
'[HubSpot] Deal is not attached to a pipeline',
[
'pipeline' => $pipelineId]
);
}
$this->cachedBusinessProcesses[$pipelineId] = $businessProcess;
return $businessProcess;
}
private function getBusinessProcess(string $pipelineId): ?BusinessProcess
{
return $this->crmEntityRepository->findBusinessProcessesByExternalId($this->config, $pipelineId);
}
private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage
{
if (empty($stageId)) {
return null;
}
$cacheKey = $businessProcess->getId() . ':' . $stageId;
if (isset($this->cachedStages[$cacheKey])) {
return $this->cachedStages[$cacheKey];
}
$stage = $this->crmEntityRepository->getPipelineStageByConditions(
$businessProcess,
[
'crm_provider_id' => $stageId,
'type' => Stage::TYPE_OPPORTUNITY,
]
);
if ($stage === null) {
$this->importStages(null, $stageId);
}
if ($stage === null) {
$this->logger->info('[HubSpot] Stage does not exist => ' . $stageId);
}
$this->cachedStages[$cacheKey] = $stage;
return $stage;
}
private function resolveAmount(array $properties): ?string
{
$amount = null;
if (! empty($properties['amount'])) {
$amount = str_replace(',', '', $properties['amount']);
}
if ($this->config->hasDefaultCurrencyFieldSet()) {
$valueFieldName = $this->config->getDefaultCurrencyField()->getCrmProviderId();
$amount = $properties[$valueFieldName] ?? $amount;
}
return $amount;
}
private function parseCleanDatetime(string $datetime): ?Carbon
{
// Treat pre-1980 values as invalid
$minValidDate = Carbon::parse('1980-01-01 00:00:00');
try {
$date = Carbon::parse($datetime);
if ($minValidDate->gt($date)) {
return null;
}
return $date;
} catch (Exception) {
return null; // On parse error, treat as null
}
}
private function resolveDealProbability(?string $stageProbability): int
{
if ($stageProbability === null) {
return 0;
}
$probability = (float) $stageProbability;
return $probability > 1 ? 0 : (int) ($probability * 100);
}
private function resolveForecastCategory(?string $forecastCategory): string
{
if (! $forecastCategory) {
return Forecast::FORECAST_CATEGORY_UNCATEGORIZED;
}
$forecastCategory = str_replace('_', ' ', $forecastCategory);
return ucwords(strtolower($forecastCategory));
}
private function importExternalFieldData(array $properties, int $opportunityId): void
{
$crmFields = $this->getOpportunitySyncableFields();
$this->importOpportunityCrmFieldData($properties, $crmFields, $opportunityId);
}
private function importOpportunityContacts(Opportunity $opportunity, array $associations): void
{
// Handle empty or missing contact associations
if (empty($associations)) {
// Remove all existing contact associations if none provided
$this->removeAllOpportunityContacts($opportunity);
return;
}
// Use differential sync approach for better performance and accuracy
$this->syncOpportunityContactsDifferential($opportunity, $associations);
}
/**
* Sync opportunity contacts using differential approach
* This compares current vs new associations and only makes necessary changes
*/
private function syncOpportunityContactsDifferential(Opportunity $opportunity, array $contactAssociations): void
{
$currentContactCrmIds = $this->getCurrentContactCrmIds($opportunity);
$contactAssociationIds = array_keys($contactAssociations);
$contactsToAdd = array_diff($contactAssociationIds, $currentContactCrmIds);
$contactsToRemove = array_diff($currentContactCrmIds, $contactAssociationIds);
if (empty($contactsToAdd) && empty($contactsToRemove)) {
return;
}
$this->logContactAssociationChanges($opportunity, $currentContactCrmIds, $contactAssociations, $contactsToAdd, $contactsToRemove);
$this->removeContactAssociations($opportunity, $contactsToRemove);
$this->addContactAssociations($opportunity, $contactsToAdd, $contactAssociations);
}
private function getCurrentContactCrmIds(Opportunity $opportunity): array
{
return $opportunity->contacts()
->pluck('contacts.crm_provider_id')
->toArray();
}
private function logContactAssociationChanges(
Opportunity $opportunity,
array $currentContactCrmIds,
array $contactAssociations,
array $contactsToAdd,
array $contactsToRemove
): void {
$this->logger->info('[' . $this->getDisplayName() . '] Contact association changes', [
'opportunity_id' => $opportunity->getId(),
'current_contacts' => $currentContactCrmIds,
'new_contacts' => $contactAssociations,
'contacts_to_add' => $contactsToAdd,
'contacts_to_remove' => $contactsToRemove,
]);
}
private function removeContactAssociations(Opportunity $opportunity, array $contactsToRemove): void
{
if (empty($contactsToRemove)) {
return;
}
$contactsToDetach = $opportunity->contacts()
->whereIn('contacts.crm_provider_id', $contactsToRemove)
->pluck('contacts.id')
->toArray();
if (! empty($contactsToDetach)) {
$opportunity->contacts()->detach($contactsToDetach);
$this->logger->info('[' . $this->getDisplayName() . '] Removed contact associations', [
'opportunity_id' => $opportunity->getId(),
'removed_contact_crm_ids' => $contactsToRemove,
'removed_contact_count' => count($contactsToDetach),
]);
}
}
private function addContactAssociations(Opportunity $opportunity, array $contactsToAdd, array $contactAssociations): void
{
if (empty($contactsToAdd)) {
return;
}
$contactsAdded = [];
foreach ($contactsToAdd as $crmId) {
$id = $contactAssociations[$crmId];
if ($this->attachSingleContact($opportunity, (string) $crmId, $id)) {
$contactsAdded[] = $crmId;
}
}
$this->logAddedContacts($opportunity, $contactsAdded);
}
private function attachSingleContact(Opportunity $opportunity, string $crmId, int $id): bool
{
try {
$contact = $this->crmEntityRepository->findContactByConfigurationAndId($this->config, $id);
if (! $contact) {
return false;
}
return $this->performContactAttachment($opportunity, $contact, $crmId);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to add contact association', [
'opportunity_id' => $opportunity->getId(),
'contact_crm_id' => $crmId,
'error' => $e->getMessage(),
]);
return false;
}
}
private function performContactAttachment(Opportunity $opportunity, Contact $contact, string $crmId): bool
{
try {
$opportunity->contacts()->attach($contact->getId(), [
'crm_provider_id' => $crmId,
]);
return true;
} catch (\Illuminate\Database\QueryException $e) {
if (str_contains($e->getMessage(), 'Duplicate entry')) {
$this->logger->info('[' . $this->getDisplayName() . '] Contact association already exists', [
'contact_id' => $contact->getId(),
'contact_crm_id' => $crmId,
'opportunity_id' => $opportunity->getId(),
]);
return false;
}
throw $e;
}
}
private function logAddedContacts(Opportunity $opportunity, array $contactsAdded): void
{
if (! empty($contactsAdded)) {
$this->logger->info('[' . $this->getDisplayName() . '] Added contact associations', [
'opportunity_id' => $opportunity->getId(),
'contacts_to_add_count' => count($contactsAdded),
'added_contact_crm_ids' => $contactsAdded,
'added_contacts_count' => count($contactsAdded),
]);
}
}
}
Execute
Explain Plan
Browse Query History...
|
NULL
|
|
43327
|
922
|
14
|
2026-04-17T08:03:20.099697+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776413000099_m1.jpg...
|
Firefox
|
Meet - Backend Chapter — Work
|
True
|
meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovali meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.com...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Workers | Datadog
Platform Sprint 2 Q2 - Platform Workers | Datadog
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Close tab
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
Problem loading page
Close tab
Symfony\Component\Debug\Exception\FatalThrowableError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line
Close tab
CloudWatch | us-east-2
Close tab
Configure SSH access to multiple environment - Engineering - Confluence
Close tab
Console Home | Console Home | eu-west-1
Close tab
New Tab
Close tab
Meet - Backend Chapter
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Nikolov (Presenting, annotating)
Nikolay Nikolov (Presenting, annotating)
People
3
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Unpin Nikolay Nikolov's presentation from your main screen
You can't unmute someone else's presentation
More options for Nikolay Nikolov
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Pin Nikolay Nikolov to your main screen
Mute Nikolay Nikolov's microphone
More options for Nikolay Nikolov
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
You’re continuously framed
Backgrounds and effects
More options for Lukas Kovalik
Lukas Kovalik
Others might see more of your background. Click to view your full video.
11:03
AM
Backend Chapter
Backend Chapter
Audio settings
Turn off microphone
Video settings
Turn off camera
Nikolay Nikolov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
The presentation by Nikolay Nikolov was added to the main screen. The presentation by Nikolay Nikolov is on the main screen....
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Workers | Datadog","depth":4,"bounds":{"left":0.0,"top":0.072222225,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.13222222,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.13222222,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":4,"bounds":{"left":0.0,"top":0.17777778,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.17777778,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"bounds":{"left":0.0,"top":0.22333333,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.22333333,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Symfony\\Component\\Debug\\Exception\\FatalThrowableError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line","depth":4,"bounds":{"left":0.0,"top":0.2688889,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.2688889,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.31444445,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.31444445,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"bounds":{"left":0.0,"top":0.36,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.36,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Console Home | Console Home | eu-west-1","depth":4,"bounds":{"left":0.0,"top":0.40555555,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.40555555,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.4511111,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.4511111,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Meet - Backend Chapter","depth":4,"bounds":{"left":0.0,"top":0.49666667,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.49666667,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.005902778,"top":0.54444444,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.7977778,"width":0.033680554,"height":0.043333333},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8411111,"width":0.033680554,"height":0.038333334},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.8794444,"width":0.033680554,"height":0.03888889},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.91833335,"width":0.033680554,"height":0.038333334},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.95666665,"width":0.033680554,"height":0.043333333},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Nikolay Nikolov (Presenting, annotating)","depth":12,"bounds":{"left":0.07534722,"top":0.101111114,"width":0.17916666,"height":0.022222223},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Nikolov (Presenting, annotating)","depth":13,"bounds":{"left":0.07534722,"top":0.10222222,"width":0.17916666,"height":0.020555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"People","depth":15,"bounds":{"left":0.88680553,"top":0.08944444,"width":0.04097222,"height":0.04},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.9145833,"top":0.101111114,"width":0.0048611113,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Take notes with Gemini","depth":14,"bounds":{"left":0.93333334,"top":0.08944444,"width":0.025,"height":0.04},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":17,"bounds":{"left":0.9361111,"top":0.101111114,"width":0.06388891,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini","depth":22,"bounds":{"left":0.96666664,"top":0.101111114,"width":0.028125,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Gemini","depth":21,"bounds":{"left":0.96458334,"top":0.090555556,"width":0.023611112,"height":0.037777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.5798611,"top":0.61,"width":0.14652778,"height":0.08888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.72430557,"top":0.625,"width":0.08090278,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.7017361,"top":0.6205556,"width":0.11076389,"height":0.05666667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unpin Nikolay Nikolov's presentation from your main screen","depth":13,"bounds":{"left":0.34618056,"top":0.5088889,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"You can't unmute someone else's presentation","depth":13,"bounds":{"left":0.37395832,"top":0.50666666,"width":0.030555556,"height":0.04888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More options for Nikolay Nikolov","depth":13,"bounds":{"left":0.4045139,"top":0.5088889,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Zoom in","depth":13,"bounds":{"left":0.63090277,"top":0.78333336,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open in new window","depth":13,"bounds":{"left":0.6642361,"top":0.78333336,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Enter Full Screen","depth":13,"bounds":{"left":0.69756943,"top":0.78333336,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.9201389,"top":0.36666667,"width":0.079861104,"height":0.07722222},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":1.0,"top":0.38166666,"width":-0.064236164,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":1.0,"top":0.3772222,"width":-0.042013884,"height":0.045},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pin Nikolay Nikolov to your main screen","depth":13,"bounds":{"left":0.82395834,"top":0.31555554,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Mute Nikolay Nikolov's microphone","depth":13,"bounds":{"left":0.8517361,"top":0.31333333,"width":0.030555556,"height":0.04888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More options for Nikolay Nikolov","depth":13,"bounds":{"left":0.8822917,"top":0.31555554,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":17,"bounds":{"left":0.75590277,"top":0.485,"width":0.07847222,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":1.0,"top":0.75333333,"width":-0.0006943941,"height":0.07722222},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.92743057,"top":0.7683333,"width":0.07256943,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.9079861,"top":0.7638889,"width":0.092013896,"height":0.045},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"You’re continuously framed","depth":13,"bounds":{"left":0.82256943,"top":0.7,"width":0.030555556,"height":0.04888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Backgrounds and effects","depth":13,"bounds":{"left":0.853125,"top":0.7,"width":0.030555556,"height":0.04888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More options for Lukas Kovalik","depth":13,"bounds":{"left":0.8836806,"top":0.7022222,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"bounds":{"left":0.75590277,"top":0.87166667,"width":0.06875,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Others might see more of your background. Click to view your full video.","depth":14,"bounds":{"left":0.9614583,"top":0.86722225,"width":0.019444445,"height":0.031111112},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"11:03","depth":12,"bounds":{"left":0.050347224,"top":0.9444444,"width":0.02673611,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AM","depth":12,"bounds":{"left":0.08055556,"top":0.9444444,"width":0.017708333,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Backend Chapter","depth":12,"bounds":{"left":0.115625,"top":0.9111111,"width":0.08993056,"height":0.08888888},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Backend Chapter","depth":15,"bounds":{"left":0.115625,"top":0.9444444,"width":0.08993056,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Audio settings","depth":13,"bounds":{"left":0.32118055,"top":0.9288889,"width":0.06111111,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn off microphone","depth":13,"bounds":{"left":0.34895834,"top":0.9288889,"width":0.033333335,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Video settings","depth":13,"bounds":{"left":0.38784721,"top":0.9288889,"width":0.06111111,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn off camera","depth":13,"bounds":{"left":0.415625,"top":0.9288889,"width":0.033333335,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Nikolay Nikolov is presenting","depth":12,"bounds":{"left":0.45451388,"top":0.9288889,"width":0.03888889,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Send a reaction","depth":12,"bounds":{"left":0.49895832,"top":0.9288889,"width":0.03888889,"height":0.053333335},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn on captions","depth":13,"bounds":{"left":0.5434028,"top":0.9288889,"width":0.03888889,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Raise hand (ctrl + ⌘ + h)","depth":12,"bounds":{"left":0.58784723,"top":0.9288889,"width":0.03888889,"height":0.053333335},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More options","depth":12,"bounds":{"left":0.6322917,"top":0.9288889,"width":0.025,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Leave call","depth":12,"bounds":{"left":0.6628472,"top":0.9288889,"width":0.05,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Meeting details","depth":12,"bounds":{"left":0.89166665,"top":0.9288889,"width":0.033333335,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat with everyone","depth":12,"bounds":{"left":0.925,"top":0.9288889,"width":0.033333335,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Meeting tools","depth":12,"bounds":{"left":0.9583333,"top":0.9288889,"width":0.033333335,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"The presentation by Nikolay Nikolov was added to the main screen. The presentation by Nikolay Nikolov is on the main screen.","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
5445154472650180529
|
-6453401609438004432
|
app_switch
|
hybrid
|
NULL
|
Workers | Datadog
Platform Sprint 2 Q2 - Platform Workers | Datadog
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Close tab
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
Problem loading page
Close tab
Symfony\Component\Debug\Exception\FatalThrowableError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line
Close tab
CloudWatch | us-east-2
Close tab
Configure SSH access to multiple environment - Engineering - Confluence
Close tab
Console Home | Console Home | eu-west-1
Close tab
New Tab
Close tab
Meet - Backend Chapter
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Nikolov (Presenting, annotating)
Nikolay Nikolov (Presenting, annotating)
People
3
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Unpin Nikolay Nikolov's presentation from your main screen
You can't unmute someone else's presentation
More options for Nikolay Nikolov
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Pin Nikolay Nikolov to your main screen
Mute Nikolay Nikolov's microphone
More options for Nikolay Nikolov
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
You’re continuously framed
Backgrounds and effects
More options for Lukas Kovalik
Lukas Kovalik
Others might see more of your background. Click to view your full video.
11:03
AM
Backend Chapter
Backend Chapter
Audio settings
Turn off microphone
Video settings
Turn off camera
Nikolay Nikolov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
The presentation by Nikolay Nikolov was added to the main screen. The presentation by Nikolay Nikolov is on the main screen.
FirefoxFileEditViewHistory→Nikolay Nikolov (Presenting, annotating)BookmarksProfilesToolsWindowHelp(allBackend Chapter • 27 m leftmeet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.com100% C47 8• Fri 17 Apr 11:03:193SQL EditorDatabase*<PROD US> jiminny_nki_Jocal.sol XFri 17 Ape 11:03B3 Projec# LOCAL devAlesanоstPRoDtUlocalhost:74.32ASTAGE localhost7732# Staging_root localhost7732+select * fron failed_jobs fj where fj-queue like 'tanalytics_low' order by id desc;|-- REPORTS |select * fron opportunities where id = 7594349}select « fron opportunity_stages os where os.opportunity_id = 7594349 and os.created_at > '2026-04-17 04:20:00' order by os.created_at desc;select count(») fron opportunity_stages os where os.opportunity_id = 7594349 and os.created_at > '2026-84-17 04:20:00' order by os.created_at asc;select distinct os.stage_id from opportunity_stages os where os.opportunity_id = 7594349 and os.created_at > '2026-04-17 04:20:00' order by os.created_at aSELECT stage_id, COUNT(*) as count, MIN(created_at), MAX(created_at)FROM opportunity_stagesWHEREopportunity_id = 7594349ukour br stage. tosNikolay Nikolov116112026.803Paneis 8 ® E # Eюбку ?meet.google.com is sharing your screen.Stop sharing201s (0.001s fetch), on 2026-04-17 a: 10:52:181095 :1: 79365Sel: 010Lukas Kovalik11:03 AM | Backend Chapter...
|
NULL
|
|
43333
|
922
|
17
|
2026-04-17T08:03:31.620411+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776413011620_m1.jpg...
|
Firefox
|
Meet - Backend Chapter — Work
|
True
|
meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovali meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.com...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Workers | Datadog
Platform Sprint 2 Q2 - Platform Workers | Datadog
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Close tab
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
Problem loading page
Close tab
Symfony\Component\Debug\Exception\FatalThrowableError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line
Close tab
CloudWatch | us-east-2
Close tab
Configure SSH access to multiple environment - Engineering - Confluence
Close tab
Console Home | Console Home | eu-west-1
Close tab
New Tab
Close tab
Meet - Backend Chapter
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Nikolov (Presenting, annotating)
Nikolay Nikolov (Presenting, annotating)
People
3
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Unpin Nikolay Nikolov's presentation from your main screen
You can't unmute someone else's presentation
More options for Nikolay Nikolov
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Pin Nikolay Nikolov to your main screen
Mute Nikolay Nikolov's microphone
More options for Nikolay Nikolov
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
You’re continuously framed
Backgrounds and effects
More options for Lukas Kovalik...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Workers | Datadog","depth":4,"bounds":{"left":0.0,"top":0.072222225,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.13222222,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.13222222,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":4,"bounds":{"left":0.0,"top":0.17777778,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.17777778,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"bounds":{"left":0.0,"top":0.22333333,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.22333333,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Symfony\\Component\\Debug\\Exception\\FatalThrowableError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line","depth":4,"bounds":{"left":0.0,"top":0.2688889,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.2688889,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"bounds":{"left":0.0,"top":0.31444445,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.31444445,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"bounds":{"left":0.0,"top":0.36,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.36,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Console Home | Console Home | eu-west-1","depth":4,"bounds":{"left":0.0,"top":0.40555555,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.40555555,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.4511111,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.4511111,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Meet - Backend Chapter","depth":4,"bounds":{"left":0.0,"top":0.49666667,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.49666667,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.005902778,"top":0.54444444,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.7977778,"width":0.033680554,"height":0.043333333},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8411111,"width":0.033680554,"height":0.038333334},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.8794444,"width":0.033680554,"height":0.03888889},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.91833335,"width":0.033680554,"height":0.038333334},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.95666665,"width":0.033680554,"height":0.043333333},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Nikolay Nikolov (Presenting, annotating)","depth":12,"bounds":{"left":0.07534722,"top":0.101111114,"width":0.17916666,"height":0.022222223},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Nikolov (Presenting, annotating)","depth":13,"bounds":{"left":0.07534722,"top":0.10222222,"width":0.17916666,"height":0.020555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"People","depth":15,"bounds":{"left":0.88680553,"top":0.08944444,"width":0.04097222,"height":0.04},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.9145833,"top":0.101111114,"width":0.0048611113,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Take notes with Gemini","depth":14,"bounds":{"left":0.93333334,"top":0.08944444,"width":0.025,"height":0.04},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":17,"bounds":{"left":0.9361111,"top":0.101111114,"width":0.06388891,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini","depth":22,"bounds":{"left":0.96666664,"top":0.101111114,"width":0.028125,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Gemini","depth":21,"bounds":{"left":0.96458334,"top":0.090555556,"width":0.023611112,"height":0.037777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.5798611,"top":0.61,"width":0.14652778,"height":0.08888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.72430557,"top":0.625,"width":0.08090278,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.7017361,"top":0.6205556,"width":0.11076389,"height":0.05666667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unpin Nikolay Nikolov's presentation from your main screen","depth":13,"bounds":{"left":0.34618056,"top":0.5088889,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"You can't unmute someone else's presentation","depth":13,"bounds":{"left":0.37395832,"top":0.50666666,"width":0.030555556,"height":0.04888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More options for Nikolay Nikolov","depth":13,"bounds":{"left":0.4045139,"top":0.5088889,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Zoom in","depth":13,"bounds":{"left":0.63090277,"top":0.78333336,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open in new window","depth":13,"bounds":{"left":0.6642361,"top":0.78333336,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Enter Full Screen","depth":13,"bounds":{"left":0.69756943,"top":0.78333336,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.9201389,"top":0.36666667,"width":0.079861104,"height":0.07722222},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":1.0,"top":0.38166666,"width":-0.064236164,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":1.0,"top":0.3772222,"width":-0.042013884,"height":0.045},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pin Nikolay Nikolov to your main screen","depth":13,"bounds":{"left":0.82395834,"top":0.31555554,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Mute Nikolay Nikolov's microphone","depth":13,"bounds":{"left":0.8517361,"top":0.31333333,"width":0.030555556,"height":0.04888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More options for Nikolay Nikolov","depth":13,"bounds":{"left":0.8822917,"top":0.31555554,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":17,"bounds":{"left":0.75590277,"top":0.485,"width":0.07847222,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":1.0,"top":0.75333333,"width":-0.0006943941,"height":0.07722222},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.92743057,"top":0.7683333,"width":0.07256943,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.9079861,"top":0.7638889,"width":0.092013896,"height":0.045},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"You’re continuously framed","depth":13,"bounds":{"left":0.82256943,"top":0.7,"width":0.030555556,"height":0.04888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Backgrounds and effects","depth":13,"bounds":{"left":0.853125,"top":0.7,"width":0.030555556,"height":0.04888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More options for Lukas Kovalik","depth":13,"bounds":{"left":0.8836806,"top":0.7022222,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
2656420774226604358
|
-6471425078918415568
|
app_switch
|
hybrid
|
NULL
|
Workers | Datadog
Platform Sprint 2 Q2 - Platform Workers | Datadog
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Close tab
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
Problem loading page
Close tab
Symfony\Component\Debug\Exception\FatalThrowableError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line
Close tab
CloudWatch | us-east-2
Close tab
Configure SSH access to multiple environment - Engineering - Confluence
Close tab
Console Home | Console Home | eu-west-1
Close tab
New Tab
Close tab
Meet - Backend Chapter
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Nikolov (Presenting, annotating)
Nikolay Nikolov (Presenting, annotating)
People
3
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Unpin Nikolay Nikolov's presentation from your main screen
You can't unmute someone else's presentation
More options for Nikolay Nikolov
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Pin Nikolay Nikolov to your main screen
Mute Nikolay Nikolov's microphone
More options for Nikolay Nikolov
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
You’re continuously framed
Backgrounds and effects
More options for Lukas Kovalik
FirefoxFileEditView→Nikolay Nikolov (Presenting, annotating)HistoryBookmarksProfilesToolsWindowHelp(allBackend Chapter • 27 m leftmeet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.com100% C47 8• Fri 17 Apr 11:03:313SOL Editor Database*<PROD US> jiminny_nki_Jocal.sol XFri 17 Apr 11:03CntoUtecYkOU Uouminnyahinieoca,• 0• 8•9-3 ProjecA LOCAL devPlosanostPRoD tUcarloscrose/QA locahost7432•STAGE localhost7732A Staging_root localhost7732+select * fron failed_jobs fj where f)-queue like 'sanalytics_low' order by id desc;-- REPORTS |select * fron opportunities where id = 7594349;select « from opportunity_stages os where os.opportunity_id = 7594349 and Os.created_at > '2026-04-17 04:20:00' order by os.created_at desc;select count(») from opportunity_stages os where os.opportunity_id = 7594349 and os.created_at > '2026-84-17 04:20:00' order by os.created_at asc:select distinct os.stage_id from opportunity_stages os where os.opportunity_id = 7594349 and os.created_at > '2026-04-17 84:20:00' order by os-created_at aSELECT stage_id, COUNT(*) as count, MIN(created_at), MAX(created_at)FROM opportunity_stagesWHEREopportunity_id = 7594349ukuur br stage.3osNikolay Nikolov• close_date2026-07-03@deleted_atWereatecaonowor-tetet7026-03-10 16:1024302070-00000Panels 8 ® l 1 limeet.google.com is sharing your screen.Stop sharing1087 : 48 : 78913Sel: 010Lukas Kovalik11:03 AM | Backend Chapter...
|
NULL
|
|
43334
|
923
|
9
|
2026-04-17T08:03:31.620442+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776413011620_m2.jpg...
|
Firefox
|
Meet - Backend Chapter — Work
|
True
|
meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovali meet.google.com/gjc-ikxu-wxu?authuser=lukas.kovalik%40jiminny.com...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Workers | Datadog
Platform Sprint 2 Q2 - Platform Workers | Datadog
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Close tab
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
Problem loading page
Close tab
Symfony\Component\Debug\Exception\FatalThrowableError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line
Close tab
CloudWatch | us-east-2
Close tab
Configure SSH access to multiple environment - Engineering - Confluence
Close tab
Console Home | Console Home | eu-west-1
Close tab
New Tab
Close tab
Meet - Backend Chapter
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Nikolov (Presenting, annotating)
Nikolay Nikolov (Presenting, annotating)
People
3
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Unpin Nikolay Nikolov's presentation from your main screen
You can't unmute someone else's presentation
More options for Nikolay Nikolov
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Pin Nikolay Nikolov to your main screen
Mute Nikolay Nikolov's microphone
More options for Nikolay Nikolov
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
You’re continuously framed
Backgrounds and effects...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Workers | Datadog","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.018945312,"height":-0.045138836},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.018945312,"height":-0.08263886},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.23398438,"top":1.0,"width":0.005859375,"height":-0.08263886},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Problem loading page","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Symfony\\Component\\Debug\\Exception\\FatalThrowableError: League\\Flysystem\\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"CloudWatch | us-east-2","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Configure SSH access to multiple environment - Engineering - Confluence","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Console Home | Console Home | eu-west-1","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Meet - Backend Chapter","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Nikolay Nikolov (Presenting, annotating)","depth":12,"bounds":{"left":0.27558595,"top":1.0,"width":0.10078125,"height":-0.063194394},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Nikolov (Presenting, annotating)","depth":13,"bounds":{"left":0.27558595,"top":1.0,"width":0.10078125,"height":-0.06388891},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"People","depth":15,"bounds":{"left":0.7320312,"top":1.0,"width":0.023046875,"height":-0.05590272},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"3","depth":22,"bounds":{"left":0.7476562,"top":1.0,"width":0.002734375,"height":-0.063194394},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Take notes with Gemini","depth":14,"bounds":{"left":0.75820315,"top":1.0,"width":0.0140625,"height":-0.05590272},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":17,"bounds":{"left":0.7597656,"top":1.0,"width":0.051171876,"height":-0.063194394},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini","depth":22,"bounds":{"left":0.7769531,"top":1.0,"width":0.015820313,"height":-0.063194394},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Gemini","depth":21,"bounds":{"left":0.7757813,"top":1.0,"width":0.01328125,"height":-0.056597233},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Unpin Nikolay Nikolov's presentation from your main screen","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"You can't unmute someone else's presentation","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More options for Nikolay Nikolov","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Zoom in","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open in new window","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Enter Full Screen","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pin Nikolay Nikolov to your main screen","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Mute Nikolay Nikolov's microphone","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More options for Nikolay Nikolov","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"You’re continuously framed","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Backgrounds and effects","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
2796550329874451212
|
-6471425078918415568
|
app_switch
|
hybrid
|
NULL
|
Workers | Datadog
Platform Sprint 2 Q2 - Platform Workers | Datadog
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Close tab
[SRD-6793] Les Mills activity types not pulling in - Jira
Close tab
Problem loading page
Close tab
Symfony\Component\Debug\Exception\FatalThrowableError: League\Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line
Close tab
CloudWatch | us-east-2
Close tab
Configure SSH access to multiple environment - Engineering - Confluence
Close tab
Console Home | Console Home | eu-west-1
Close tab
New Tab
Close tab
Meet - Backend Chapter
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Nikolov (Presenting, annotating)
Nikolay Nikolov (Presenting, annotating)
People
3
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Unpin Nikolay Nikolov's presentation from your main screen
You can't unmute someone else's presentation
More options for Nikolay Nikolov
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Pin Nikolay Nikolov to your main screen
Mute Nikolay Nikolov's microphone
More options for Nikolay Nikolov
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
You’re continuously framed
Backgrounds and effects
PhpStormFV faVsco.jsProjectv© Nudae.php© NudgeRun.phpOpportunity.php© Participant.php© Partner.php© Permission.php© PhoneNumber.php© PlaybackTheme.php© Playbook.php© PlaybookCategory.php© Playlist.php© RateLimit.phpC Region.php©Role.php©RoleChangeEvent.php© ScopeGroup.php© Session.php© SlackBot.php© SocialAccount.php© Stage.php© Task.php© Team.php© TeamAiContext.php© TeamDomain.php© TeamFeature.php© TeamSettings.php© TextRelay.php© Track.php© TranscriptionModel.php© TranscriptionModelLoc:© TranscriptionProvider.p© User.php©UserSettings.php© Vocabulary.php© VocabularyPronunciatio© VoiceAccess.php©VoiceConsentPrefix.php› D NotificationsD ObserversC PoliciesO ProvidersD QueueRepositoriesD AIAutoScoringCalendar>DCrm> D Geography© ActiveStreamsRepositol© ActivityCommentRepos© ActivityLogRepository.p© ActivityMessageReposii© ActivityMomentRepositr© ActivityProviderReposit© ActivityRepository.php© Activity SearchFilterRep® ActivityShareRepository© ActivityUploadSettingRi© AiPromptRepository.phyViewNavigateCodeLaravelRefacton( #11894 on JY-18909-automated-reports-ask-jiminny k v© AutomatedReportsService.php© SendReportJob.php© SendReportMailJob.php© ReportController.php© TokenBuilder.php© TeamSetupController.phppnp apl.onp• Filesystem.phpAutomatedReportsCommand.phpAskJiminnykeporscontroller.ono© AutomatedReportsCommandTest.php© AutomatedReportsSendCommand.php© Team.php© AutomatedReportsRepository.php© CreateHeldActivityEvent.php© TrackProviderInstalledEvent.php© CreateActivityLoggedEvent.php© UserPilotActivityListener.phpC ActivityLogged.phpAulomaleakeporscallbackservice.onoC RequestGenerateAskJiminnyReportJob.php© RequestGenerateReportJob.php© SyncOpportunity.php© OpportunitySyncTrait.phpService.php© AutomatedReportResult.php(c) AutomatedReport.onpclass Opportunity extends Model implements158159160'forecast_category',];161162163164protected $appends = [la_scring]:165 G166167168169protected $hidden = ['uvid','id',170 6t >1174protected static function newFactory(): Factoryf...}175 đt >protected static function bootOf...}170/** @deprecated */L77public function deleteExistingAjPrompt(): voidf...}209 6t >220protected function casts(): arrayf...}/** @deprecated */public function getOpportunitySuggestAttribute(): stringf...3226LLIpublic function getFormattedValueAttribute(): stringf...7232244public function getCurrencyCode(): stringf...}24514%public function getName(): stringf..public function isClosed(): boolf...}200public function isWon(): boolf...}260public function activities(): hasMany{...}Helper Code will help IDE to understand your Laravel app code. // Generate // Don't Show Anymore (today 8:59)Backend Chaoter . 27 m lefi100% C•8 • Fri 17 Apr 11:03:31AutomatedReportsCommandTestvA HS_local [iminny@localhost]Al console [EU] X= custom.log= laravel.logfii crm_configurations (EU]V connect.vueV Onboard.vue1550155115521553B15MTAY19501950105/[CREDIT_CARD]—1562-1563156515661567190815691570157115721573157415751080158115871588115821570157110Y41593159415951596159715981599A SF [jiminny@localhost]C" scratch_1.jsonconsole PRODL console [STAGING]Ix. Aulo vFlaycroundvselect * from contacts cwhere c.crm_configuration_id = 370 order by c.updated_at desc;SELECT * FROM participants where activity_id = 38833541;SELECT * FROM participants where activity_id = 39216301;SELECT * FROM activity_summary_logs where activity_id = 39216301;SELECT * FROM activities WHERE uuid_to_bin('c7d99fbe-1fb1-41f2-8f4d-52e2bf70e1e9') = uuid; # 38833541,|Cril 470.11090410SELECT * FROM activitiesYnckr vure to onnceontuon-y1ad-44a-doceyacoe4doonae = Uulo # 07410001.CMII 400.1000900select * from crm_profiles where crm_configuration_id = 319 and crm_provider_id = 525785080;select * from opportunities where crm_configuration_id = 319 and crm_provider_id = 410150124747;select * from accounts where crm_configuration_id = 319 and crm_provider_id = 47150650569;select * from contacts where crm_configuration_id = 319 and crm_provider_id IN ('665587441856','742723347700');# owner 13236 525785080# contact 116779180 665587441856 - activity - Alex Howes [EMAIL] created 2026-01-26# contact 219247563 742723347700 - [EMAIL] 2026-03-24# company 4176133 47150650569# deal 7100953 410150124747SELECTCONCAT(u.id, CASE WHEN U.id = t.owner_id THEN ' (owner)' ELSE "' END) AS user_id,U.ellan tosa.*,t.owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idJOIN teams t 1.n<->1: on t.id = u.team_idWHERE U.team_id = 400 and sa.provider = 'hubspot':select * from features;select * from team_features where feature_id = 40;select * from teams where id = 556: # owner: 18101. crm: 477select * from crm_configurations where id = 477;SELECT * FROM users WHERE id = 18101;SELECTCONCAT(u.id, CASE WHEN U.id = t.owner_id THEN ' (owner)' ELSE "' END) AS user_id,u.email,sa.*,t.owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idNureanstI.n<->I: on t.1d = U.team_1dWHERE U.team_id = 556 and sa.provider = 'integration-app';select * from opportunities where id = 7594349;select * from stages where team_id = 459;select * from teams where id = 459;SELECTCONCAT(u.id, CASE WHEN U.id = t.owner_id THEN ' (owner)' ELSE "' END) AS user_id,u.email,sa.*,t.owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idJOIN teams tI.n<→>I: on t.1d = U.ceam_1dWHERE U.team_1d = 45% and sa.provider = 'nupspor :Eajiminny026 49 422 Х 3 X103 ^d M1111W Windsurf Teams 1:1 UTF-8 f 4 spaces...
|
NULL
|
|
43613
|
926
|
21
|
2026-04-17T08:13:41.432893+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776413621432_m1.jpg...
|
PhpStorm
|
faVsco.js – RunOpportunityAiAnalysis.php
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AutomatedReportsCommandTest
Run 'AutomatedReportsCommandTest'
Debug 'AutomatedReportsCommandTest'...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AutomatedReportsCommandTest","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AutomatedReportsCommandTest'","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AutomatedReportsCommandTest'","depth":6,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-482216603274606444
|
1760908322497348928
|
app_switch
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AutomatedReportsCommandTest
Run 'AutomatedReportsCommandTest'
Debug 'AutomatedReportsCommandTest'
FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelpallBackend Chapter • 17 m left100% C8 • Fri 17 Apr 11:13:41meet.google.com/xpx-omah-rkn=+llian Kyuchukov (Presenting, annotating)FileProfies...= 408 • Fri 17 Apr 11:13CloudWatch |eu-west-1CloodWatch | eu-west-1eu-west-1.console.aws.amazon.com/cloudwatch/home?region=eu-west-1alogsV2:logs-insightsS3FqueryDetailS3D-(end-0-start--172800-timeType-'RELATIVE-1z~'UTC-unit-/seconds-editor Strin..Finish update :aws[Option+S) ©urope (irelneRU.View_Only_©765720199711MOUGWALCELogs Insights > _generalQuery definition infoQueriesja unified observabllity platform for a smoother experience, now in preview mode. Click here to try it out!Custom (2d)UTC timezone2 Start tailingSaved queriesQ Filter by query nomeLearn more tQuery scopeLog group nameTUUYCILY SEICLAUSelect up to 50 log groupsBrowse: Log GroupsFacetsLookup tablesCreate query765720193711Show more chosen log groups (-29)fields @tinestanp, @nessape, @logstrean, elog| filter gnessage Like""portal_id": 3364459'Linit 10000Z Query generatorQ Fields• Saved and sample queries© Query commandsRun queryUooeycooucPetcning resuatsLogs (-)Patterns (-)VisualizationLogs (-)|• Summarize results)• Investigate YIShare resultsExport resultsAdd to dashboardFetching data88898'@ GoudShell• Calendar (1)• CleandDB (20)• CRM (12)• Dialers (19)|• Emo (Activity Logs) (1)• Maits (1) |• Notetaker (31) |• Nudge (1)• Ogi (2)• Pipedrive (4)• Processing (4)• Prophet (1)• Recall (1) |• Summary (15)• Tomov (4)_general - CWLI • +|_Social Account Status logs - CWU +|OB Errors - CWL +|Ouplicated track event - CWL +O 2026, Amazon Web Services, Inc. or its affliates.Cooldie preferences2024-11.6.56.pngVNVasil Vasilevllian KyuchukovMihail MihaylovNikolay NikolovLukas Kovalik11:13 AM | Daily - ProcessingSộ3...
|
NULL
|
|
43614
|
927
|
12
|
2026-04-17T08:13:41.433243+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776413621433_m2.jpg...
|
PhpStorm
|
faVsco.js – RunOpportunityAiAnalysis.php
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.03046875,"top":0.017361112,"width":0.0453125,"height":0.022222223},"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"bounds":{"left":0.07578125,"top":0.017361112,"width":0.14960937,"height":0.022222223},"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.78515625,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
305365489813454361
|
-4018125326210054687
|
app_switch
|
hybrid
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
PhpStormFileEditFV faVsco.js vViewNavigateCodeLaravelRefactor#11894 on JY-18909-automated-reports-ask-iminnyToolsWindowHelpProject vDevPostmanCommand.php© DiarizeViaAiParticipantidentif© EncryptTokensCommand.php© EngagementStatsRegenerate© FeatureFlagsHelper.phprixcrosslenantissues.pnpc rusnro esrermissonscachec cenerarelnternalwebnookl ol® GroupSetDefaultLanguageCo© HelperTruncateCoachingTabl© HubspotJournalPollingComm© HubspotWebhookServiceCon© ImportRecording.php© ImportUsersFromCsvFile.php© IterateUsersCommand.php© JiminnyCacheClearCommanc© JiminnyDebugCommand.phpC J minnvser-ncvore. okenmc minny okenntoconmane.© MakeSlackLiveCoachingChat© ManageScimForTeam.php© MarkBranchForEnvironmentP© MuteOrganizerChannel.php© PhpApm.php© PropagateCoachingFeedbach© PurgeConferences.php© PurgeSoftDeletedOpportunitic) Purcesvncbatchescommanoc reca cu arevearskscommallc removevelerevakescommc kemovecxolreanuacescomn© RemoveUnusedParticipantSp© ResetElasticSearch.php© RestoreActivityCrmProviderkc© RestoreActivityTypeComman© SeedActivities.php© SyncActivity.php© Tracklmported.php© UpdateActivitiesAverageScorg whichworkerlsWorkingOnWn> [ Schedulingc kerner.ono› ContractsD DomainODTOD EmailsEnumsD Eventsv MActivitiesD ActivityProviderv M AiAutomationC ACMIvrosceCTAcceo.onC) AiAutomationAnalvsisRea‹C) ConferenceActivityimporti© ManualTriggerForAnalysis© RunActivityAiAnalysis.php© RunOpportunityAiAnalysis© TemplateFieldsUpdated.pl> D Audio© AutomatedReportsService.php© ReportController.php• Filesystem.phpC Team.php© SendReportMailJob.phpphp api.phpAutomatedReportsSendCommand.phprackrrovlderlnstalleacventongC UserPilotActivityListener.php© RequestGenerateAskJiminnyReportJob.php© SyncOpportunity.php(C) OpportunityUpdated.php© RequestGenerateReportJob.php© Opportunity.phpc Eventservicerrovider.onp© OpportunityPendingAiAnalysisAfterStageChanged.php€ HasAttributes.php© Service.php© RunOpportunityAiAnalysis.php(©) AutomatedReportResult.php© AutomatedReport.php› use ...class RunQpportunityAiAnalysis* @param int $opportunityIdx Oodrallno neriemo corertelaslos* oparam int surloderda* Oparam string $triggerType* Oparam string $crm0bjectType* Oparam int[] $crm0bjectIdspublic function __construct(private readonly int $opportunityId,private readonly array $crmTemplateFieldsIds,private readonly int scriggeridprivate readonly string $triggerType = CrmTempLateRun: : TRIGGER_OPPORprivate readonly string $crm0bjectType = Field::0BJECT_OPPORTUNITY,private readonly array $crmobjectIds = [1,) 4..3public function getOpportunityId(): intreturn $this->opportunityId;* Oreturn int[]*/public function getCrmTemplateFieldsIds(): arrayf…..;public function getTriggerId(): intf...public function getTriggerType(): stringf...}public function getCrm0bjectType(): ?stringf...}Helper Code will help IDE to understand your Laravel app code. // Generate // Don't Show Anymore (today 8:59)= custom.log= laravel.log< Hs local liminnyalocalnostiV connect.vueA console [PROD]V Onboard.vueA console [STAGING]15521556100/1o58155915611562156315641569157015711572157315741575157615/215801001158215831584158515861OY1159215931594159515961597159816004 SF [jiminny@localhost]L console [EU] XC* scratch_1.json(iii crm configurations [EUlIx. AutovHaycroundvselect * from contacts cwhere c.crm_configuration_id = 370 order by c.updated_at desc;Ma lminny v026 49 A22 X3 X 103 ^SELECT * FROM participants where activity_ id = 38833541;SELECT * FROM participants where activity_id = 39216301;SELECI * FRUM aculVity_sUmmary_Logs where activity_1d = 572165011SELECT * FROM activities WHERE uvid_to_bin('c7d99fbe-1fb1-41f2-8f4d-52e2bf70e1e9') = vuid; # 38833541, tiSELECT * FROM activities WHERE uvid_to_bin('2e6ff4d3-9faa-447a-a8c1-9acde4d885ae') = vuid;#072105011Cselect * fromcrm_profiles where crm_configuration_id = 319 and crm_provider_id = 525785080;select * fromopportunities where crm_configuration_id = 319 and crm_provider_id = 410150124747;select * from accounts where crm_configuration_id = 319 and crm_provider_id = 47150650569;select * from contacts where crm_configuration_id = 319 and crm_provider_id IN ('665587441856',# owner 13236 525785080# contact 116779180 665587441856 - activity - Alex Howes [EMAIL] created 2026-01-26# contact 219247563 742723347700 - [EMAIL] 2026-03-24# company 4176155 47150650564# deal 7100953 410150124747ISELELCONCAT(u.id, CASE WHEN U.id = t.owner_id THEN ' (owner)' ELSE "' END) AS user_id,Urela tasa.*,t.owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idJOIN teams t 1..n<->1: on t.id = u.team_idWHERE u.team_id = 400 and sa.provider = 'hukspot':select * from features;select * from team_features where feature_id = 40;Iselect * from teams where id = 556: # owner: 18101. crm: 477Iselect * from crm confiqurations where id = 477:SELECT * FROM users WHERE id = 18101;SELECTCONCAT(u.id, LASE WHEN U.id = t.owner_id THEN ' (owner)' ELSE "' END) AS User_id,u.email,sa.*,t.owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idJUreanstns on td s u.rean lolWHERE u.team_id = 556 and sa.provider = 'integration-app';select * from opportunitieswhere id = 7594349;select * from stages where team_id = 459;select * from teams where id = 459;SELECTCONCAT(U.id, CASE WHEN U.id = t.owner_id THEN ' (owner) ' ELSE "'END) AS user_id,u. email,sa.*,t.owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idJUIN teams t n<→>l on t.1d = U.ceam_1dWHERE U.Ceam_1d = 45% and sa.provider = 'nupspor :, 0half Backend Chapter • 17 m leftL AutomatedReportsCommandTestv100% C•8 • Fri 17 Apr 11:13:41CascadeAutomated Report RetrInvestigating HubSpotComponent|AiAutomation\Listeners|PendingAnalysis|OpportunityPendingAiAnalysisAfterStageChanged:1, is executed. Can it update the opportunitywsta rast context opportunityrendingAiAnalysisatlerstagecnanged listener class In 4.20560 Fast Context FillCrmFieldValuesService execute - does it update the opportunity mod...lllLiorsHere's the full execution chain:What OpportunityPendingAiAnalysisAfterStageChanged doesIt does NOT directly update the opportunity. It's a trigger/orchestration step. Here's the full chain:=xecutonowUpportunityscaceupuared event Tirea- UpportunacyPenalngA1AnalysisArterstagechanged: : hand le•Loac opportuniry trom Db2. Check team has AI_CRM_FILLING feature enabled3. Find matching CRM templates for the opportunity4. Collect applicable template field IDs5. Dispatch RunOpportunityAiAnalysis event (queued)- Kunupportun1tyA1Analys1sL1scener::handle- FillCrmFieldValuesService: : execute()- U0portunaVermrlelohandler..execure1. Calls Prophet AI to extract field values from deal2. Saves CrmTemplateRun records3. Dispatches AiAutomationAnalysisReadyJob (queued)- FrocessAlAucomaclonana lysiskesulcs→ calls service->syncOpportunityo to refresh local data- caLls UpdatecrmFleldAction:: executet)→ writes AI-generated values back to CRM (HubSpot)Does "Uocare the ooponuniwrYes, indirectly and asynchronously, but not stage_id - it writes Al-generated CRM field values (notstace, speclllcally• ProcessAiAutomationAnalysisResults::qetTarqet0biect() calls service->syncOpportunity —ProcessAlAutomat1onAna Lysiskesults.php: 150 - wnich re-syncs the opportunity trom Hubspot,potentially updating stage_id and other fields as a side effectUpdateCrmFieldAction:: syncRemoteRecord also calls syncOpportunity after writing — UpdateCrmFie dAction.nhn:1.66Key gates — it returns early (no-op) if:1. Opportunity not found2. Team not found3. Team doesn't have AI CRM FILLING feature flag4. No CRM templates match the opportunity5. Templates exist but have no active fieldsRe lation to vour importStages IssueThe syncOpportunity() calls inside ProcessAiAutomationAnalysisResults go through the normalopportunity syne patn, whien calls resouvestade → polentally inportstades. oo this Al auromationchain is a possible additional trigger for the repeated importStages calls you're seeing, separate fromthe scheduled sync jobs.C1l -Ask anything (24L)+ ‹› CodeClaude Sonnet 4.6winasur leams42:6uir-o( 4 spaces...
|
NULL
|
|
43691
|
928
|
11
|
2026-04-17T08:19:16.568152+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776413956568_m1.jpg...
|
Firefox
|
Meet - Daily - Processing — Work
|
True
|
meet.google.com/xpx-omah-rkn
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Workers | Datadog
Meet - Daily - Processing
Close Workers | Datadog
Meet - Daily - Processing
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Ilian Kyuchukov (Presenting, annotating)
Ilian Kyuchukov (Presenting, annotating)
People
6
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Vasil Vasilev
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Ilian Kyuchukov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Mihail Mihaylov
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Lukas Kovalik
Others might see more of your background. Click to view your full video.
11:19
AM
Daily - Processing
Daily - Processing
Audio settings
Turn on microphone
Video settings
Turn off camera
Ilian Kyuchukov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Workers | Datadog","depth":4,"bounds":{"left":0.0,"top":0.072222225,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Meet - Daily - Processing","depth":4,"bounds":{"left":0.0,"top":0.13222222,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.13222222,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.005902778,"top":0.18,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.7977778,"width":0.033680554,"height":0.043333333},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8411111,"width":0.033680554,"height":0.038333334},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.8794444,"width":0.033680554,"height":0.03888889},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.91833335,"width":0.033680554,"height":0.038333334},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.95666665,"width":0.033680554,"height":0.043333333},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Ilian Kyuchukov (Presenting, annotating)","depth":12,"bounds":{"left":0.07534722,"top":0.101111114,"width":0.18055555,"height":0.022222223},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ilian Kyuchukov (Presenting, annotating)","depth":13,"bounds":{"left":0.07534722,"top":0.10222222,"width":0.18055555,"height":0.020555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"People","depth":15,"bounds":{"left":0.88680553,"top":0.08944444,"width":0.04097222,"height":0.04},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":22,"bounds":{"left":0.9145833,"top":0.101111114,"width":0.0048611113,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Take notes with Gemini","depth":14,"bounds":{"left":0.93333334,"top":0.08944444,"width":0.025,"height":0.04},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":17,"bounds":{"left":0.9361111,"top":0.101111114,"width":0.06388891,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini","depth":22,"bounds":{"left":0.96666664,"top":0.101111114,"width":0.028125,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Gemini","depth":21,"bounds":{"left":0.96458334,"top":0.090555556,"width":0.023611112,"height":0.037777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.5798611,"top":0.62833333,"width":0.14652778,"height":0.08888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.7239583,"top":0.6427778,"width":0.08090278,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.7017361,"top":0.6388889,"width":0.11076389,"height":0.05666667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zoom in","depth":13,"bounds":{"left":0.6315972,"top":0.83111113,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open in new window","depth":13,"bounds":{"left":0.6649306,"top":0.83111113,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Enter Full Screen","depth":13,"bounds":{"left":0.6982639,"top":0.83111113,"width":0.027777778,"height":0.044444446},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.7861111,"top":0.27611113,"width":0.14652778,"height":0.07722222},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.9302083,"top":0.2911111,"width":0.069791675,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.9079861,"top":0.28666666,"width":0.092013896,"height":0.045},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":17,"bounds":{"left":0.75451386,"top":0.36277777,"width":0.061805554,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.91180557,"top":0.27611113,"width":0.08819443,"height":0.07722222},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":1.0,"top":0.2911111,"width":-0.05590272,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":1.0,"top":0.28666666,"width":-0.03368056,"height":0.045},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ilian Kyuchukov","depth":17,"bounds":{"left":0.8802083,"top":0.36277777,"width":0.07986111,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.7861111,"top":0.5338889,"width":0.14652778,"height":0.07722222},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.9302083,"top":0.54888886,"width":0.069791675,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.9079861,"top":0.54444444,"width":0.092013896,"height":0.045},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mihail Mihaylov","depth":17,"bounds":{"left":0.75451386,"top":0.6205556,"width":0.07847222,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":17,"bounds":{"left":0.8802083,"top":0.6205556,"width":0.07847222,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"bounds":{"left":0.73888886,"top":0.7916667,"width":0.14652778,"height":0.07722222},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"bounds":{"left":0.665625,"top":0.8066667,"width":0.07569444,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"bounds":{"left":0.64618057,"top":0.80222225,"width":0.11736111,"height":0.045},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"bounds":{"left":0.75381947,"top":0.87833333,"width":0.06875,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Others might see more of your background. Click to view your full video.","depth":14,"bounds":{"left":0.96631944,"top":0.875,"width":0.018055556,"height":0.028888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"11:19","depth":12,"bounds":{"left":0.050347224,"top":0.9444444,"width":0.024305556,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AM","depth":12,"bounds":{"left":0.078125,"top":0.9444444,"width":0.017708333,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Daily - Processing","depth":12,"bounds":{"left":0.11319444,"top":0.9111111,"width":0.093055554,"height":0.08888888},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Daily - Processing","depth":15,"bounds":{"left":0.11319444,"top":0.9444444,"width":0.093055554,"height":0.022777777},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Audio settings","depth":13,"bounds":{"left":0.32118055,"top":0.9288889,"width":0.06111111,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn on microphone","depth":13,"bounds":{"left":0.34895834,"top":0.9288889,"width":0.033333335,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXButton","text":"Video settings","depth":13,"bounds":{"left":0.38784721,"top":0.9288889,"width":0.06111111,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn off camera","depth":13,"bounds":{"left":0.415625,"top":0.9288889,"width":0.033333335,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Ilian Kyuchukov is presenting","depth":12,"bounds":{"left":0.45451388,"top":0.9288889,"width":0.03888889,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Send a reaction","depth":12,"bounds":{"left":0.49895832,"top":0.9288889,"width":0.03888889,"height":0.053333335},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn on captions","depth":13,"bounds":{"left":0.5434028,"top":0.9288889,"width":0.03888889,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Raise hand (ctrl + ⌘ + h)","depth":12,"bounds":{"left":0.58784723,"top":0.9288889,"width":0.03888889,"height":0.053333335},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More options","depth":12,"bounds":{"left":0.6322917,"top":0.9288889,"width":0.025,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Leave call","depth":12,"bounds":{"left":0.6628472,"top":0.9288889,"width":0.05,"height":0.053333335},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
2954367257208007506
|
-6461566788809589956
|
app_switch
|
accessibility
|
NULL
|
Workers | Datadog
Meet - Daily - Processing
Close Workers | Datadog
Meet - Daily - Processing
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Ilian Kyuchukov (Presenting, annotating)
Ilian Kyuchukov (Presenting, annotating)
People
6
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Vasil Vasilev
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Ilian Kyuchukov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Mihail Mihaylov
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Lukas Kovalik
Others might see more of your background. Click to view your full video.
11:19
AM
Daily - Processing
Daily - Processing
Audio settings
Turn on microphone
Video settings
Turn off camera
Ilian Kyuchukov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call...
|
NULL
|
|
43692
|
930
|
4
|
2026-04-17T08:19:16.568121+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776413956568_m2.jpg...
|
Firefox
|
Meet - Daily - Processing — Work
|
True
|
meet.google.com/xpx-omah-rkn
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Workers | Datadog
Meet - Daily - Processing
Close Workers | Datadog
Meet - Daily - Processing
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Ilian Kyuchukov (Presenting, annotating)
Ilian Kyuchukov (Presenting, annotating)
People
6
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Vasil Vasilev
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Ilian Kyuchukov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Mihail Mihaylov
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Lukas Kovalik
Others might see more of your background. Click to view your full video.
11:19
AM
Daily - Processing
Daily - Processing
Audio settings
Turn on microphone
Video settings
Turn off camera
Ilian Kyuchukov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
Nikolay Nikolov says in chat: stage_id|count|MIN(created_at) |MAX(created_at) | --------+-----+-------------------+-------------------+ 5036| 1|2026-03-26 16:48:19|2026-03-26 16:48:19| 6293| 1|2026-04-16 19:16:54|2026-04-16 19:16:54| 7344| 1161|2026-03-27 10:47:18|2026-04-17 07:50:43| 11607| 1|2026-04-09 14:15:59|2026-04-09 14:15:59| 12098| 1|2026-03-16 16:53:14|2026-03-16 16:53:14| 14535| 1|2026-03-18 12:51:43|2026-03-18 12:51:43| 15223| 1|2026-03-18 14:52:15|2026-03-18 14:52:15| 16309| 2|2026-03-24 15:20:18|2026-03-30 14:47:38| 16352| 4738|2026-03-17 09:21:10|2026-04-17 07:50:59| 16378| 240|2026-04-16 12:42:37|2026-04-17 05:19:20| 18281| 1911|2026-04-17 04:30:48|2026-04-17 07:50:59| 20612| 2425|2026-04-17 04:31:13|2026-04-17 07:50:56|...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Workers | Datadog","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.018945312,"height":-0.045138836},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Meet - Daily - Processing","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.018945312,"height":-0.08263886},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.23398438,"top":1.0,"width":0.005859375,"height":-0.08263886},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Ilian Kyuchukov (Presenting, annotating)","depth":12,"bounds":{"left":0.27558595,"top":1.0,"width":0.1015625,"height":-0.063194394},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ilian Kyuchukov (Presenting, annotating)","depth":13,"bounds":{"left":0.27558595,"top":1.0,"width":0.1015625,"height":-0.06388891},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"People","depth":15,"bounds":{"left":0.7320312,"top":1.0,"width":0.023046875,"height":-0.05590272},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"6","depth":22,"bounds":{"left":0.7476562,"top":1.0,"width":0.002734375,"height":-0.063194394},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Take notes with Gemini","depth":14,"bounds":{"left":0.75820315,"top":1.0,"width":0.0140625,"height":-0.05590272},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":17,"bounds":{"left":0.7597656,"top":1.0,"width":0.051171876,"height":-0.063194394},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini","depth":22,"bounds":{"left":0.7769531,"top":1.0,"width":0.015820313,"height":-0.063194394},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Gemini","depth":21,"bounds":{"left":0.7757813,"top":1.0,"width":0.01328125,"height":-0.056597233},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Zoom in","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open in new window","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Enter Full Screen","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Ilian Kyuchukov","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Mihail Mihaylov","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Pop out this video More screens are more fun. Play this video while you do other things.","depth":15,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pop out this video","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More screens are more fun. Play this video while you do other things.","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Others might see more of your background. Click to view your full video.","depth":14,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"11:19","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AM","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Daily - Processing","depth":12,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Daily - Processing","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Audio settings","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn on microphone","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXButton","text":"Video settings","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn off camera","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Ilian Kyuchukov is presenting","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Send a reaction","depth":12,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Turn on captions","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Raise hand (ctrl + ⌘ + h)","depth":12,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"More options","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Leave call","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Meeting details","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat with everyone","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Meeting tools","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Nikolay Nikolov says in chat: stage_id|count|MIN(created_at) |MAX(created_at) | --------+-----+-------------------+-------------------+ 5036| 1|2026-03-26 16:48:19|2026-03-26 16:48:19| 6293| 1|2026-04-16 19:16:54|2026-04-16 19:16:54| 7344| 1161|2026-03-27 10:47:18|2026-04-17 07:50:43| 11607| 1|2026-04-09 14:15:59|2026-04-09 14:15:59| 12098| 1|2026-03-16 16:53:14|2026-03-16 16:53:14| 14535| 1|2026-03-18 12:51:43|2026-03-18 12:51:43| 15223| 1|2026-03-18 14:52:15|2026-03-18 14:52:15| 16309| 2|2026-03-24 15:20:18|2026-03-30 14:47:38| 16352| 4738|2026-03-17 09:21:10|2026-04-17 07:50:59| 16378| 240|2026-04-16 12:42:37|2026-04-17 05:19:20| 18281| 1911|2026-04-17 04:30:48|2026-04-17 07:50:59| 20612| 2425|2026-04-17 04:31:13|2026-04-17 07:50:56|","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-4390783709707525835
|
-6426171310220248260
|
app_switch
|
accessibility
|
NULL
|
Workers | Datadog
Meet - Daily - Processing
Close Workers | Datadog
Meet - Daily - Processing
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Ilian Kyuchukov (Presenting, annotating)
Ilian Kyuchukov (Presenting, annotating)
People
6
Take notes with Gemini
Take notes with Gemini
Gemini
Gemini
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Zoom in
Open in new window
Enter Full Screen
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Vasil Vasilev
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Ilian Kyuchukov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Mihail Mihaylov
Nikolay Nikolov
Pop out this video More screens are more fun. Play this video while you do other things.
Pop out this video
More screens are more fun. Play this video while you do other things.
Lukas Kovalik
Others might see more of your background. Click to view your full video.
11:19
AM
Daily - Processing
Daily - Processing
Audio settings
Turn on microphone
Video settings
Turn off camera
Ilian Kyuchukov is presenting
Send a reaction
Turn on captions
Raise hand (ctrl + ⌘ + h)
More options
Leave call
Meeting details
Chat with everyone
Meeting tools
Nikolay Nikolov says in chat: stage_id|count|MIN(created_at) |MAX(created_at) | --------+-----+-------------------+-------------------+ 5036| 1|2026-03-26 16:48:19|2026-03-26 16:48:19| 6293| 1|2026-04-16 19:16:54|2026-04-16 19:16:54| 7344| 1161|2026-03-27 10:47:18|2026-04-17 07:50:43| 11607| 1|2026-04-09 14:15:59|2026-04-09 14:15:59| 12098| 1|2026-03-16 16:53:14|2026-03-16 16:53:14| 14535| 1|2026-03-18 12:51:43|2026-03-18 12:51:43| 15223| 1|2026-03-18 14:52:15|2026-03-18 14:52:15| 16309| 2|2026-03-24 15:20:18|2026-03-30 14:47:38| 16352| 4738|2026-03-17 09:21:10|2026-04-17 07:50:59| 16378| 240|2026-04-16 12:42:37|2026-04-17 05:19:20| 18281| 1911|2026-04-17 04:30:48|2026-04-17 07:50:59| 20612| 2425|2026-04-17 04:31:13|2026-04-17 07:50:56|...
|
NULL
|
|
43693
|
928
|
12
|
2026-04-17T08:19:17.854524+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776413957854_m1.jpg...
|
PhpStorm
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelpmeet.google.com/xpx-omah-rkn> 0lal)• Backend Chapter • 11 m left100% <478 • Fri 17 Apr 11:19:17=6+llian Kyuchukov (Presenting, annotating)File= 40• • Q 8• Fri17Apr 11:19.CowowhtowesteCloudWatch | eu-west-1eu-west-1.console.aws.amazon.com/cloudwatch/home?region=eu-west-1#logsV2:logs-insightsS3FqueryldS3D1dcf83a9-8b6c-4a17-9483-14cc025cbc96S26queryDetailS3D-(end~Q-start~-8.• WorkFinish update :Q Seard([Option+S) ©0/12it ID: 7657-2019-9711EU.View_Only@765720199711CloudWatchLogs Insights _generalQuery definition infoa unified observability platform for a smoother experience, now in preview mode. Click here to try it out! |CuotmeCompare (Off)|WetimetoneL Start tailingQuery scopeLog group nameProperty selectorSelect up to 50 log groupsBrowse: Log Groups| Facets Lookup tablesE Show more chosen log groups (+29) |fields etinestanp, (nessage, @logStrean, elog1 filter @nessage like '[HubSpot Webhook]'I filter @nessage Like "59029758241'1 Linit 10000Logs Insights QL½ Query generatorQ FieldsSaved and sample queries© Query commandsRun queryFetching resultsCancelwweis sercu uueryEstimated remalning time: 11 secondsLogs (-)|Patterns (-)|VisualizationLogs (-)Summarize results)• Investigate• Share resultsExport resultsAdd to dashboardShowing 0 of 0 records matched - Scanning O13,143,147 records (3.1 GB) scanned in 7.28 @ 1,823,917 records/s (435.8 MB/s)E CloudShellPtivacyTermsNetmenthot2024-116.56.png1711:19 AM | Daily - ProcessingJINVasil Vasilevlian KyuchukovMihail MihaylovNikolay NikolovLukas Kovalik...
|
NULL
|
-1994515211918549574
|
NULL
|
app_switch
|
ocr
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelpmeet.google.com/xpx-omah-rkn> 0lal)• Backend Chapter • 11 m left100% <478 • Fri 17 Apr 11:19:17=6+llian Kyuchukov (Presenting, annotating)File= 40• • Q 8• Fri17Apr 11:19.CowowhtowesteCloudWatch | eu-west-1eu-west-1.console.aws.amazon.com/cloudwatch/home?region=eu-west-1#logsV2:logs-insightsS3FqueryldS3D1dcf83a9-8b6c-4a17-9483-14cc025cbc96S26queryDetailS3D-(end~Q-start~-8.• WorkFinish update :Q Seard([Option+S) ©0/12it ID: 7657-2019-9711EU.View_Only@765720199711CloudWatchLogs Insights _generalQuery definition infoa unified observability platform for a smoother experience, now in preview mode. Click here to try it out! |CuotmeCompare (Off)|WetimetoneL Start tailingQuery scopeLog group nameProperty selectorSelect up to 50 log groupsBrowse: Log Groups| Facets Lookup tablesE Show more chosen log groups (+29) |fields etinestanp, (nessage, @logStrean, elog1 filter @nessage like '[HubSpot Webhook]'I filter @nessage Like "59029758241'1 Linit 10000Logs Insights QL½ Query generatorQ FieldsSaved and sample queries© Query commandsRun queryFetching resultsCancelwweis sercu uueryEstimated remalning time: 11 secondsLogs (-)|Patterns (-)|VisualizationLogs (-)Summarize results)• Investigate• Share resultsExport resultsAdd to dashboardShowing 0 of 0 records matched - Scanning O13,143,147 records (3.1 GB) scanned in 7.28 @ 1,823,917 records/s (435.8 MB/s)E CloudShellPtivacyTermsNetmenthot2024-116.56.png1711:19 AM | Daily - ProcessingJINVasil Vasilevlian KyuchukovMihail MihaylovNikolay NikolovLukas Kovalik...
|
NULL
|
|
43694
|
930
|
5
|
2026-04-17T08:19:17.854510+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776413957854_m2.jpg...
|
PhpStorm
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorToo PhpStormFileEditViewNavigateCodeLaravelRefactorToolsWindowHelpProject v© OpportunityPendingAiA© HandleCrmFieldValidation© ProcessAiAutomationAnal;© RunActivityAiAnalysisListe© RunOpportunityAiAnalysis> D ProphetCommunication> [ ProphetServiceHandlers_ Repositories•servicesralTSM UiComponents(c) ContextObjectResolver.php© FieldDefinitionBuilder.php© FieldDefinitionToFieldReques© FillCrmFieldResponseParser.f© FillCrmFieldValuesService.ph© SaveCrmTemplateRunsServic© SyncCrmFieldService.php© TemplateFieldDefinitionServir© TemplateObjectType.phplestermalPromptservice.png> D AiCallScoringv D AskAnything> DDtosD Events© AskAnythingPromptService.p© HistoryService.php> D AskJiminnyAi> DAWS> D BillingManagement> D Cache> D CoachingFeedback> D Country> M CustomerApi› _ Database> D Datadog> D DateTime› D Deallnsights© DealRisks> D ElasticSearch> D Eloquent> D Encoding> D Encryption> DES> D Faker> D FeatureFlags› D FFMpeg> D FileSystem› D Gecko> D Gong› D GuzzleHttp> D KeyPoints> D Kiosk> D LanguageDetection> D LiveFeed> DJ Locks> D Math> D MediaPipeline> D MeetingBot© AutomatedReportsService.php© SendReportJob.php© SendReportMailJob.php© ReportController.phplokenbullaer.ono• TeamSetupController.phppnp apl.onoFilesystem.php© AskJiminnyReportsController.php© CreateHeldActivityEvent.php© TrackProviderInstalledEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.php© RequestGenerateReportJob.phpC SyncOpportunity.phpT OpportunitySyncTrait.phpC Opportunity.phpC OpportunityUpdated.php© OpportunityStageUpdated.phpe FventService?rovider.onn© OpportunityPendingAiAnalysisAfterStageChanged.php© RunOpportunityAiAnalysis.php© ProcessAiAutomationAnalysisResults.php x€ HasAttributes.php© Service.phpC AutomatedReportResult.php(C) AutomatedReport.phpE custom.log= laravel.logA SF [jiminny@localhost]C scratch_1jsonC Team.phpconnect.vueV Onboard.vue< Hs local liminnyalocalnostÁ console [EU] xfi crm_configurations [EU]A console [PROD]A console [STAGING]X:Auto vPlaygroundMa liminnv v1547select x tol contacrs c1550where c.cmm.configuration_id = 370 order Dy .updatea.27 23 6;,026 49 A22 X3 X103 A V15511552SELECT * FROM participants where activity_id = 38833541;1553SELECT * FROM participants where activity_id = 39216301;1554SELECT * FROM activity_summary_logs where activity_id = 39216301;class ProcessalAuronaronanauyst skesuuusA1 X1 A1555SELECT * FROM activities WHERE uvid_to_bin( 'c7d99fbe-1fb1-41f2-8f4d-52eprivate tunccion processoingleremp latekoncermlemplatekon eermlemplatekon). vola1556SELECT * FROM activities WHERE uvid_to_bin('2e6ff4d3-9faa-447a-a8c1-9ac1557select * from crm_profiles where crm_configuration_id = 319 and crm_pro1558if ($updateTargetDto === null) {select * fromopportunities where crm_configuration_id = 319 and crm_pr1559select x ToIaccounts where crm_configuration_id = 319 and crm_provideSthis->logger→›info(' [ProcessAIAutomationAnalysis] UpdateTargetDTO is not currently updateable' , 1560select x ToIcontacts where crm_configuration_id = 319 and crm_provide'crm_template_run_id' => $crmTemplateRun->getId(),1501# owner 13236 525785080'crm_object_type' => $crmTemplateRun->getCrm0bjectType(),1562# contact 1'crm_object_id' => $crmTemplateRun->getCrm0bjectId(.16779180 665587441856 - activity - ALex Heves alex@support1563# contact 219247563 742723347700 - [EMAIL] 2026-03-24I);1564# company 4176133 47150650569reLurln1565# deal 7100953 4101501247471566SELECT1567CONCAT(u.id, CASE WHEN U.id = t.owner_id THEN ' (owner)' ELSE '' EN1568u.email,/** Before doing any changes make sure the target object and all its fields are up to date */1569sa.*,$targetobject = $this->getTarget0bject($updateTargetDto);1570t.owner id FROM social accounts saif (! $targetObject) {$this->Logger->info(' [ProcessAiAutomationAnalysis] Crm target object does not exist', [1571JOIN users u on u.id = sa.sociable idJOIN teams t 1..n<->1: on t.id = u.team id'crm_template_run_id' => $crmTemplateRun->getId(),1573'crm_object_type' => $crmTemplateRun->getCrm0bjectType(),1574WHERE U. team_id = 400 and sa.provider = 'hubspot';'crm_object_id' => $crmTemplateRun->getCrm0bjectId(),1575I);1576select * from features;select * from team_features where feature_id = 40;reLurnr1577157815791580/** Select what will be the next operation to execute, add the selection directly to updateTargetDto1581$this->determineUpdate0perationAction->execute(1582crmobject: $targetobject,1585crmTemplateRun: $crmTemplateRun,1584updacelargetuco: supaatelargecdto,realllr nunseoreallln15851586);1587xx nuu, uver'waler1588select * from teams where id = 556; # owner: 18101, crm: 477select * from crm_configurations where id = 477;SELECT * FROM users WHERE id = 18101;SELELTCONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE "' ENU.ellan tesa.x,t.owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idJOIN teams t1..n<->1: on t.id = u.team_idWHERE u.team_id = 556 and sa.provider = 'integration-app':Append to CRM record, or skip. Execute the decision taken */1589$this->executeWriteDecision($crmTemplateRun, $updateTargetDto);1590159115921593private function executeWriteDecision(1594CrmTemplateRun $crmTemplateRun,UpdateCrmTargetDto $updateCrmTargetDto,11073): void {...}1107015971598144148private function getTarget0bject(UpdateCrmTargetDto $updateCrmTargetDto): CrmFillingTarget0bjectContract|select * from opportunities where id = 7594349;select * from stages where team_id = 459;select * from teams where id = 459:SELELTCONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE "'U.emall,Sa.x,t.owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idJOIN teams t 1..n<->1: on t.id = u.team_idWHERE u.team_id = 459 and sa.provider = 'hukspat':return match ($updateCrmTargetDto->remote0bjectType) {1602Field: :0BJECT_LEAD => $this->service->syncLead($updateCrmTargetDto->remote0bjectProviderId).Field: :0BJECT_ACCOUNT => $this->service->syncAccount($updateCrmTargetDto->remote0bjectProviderId)ite // Don't Show Anymore (today 8:59)select * from opportunities where id = 7594349;Backend Chapter • 11 m left100% C•8 • Fri 17 Apr 11:19:17CascadeAutomated Report RetrInvestigating HubSpotComponent|AiAutomation\Listeners|PendingAnalysis|OpportunityPendingAiAnalysisAfterStageChanged:1, is executed. Can it update the opportunitysta rast context opportunityrendingAiAnalysisatlerstagecnanged listener class In 4.20560 Fast Context FillCrmFieldValuesService execute - does it update the opportunity mod...lllLiorsHere's the full execution chain:What OpportunityPendingAiAnalysisAfterStageChanged doesIt does NOT directly update the opportunity. It's a trigger/orchestration step. Here's the full chain:=xecutonowUpportunityscadeupuatea event Tirea- Upportun1cyPenalngA1AnalysisArterstaqechanged::handle•Loac opportuniry trom Db2. Check team has AI_CRM_FILLING feature enabled3. Find matching CRM templates for the opportunity4. Collect applicable template field IDs5. Dispatch RunOpportunityAiAnalysis event (queued)- Kunupportun1tyA1Analys1sL1scener::handle- FillCrmFieldValuesService: : execute()- U0portunaVermrle ohand ler..execuie1. Calls Prophet AI to extract field values from deal2. Saves CrmTemplateRun records3. Dispatches AiAutomationAnalysisReadyJob (queued)- FrocessAlAucomaclonana lysiskesulcs- cauls service→>syncupportunacy to rerresh local data- caLls UpdatecrmFleldAction:: executet)→ writes AI-generated values back to CRM (HubSpot)Does "Uocare the ooponuniwrYes, indirectly and asynchronously, but not stage_id - it writes Al-generated CRM field values (notstace, speclllcallyProcessAiAutomationAnalysisResults::getTarqet0biect() calls service->syncOpportunity —ProcessAlAutomat1onAna Lysiskesults.php: 150 - wnich re-syncs the opportunity trom Hubspot,potentially updating stage_id and other fields as a side effectUpdateCrmFieldAction:: syncRemoteRecord also calls syncOpportunity after writing - UpdateCrmFie dAction.nhn:1.66Key gates — it returns early (no-op) if:1. Opportunity not found2. Team not found3. Team doesn't have AI CRM FILLING feature flag4. No CRM templates match the opportunity5. Templates exist but have no active fieldsRe lation to vour importStages IssueThe syncOpportunity() calls inside ProcessAiAutomationAnalysisResults go through the normalopportunity sync path, which calls resolveStage( → potentially importStages() . So this Al automationchain is a possible additional trigger for the repeated importStages calls you're seeing, separate fromthe scheduled sync jobs.C1l -Ask anything (24L)+ <> CodeClaude Sonnet 4.6( 4 spaces...
|
NULL
|
-6097457467171214024
|
NULL
|
app_switch
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorToo PhpStormFileEditViewNavigateCodeLaravelRefactorToolsWindowHelpProject v© OpportunityPendingAiA© HandleCrmFieldValidation© ProcessAiAutomationAnal;© RunActivityAiAnalysisListe© RunOpportunityAiAnalysis> D ProphetCommunication> [ ProphetServiceHandlers_ Repositories•servicesralTSM UiComponents(c) ContextObjectResolver.php© FieldDefinitionBuilder.php© FieldDefinitionToFieldReques© FillCrmFieldResponseParser.f© FillCrmFieldValuesService.ph© SaveCrmTemplateRunsServic© SyncCrmFieldService.php© TemplateFieldDefinitionServir© TemplateObjectType.phplestermalPromptservice.png> D AiCallScoringv D AskAnything> DDtosD Events© AskAnythingPromptService.p© HistoryService.php> D AskJiminnyAi> DAWS> D BillingManagement> D Cache> D CoachingFeedback> D Country> M CustomerApi› _ Database> D Datadog> D DateTime› D Deallnsights© DealRisks> D ElasticSearch> D Eloquent> D Encoding> D Encryption> DES> D Faker> D FeatureFlags› D FFMpeg> D FileSystem› D Gecko> D Gong› D GuzzleHttp> D KeyPoints> D Kiosk> D LanguageDetection> D LiveFeed> DJ Locks> D Math> D MediaPipeline> D MeetingBot© AutomatedReportsService.php© SendReportJob.php© SendReportMailJob.php© ReportController.phplokenbullaer.ono• TeamSetupController.phppnp apl.onoFilesystem.php© AskJiminnyReportsController.php© CreateHeldActivityEvent.php© TrackProviderInstalledEvent.php© UserPilotActivityListener.php© ActivityLogged.php© AutomatedReportsCallbackService.php© RequestGenerateAskJiminnyReportJob.php© RequestGenerateReportJob.phpC SyncOpportunity.phpT OpportunitySyncTrait.phpC Opportunity.phpC OpportunityUpdated.php© OpportunityStageUpdated.phpe FventService?rovider.onn© OpportunityPendingAiAnalysisAfterStageChanged.php© RunOpportunityAiAnalysis.php© ProcessAiAutomationAnalysisResults.php x€ HasAttributes.php© Service.phpC AutomatedReportResult.php(C) AutomatedReport.phpE custom.log= laravel.logA SF [jiminny@localhost]C scratch_1jsonC Team.phpconnect.vueV Onboard.vue< Hs local liminnyalocalnostÁ console [EU] xfi crm_configurations [EU]A console [PROD]A console [STAGING]X:Auto vPlaygroundMa liminnv v1547select x tol contacrs c1550where c.cmm.configuration_id = 370 order Dy .updatea.27 23 6;,026 49 A22 X3 X103 A V15511552SELECT * FROM participants where activity_id = 38833541;1553SELECT * FROM participants where activity_id = 39216301;1554SELECT * FROM activity_summary_logs where activity_id = 39216301;class ProcessalAuronaronanauyst skesuuusA1 X1 A1555SELECT * FROM activities WHERE uvid_to_bin( 'c7d99fbe-1fb1-41f2-8f4d-52eprivate tunccion processoingleremp latekoncermlemplatekon eermlemplatekon). vola1556SELECT * FROM activities WHERE uvid_to_bin('2e6ff4d3-9faa-447a-a8c1-9ac1557select * from crm_profiles where crm_configuration_id = 319 and crm_pro1558if ($updateTargetDto === null) {select * fromopportunities where crm_configuration_id = 319 and crm_pr1559select x ToIaccounts where crm_configuration_id = 319 and crm_provideSthis->logger→›info(' [ProcessAIAutomationAnalysis] UpdateTargetDTO is not currently updateable' , 1560select x ToIcontacts where crm_configuration_id = 319 and crm_provide'crm_template_run_id' => $crmTemplateRun->getId(),1501# owner 13236 525785080'crm_object_type' => $crmTemplateRun->getCrm0bjectType(),1562# contact 1'crm_object_id' => $crmTemplateRun->getCrm0bjectId(.16779180 665587441856 - activity - ALex Heves alex@support1563# contact 219247563 742723347700 - [EMAIL] 2026-03-24I);1564# company 4176133 47150650569reLurln1565# deal 7100953 4101501247471566SELECT1567CONCAT(u.id, CASE WHEN U.id = t.owner_id THEN ' (owner)' ELSE '' EN1568u.email,/** Before doing any changes make sure the target object and all its fields are up to date */1569sa.*,$targetobject = $this->getTarget0bject($updateTargetDto);1570t.owner id FROM social accounts saif (! $targetObject) {$this->Logger->info(' [ProcessAiAutomationAnalysis] Crm target object does not exist', [1571JOIN users u on u.id = sa.sociable idJOIN teams t 1..n<->1: on t.id = u.team id'crm_template_run_id' => $crmTemplateRun->getId(),1573'crm_object_type' => $crmTemplateRun->getCrm0bjectType(),1574WHERE U. team_id = 400 and sa.provider = 'hubspot';'crm_object_id' => $crmTemplateRun->getCrm0bjectId(),1575I);1576select * from features;select * from team_features where feature_id = 40;reLurnr1577157815791580/** Select what will be the next operation to execute, add the selection directly to updateTargetDto1581$this->determineUpdate0perationAction->execute(1582crmobject: $targetobject,1585crmTemplateRun: $crmTemplateRun,1584updacelargetuco: supaatelargecdto,realllr nunseoreallln15851586);1587xx nuu, uver'waler1588select * from teams where id = 556; # owner: 18101, crm: 477select * from crm_configurations where id = 477;SELECT * FROM users WHERE id = 18101;SELELTCONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE "' ENU.ellan tesa.x,t.owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idJOIN teams t1..n<->1: on t.id = u.team_idWHERE u.team_id = 556 and sa.provider = 'integration-app':Append to CRM record, or skip. Execute the decision taken */1589$this->executeWriteDecision($crmTemplateRun, $updateTargetDto);1590159115921593private function executeWriteDecision(1594CrmTemplateRun $crmTemplateRun,UpdateCrmTargetDto $updateCrmTargetDto,11073): void {...}1107015971598144148private function getTarget0bject(UpdateCrmTargetDto $updateCrmTargetDto): CrmFillingTarget0bjectContract|select * from opportunities where id = 7594349;select * from stages where team_id = 459;select * from teams where id = 459:SELELTCONCAT(u.id, CASE WHEN u.id = t.owner_id THEN ' (owner)' ELSE "'U.emall,Sa.x,t.owner_id FROM social_accounts saJOIN users u on u.id = sa.sociable_idJOIN teams t 1..n<->1: on t.id = u.team_idWHERE u.team_id = 459 and sa.provider = 'hukspat':return match ($updateCrmTargetDto->remote0bjectType) {1602Field: :0BJECT_LEAD => $this->service->syncLead($updateCrmTargetDto->remote0bjectProviderId).Field: :0BJECT_ACCOUNT => $this->service->syncAccount($updateCrmTargetDto->remote0bjectProviderId)ite // Don't Show Anymore (today 8:59)select * from opportunities where id = 7594349;Backend Chapter • 11 m left100% C•8 • Fri 17 Apr 11:19:17CascadeAutomated Report RetrInvestigating HubSpotComponent|AiAutomation\Listeners|PendingAnalysis|OpportunityPendingAiAnalysisAfterStageChanged:1, is executed. Can it update the opportunitysta rast context opportunityrendingAiAnalysisatlerstagecnanged listener class In 4.20560 Fast Context FillCrmFieldValuesService execute - does it update the opportunity mod...lllLiorsHere's the full execution chain:What OpportunityPendingAiAnalysisAfterStageChanged doesIt does NOT directly update the opportunity. It's a trigger/orchestration step. Here's the full chain:=xecutonowUpportunityscadeupuatea event Tirea- Upportun1cyPenalngA1AnalysisArterstaqechanged::handle•Loac opportuniry trom Db2. Check team has AI_CRM_FILLING feature enabled3. Find matching CRM templates for the opportunity4. Collect applicable template field IDs5. Dispatch RunOpportunityAiAnalysis event (queued)- Kunupportun1tyA1Analys1sL1scener::handle- FillCrmFieldValuesService: : execute()- U0portunaVermrle ohand ler..execuie1. Calls Prophet AI to extract field values from deal2. Saves CrmTemplateRun records3. Dispatches AiAutomationAnalysisReadyJob (queued)- FrocessAlAucomaclonana lysiskesulcs- cauls service→>syncupportunacy to rerresh local data- caLls UpdatecrmFleldAction:: executet)→ writes AI-generated values back to CRM (HubSpot)Does "Uocare the ooponuniwrYes, indirectly and asynchronously, but not stage_id - it writes Al-generated CRM field values (notstace, speclllcallyProcessAiAutomationAnalysisResults::getTarqet0biect() calls service->syncOpportunity —ProcessAlAutomat1onAna Lysiskesults.php: 150 - wnich re-syncs the opportunity trom Hubspot,potentially updating stage_id and other fields as a side effectUpdateCrmFieldAction:: syncRemoteRecord also calls syncOpportunity after writing - UpdateCrmFie dAction.nhn:1.66Key gates — it returns early (no-op) if:1. Opportunity not found2. Team not found3. Team doesn't have AI CRM FILLING feature flag4. No CRM templates match the opportunity5. Templates exist but have no active fieldsRe lation to vour importStages IssueThe syncOpportunity() calls inside ProcessAiAutomationAnalysisResults go through the normalopportunity sync path, which calls resolveStage( → potentially importStages() . So this Al automationchain is a possible additional trigger for the repeated importStages calls you're seeing, separate fromthe scheduled sync jobs.C1l -Ask anything (24L)+ <> CodeClaude Sonnet 4.6( 4 spaces...
|
NULL
|
|
43696
|
928
|
14
|
2026-04-17T08:19:24.448033+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776413964448_m1.jpg...
|
Firefox
|
Meet - Daily - Processing — Work
|
True
|
meet.google.com/xpx-omah-rkn
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Workers | Datadog
Meet - Daily - Processing
Close Workers | Datadog
Meet - Daily - Processing
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Workers | Datadog","depth":4,"bounds":{"left":0.0,"top":0.072222225,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Meet - Daily - Processing","depth":4,"bounds":{"left":0.0,"top":0.13222222,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.13222222,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.005902778,"top":0.18,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.7977778,"width":0.033680554,"height":0.043333333},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8411111,"width":0.033680554,"height":0.038333334},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.8794444,"width":0.033680554,"height":0.03888889},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.91833335,"width":0.033680554,"height":0.038333334},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
673836544651055637
|
1008872683201119874
|
app_switch
|
hybrid
|
NULL
|
Workers | Datadog
Meet - Daily - Processing
Close Workers | Datadog
Meet - Daily - Processing
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelpmeet.google.com/xpx-omah-rkn• Backend Chapter • 11 m left100% <478 • Fri 17 Apr 11:19:24+llian Kyuchukov (Presenting, annotating)FileCowownee"WesteCloudWatch | eu-west-1eu-west-1.console.aws.amazon.com/cloudwatch/home?region=eu-west-1#logsV2:logs-insightsS3FqueryldS3D1dcf83a9-8b6c-4a17-9483-14cc025cbc96S26queryDetailS3D-(end~Q-start~-8.Q Seard([Option+S) ©0/12CloudWatchLogs Insights > _generalQuery definition infoa unified observability platform for a smoother experience, now in preview mode. Click here to try it out! |CusotmeCompare (Off)|UTC timezoneL Start tailing)Query scopeLog group nameProperty selectorSelect up to 50 log groupsE Show more chosen log groups (+29) |fields etinestanp, (nessage, @logStrean, elog1 fitter @nessage like '[HubSpot Webhook]'I filter @nessage Like '59829758241'1 Linit 10000Logs Insights QL +½ Query generatorQ FieldsSaved and sample queries© Query commandsRun queryFetching resultsCancelwweus sercuuuetyомаеии готн м аумимLogs (2)|Patterns (-)VisualizationLogs (2)• Summarize results)• Investigate@ Share resultsShowing 2 of 2 records matched - Scanning O31,738,088 records (8.0 GB) scanned in 14.25 @ 2,240,282 records/s (575.0 MB/$)E CoudShell1711:19 AM | Daily - Processing...• • Q 8• Fri17Apr 11:19.• WorkFinish update :nt ID: 7657-2019-9711EU.View_Only@765720199711JVasil Vasilevllian KyuchukovBrowse: Log Groups FacetsLookup tablesMihail MihaylovNikolay NikolovAdd to dashboardPtivacyTermsHide. histescamCookde preferencesSctmenthot2024-116.56.pngLukas Kovalik...
|
NULL
|
|
43731
|
928
|
35
|
2026-04-17T08:20:35.678172+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776414035678_m1.jpg...
|
System Settings
|
Screen & System Audio Recording
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Search
Lukas Kovalik, Apple ID
1
1
Wi‑Fi
Bluetooth Search
Lukas Kovalik, Apple ID
1
1
Wi‑Fi
Bluetooth
Network
VPN
Notifications
Sound
Focus
Screen Time
General
Appearance
Accessibility
Control Centre
Siri & Spotlight
Privacy & Security
Desktop & Dock
Displays
Wallpaper
Screen Saver
Battery
Lock Screen
Touch ID & Password
Users & Groups
Passwords
Internet Accounts
Game Center
Wallet & Apple Pay
Keyboard
Mouse
Trackpad
Printers & Scanners
Screen & System Audio Recording
Allow the applications below to record the content of your screen and audio, even while using other applications.
1Password
BetterTouchTool
Claude
CleanShot X
Dia...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Search","depth":5,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"Lukas Kovalik, Apple ID","depth":8,"automation_id":"com.apple.systempreferences.AppleIDSettings*AppleIDSettings","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"1","depth":8,"automation_id":"com.apple.FollowUpSettings.FollowUpSettingsExtension*FOLLOWUP_SINGLE_ACTION_changePhoneNumber","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"1","depth":8,"automation_id":"com.apple.FollowUpSettings.FollowUpSettingsExtension*FOLLOWUP_SINGLE_ACTION_com.apple.SoftwareUpdateServices.followup:com.apple.Software-Update-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Wi‑Fi","depth":8,"automation_id":"com.apple.wifi-settings-extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Bluetooth","depth":8,"automation_id":"com.apple.BluetoothSettings","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Network","depth":8,"automation_id":"com.apple.Network-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"VPN","depth":8,"automation_id":"com.apple.NetworkExtensionSettingsUI.NESettingsUIExtension*vpn","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Notifications","depth":8,"automation_id":"com.apple.Notifications-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Sound","depth":8,"automation_id":"com.apple.Sound-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Focus","depth":8,"automation_id":"com.apple.Focus-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Screen Time","depth":8,"automation_id":"com.apple.Screen-Time-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"General","depth":8,"automation_id":"com.apple.systempreferences.GeneralSettings","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Appearance","depth":8,"automation_id":"com.apple.Appearance-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Accessibility","depth":8,"automation_id":"com.apple.Accessibility-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Control Centre","depth":8,"automation_id":"com.apple.ControlCenter-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Siri & Spotlight","depth":8,"automation_id":"com.apple.Siri-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Privacy & Security","depth":8,"automation_id":"com.apple.settings.PrivacySecurity.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Desktop & Dock","depth":8,"automation_id":"com.apple.Desktop-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Displays","depth":8,"automation_id":"com.apple.Displays-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Wallpaper","depth":8,"automation_id":"com.apple.Wallpaper-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Screen Saver","depth":8,"automation_id":"com.apple.ScreenSaver-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Battery","depth":8,"automation_id":"com.apple.Battery-Settings.extension*BatteryPreferences","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Lock Screen","depth":8,"automation_id":"com.apple.Lock-Screen-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Touch ID & Password","depth":8,"automation_id":"com.apple.Touch-ID-Settings.extension*TouchIDPasswordPrefs","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Users & Groups","depth":8,"automation_id":"com.apple.Users-Groups-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Passwords","depth":8,"automation_id":"com.apple.Passwords-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Internet Accounts","depth":8,"automation_id":"com.apple.Internet-Accounts-Settings.extension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Game Center","depth":8,"automation_id":"com.apple.Game-Center-Settings.extension"},{"role":"AXStaticText","text":"Wallet & Apple Pay","depth":8,"automation_id":"com.apple.WalletSettingsExtension","help_text":"","role_description":"text"},{"role":"AXStaticText","text":"Keyboard","depth":8,"automation_id":"com.apple.Keyboard-Settings.extension"},{"role":"AXStaticText","text":"Mouse","depth":8,"automation_id":"com.apple.Mouse-Settings.extension"},{"role":"AXStaticText","text":"Trackpad","depth":8,"automation_id":"com.apple.Trackpad-Settings.extension","role_description":"text"},{"role":"AXStaticText","text":"Printers & Scanners","depth":8,"automation_id":"com.apple.Print-Scan-Settings.extension","help_text":"","role_description":"text"},{"role":"AXHeading","text":"Screen & System Audio Recording","depth":6,"role_description":"heading"},{"role":"AXHeading","text":"Allow the applications below to record the content of your screen and audio, even while using other applications.","depth":6,"role_description":"heading"},{"role":"AXStaticText","text":"1Password","depth":11,"automation_id":"1Password_Title","role_description":"text"},{"role":"AXStaticText","text":"BetterTouchTool","depth":11,"automation_id":"BetterTouchTool_Title","role_description":"text"},{"role":"AXStaticText","text":"Claude","depth":11,"automation_id":"Claude_Title","role_description":"text"},{"role":"AXStaticText","text":"CleanShot X","depth":11,"automation_id":"CleanShot X_Title","role_description":"text"},{"role":"AXStaticText","text":"Dia","depth":11,"automation_id":"Dia_Title","role_description":"text"}]...
|
-2991470212286910548
|
-416433595993227856
|
app_switch
|
accessibility
|
NULL
|
Search
Lukas Kovalik, Apple ID
1
1
Wi‑Fi
Bluetooth Search
Lukas Kovalik, Apple ID
1
1
Wi‑Fi
Bluetooth
Network
VPN
Notifications
Sound
Focus
Screen Time
General
Appearance
Accessibility
Control Centre
Siri & Spotlight
Privacy & Security
Desktop & Dock
Displays
Wallpaper
Screen Saver
Battery
Lock Screen
Touch ID & Password
Users & Groups
Passwords
Internet Accounts
Game Center
Wallet & Apple Pay
Keyboard
Mouse
Trackpad
Printers & Scanners
Screen & System Audio Recording
Allow the applications below to record the content of your screen and audio, even while using other applications.
1Password
BetterTouchTool
Claude
CleanShot X
Dia...
|
NULL
|
|
50861
|
1093
|
37
|
2026-04-17T15:33:25.701769+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776440005701_m1.jpg...
|
Claude
|
Claude
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Collapse sidebar
Search
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Customize
Artifacts
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
More options for Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
More options for Linux SQLite UI for NAS
Claude API 500 internal server error
More options for Claude API 500 internal server error
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
More options for eGPU compatibility with Mac mini and Studio
Understanding OpenRouter API gateway
More options for Understanding OpenRouter API gateway
Screenpipe 14-day retention explained
More options for Screenpipe 14-day retention explained
Reddit homepage feed overview
More options for Reddit homepage feed overview
Docker container not visible in console
More options for Docker container not visible in console
DIA browser RAM configuration
More options for DIA browser RAM configuration
Screenpipe company background
More options for Screenpipe company background
DSK Bank Bulgaria secure investing explained
More options for DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
More options for Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
More options for Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
More options for Chromecast remote volume buttons not working
Screenpipe free version guide
More options for Screenpipe free version guide
Self-hosted LLM alternatives to Claude Sonnet
More options for Self-hosted LLM alternatives to Claude Sonnet
Screenpipe database query setup
More options for Screenpipe database query setup
Running screenpipe for free
More options for Running screenpipe for free
Updated to 1.3109.0
Relaunch to apply
Relaunch
Lukas Kovalik
Lukas Kovalik
Get apps and extensions
Boosteroid still recording despite ignored windows setting
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Close
Share chat
Screenpipe I have set Boosteroid to ignored windows but it is still being recorded. lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cat config.json
{
"disable_audio": true,
"monitor_ids": ["Display 1_1440x900_0,0", "Display 2_3008x1253_-813,-1253"],
"ignored_windows": [
"1Password",
"Keychain Access",
"Bitwarden",
"System Preferences",
"System Settings",
"zoom.us",
"HBO Max",
"Screenpipe Dashboard",
"Boosteroid"
]
}
Show more
15:40
Retry
Edit
Copy
The
ignored_windows
filter in Screenpipe matches against window
titles
, not app names. The issue is likely that Boosteroid runs in a browser (Safari), so the window title is something like
"Boosteroid - Play PC Games on any device"
or the game title — not just "Boosteroid".
To find the exact window title being captured, query the DB:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Or if you use the
spq
alias:
Copy to clipboard
bash
spq
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Once you see the exact
window_name
value, add that string to
ignored_windows
. For example it might need to be:
Copy to clipboard
json
"Boosteroid - Play PC Games on any device"
A few other things worth knowing:
The match is
substring-based
, so adding
"Boosteroid"
should
work if the window name contains that string — but only if Screenpipe is checking
window_name
and not
app_name
. Safari's
app_name
is just
"Safari"
, so the filter on
"Boosteroid"
may not be hitting anything.
You could also try adding
"Safari"
to
ignored_windows
entirely, though that's a blunt instrument if you use Safari for other things.
After editing
config.json
, make sure to
restart Screenpipe
fully for the change to take effect.
The query above will tell you exactly what string to add.
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Error: in prepare, no such column: created_at
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Error: in prepare, no such column: created_at
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
Show more
15:50
Retry
Edit
Copy
The
ocr_text
table uses a different timestamp column. Try:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;"
If you're unsure of the column names, check the schema first:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
".schema ocr_text"
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;"
Error: in prepare, no such column: timestamp
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite ".schema ocr_text"
CREATE TABLE IF NOT EXISTS "ocr_text" (
frame_id INTEGER NOT NULL,
text TEXT NOT NULL,
text_json TEXT,
app_name TEXT NOT NULL DEFAULT '',
ocr_engine TEXT NOT NULL DEFAULT 'unknown'
, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);
CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);
CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
Show more
16:10
Retry
Edit
Copy
No timestamp on
ocr_text
directly — it joins via
frame_id
to the
frames
table. Try:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT o.app_name, o.window_name FROM ocr_text o JOIN frames f ON o.frame_id = f.id WHERE o.app_name LIKE '%Safari%' OR o.window_name LIKE '%Boosteroid%' ORDER BY f.id DESC LIMIT 20;"
Or just get distinct values without ordering by time:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;"
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;"
Error: in prepare, no such column: timestamp
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite ".schema ocr_text"
CREATE TABLE IF NOT EXISTS "ocr_text" (
frame_id INTEGER NOT NULL,
text TEXT NOT NULL,
text_json TEXT,
app_name TEXT NOT NULL DEFAULT '',
ocr_engine TEXT NOT NULL DEFAULT 'unknown'
, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);
CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);
CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
Show more
16:27
Retry
Edit
Copy
Run the second query (no ORDER BY):
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;"
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
16:36
Retry
Edit
Copy
Empty result — Boosteroid isn't being captured via Safari's window name. It might be running in a different browser or as a PWA. Let's cast a wider net:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' OR app_name LIKE '%Boosteroid%' OR app_name LIKE '%Chrome%' OR app_name LIKE '%Firefox%' OR app_name LIKE '%Arc%' OR app_name LIKE '%Brave%' OR app_name LIKE '%Vivaldi%' LIMIT 50;"
And separately, check what apps are being recorded at all:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT app_name FROM ocr_text LIMIT 50;"
That second query will show you exactly what Screenpipe is capturing, and you can spot which app Boosteroid is running under.
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' OR app_name LIKE '%Boosteroid%' OR app_name LIKE '%Chrome%' OR app_name LIKE '%Firefox%' OR app_name LIKE '%Arc%' OR app_name LIKE '%Brave%' OR app_name LIKE '%Vivaldi%' LIMIT 50;"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT DISTINCT app_name FROM ocr_text LIMIT 50;"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
16:36
Retry
Edit
Copy
The DB is completely empty — no OCR data at all. This means Screenpipe isn't recording anything currently, or the DB you're querying is not the active one.
Check a few things:
1. Is Screenpipe actually running?
Copy to clipboard
bash
pgrep -la screenpipe
2. Is this the right DB?
Copy to clipboard
bash
ls
-lh ~/.screenpipe/db.sqlite
# Check if there are other DB files
find
~ -name
"db.sqlite"
2
>
/dev/null
3. Check DB size — if it's tiny, it's empty:
Copy to clipboard
bash
du
-sh ~/.screenpipe/db.sqlite
4. Check frames table too:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT COUNT(*) FROM frames;"...
|
[{"role":"AXLink","text":& [{"role":"AXLink","text":"Skip to content","depth":14,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Skip to content","depth":15,"role_description":"text"},{"role":"AXStaticText","text":"Click to collapse","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"⌘B","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"Drag to resize","depth":16,"role_description":"text"},{"role":"AXButton","text":"Collapse sidebar","depth":15,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search","depth":15,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cowork","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New chat ⌘N","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"New chat","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"⌘N","depth":18,"role_description":"text"},{"role":"AXButton","text":"Projects","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Artifacts","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pinned","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Bulgarian citizenship application process for EU residents","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Bulgarian citizenship application process for EU residents","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Dawarich location tracking project","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Dawarich location tracking project","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Recents","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"View all","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Boosteroid still recording despite ignored windows setting","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Boosteroid still recording despite ignored windows setting","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Missing JavaScript promise in authorization response","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Missing JavaScript promise in authorization response","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Linux SQLite UI for NAS","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Linux SQLite UI for NAS","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Claude API 500 internal server error","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Claude API 500 internal server error","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe query capabilities and usage","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe query capabilities and usage","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"eGPU compatibility with Mac mini and Studio","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for eGPU compatibility with Mac mini and Studio","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Understanding OpenRouter API gateway","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Understanding OpenRouter API gateway","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe 14-day retention explained","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe 14-day retention explained","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reddit homepage feed overview","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Reddit homepage feed overview","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Docker container not visible in console","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Docker container not visible in console","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"DIA browser RAM configuration","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for DIA browser RAM configuration","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe company background","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe company background","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"DSK Bank Bulgaria secure investing explained","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for DSK Bank Bulgaria secure investing explained","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Building a comprehensive personal homelab system","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Building a comprehensive personal homelab system","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Importing Google Timeline data to Owntracks","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Importing Google Timeline data to Owntracks","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chromecast remote volume buttons not working","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Chromecast remote volume buttons not working","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe free version guide","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe free version guide","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Self-hosted LLM alternatives to Claude Sonnet","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Self-hosted LLM alternatives to Claude Sonnet","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe database query setup","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe database query setup","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Running screenpipe for free","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Running screenpipe for free","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Updated to 1.3109.0","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"Relaunch to apply","depth":16,"role_description":"text"},{"role":"AXButton","text":"Relaunch","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Lukas Kovalik","depth":16,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"role_description":"text"},{"role":"AXButton","text":"Get apps and extensions","depth":15,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Boosteroid still recording despite ignored windows setting","depth":20,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Boosteroid still recording despite ignored windows setting","depth":22,"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Boosteroid still recording despite ignored windows setting","depth":20,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share chat","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe I have set Boosteroid to ignored windows but it is still being recorded. lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cat config.json\n{\n \"disable_audio\": true,\n \"monitor_ids\": [\"Display 1_1440x900_0,0\", \"Display 2_3008x1253_-813,-1253\"],\n \"ignored_windows\": [\n \"1Password\",\n \"Keychain Access\",\n \"Bitwarden\",\n \"System Preferences\",\n \"System Settings\",\n \"zoom.us\",\n \"HBO Max\",\n \"Screenpipe Dashboard\",\n \"Boosteroid\"\n ]\n}","depth":25,"role_description":"text"},{"role":"AXButton","text":"Show more","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"15:40","depth":23,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"The","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ignored_windows","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"filter in Screenpipe matches against window","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"titles","depth":25,"role_description":"text"},{"role":"AXStaticText","text":", not app names. The issue is likely that Boosteroid runs in a browser (Safari), so the window title is something like","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid - Play PC Games on any device\"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"or the game title — not just \"Boosteroid\".","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"To find the exact window title being captured, query the DB:","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"Or if you use the","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"spq","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"alias:","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"spq","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' ORDER BY created_at DESC LIMIT 20;\"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"Once you see the exact","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"window_name","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"value, add that string to","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ignored_windows","depth":25,"role_description":"text"},{"role":"AXStaticText","text":". For example it might need to be:","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"json","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid - Play PC Games on any device\"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"A few other things worth knowing:","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"The match is","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"substring-based","depth":26,"role_description":"text"},{"role":"AXStaticText","text":", so adding","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid\"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"should","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"work if the window name contains that string — but only if Screenpipe is checking","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"window_name","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"and not","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"app_name","depth":26,"role_description":"text"},{"role":"AXStaticText","text":". Safari's","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"app_name","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"is just","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"Safari\"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":", so the filter on","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid\"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"may not be hitting anything.","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"You could also try adding","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"Safari\"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"to","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"ignored_windows","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"entirely, though that's a blunt instrument if you use Safari for other things.","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"After editing","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"config.json","depth":26,"role_description":"text"},{"role":"AXStaticText","text":", make sure to","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"restart Screenpipe","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"fully for the change to take effect.","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"The query above will tell you exactly what string to add.","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give positive feedback","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give negative feedback","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\"\nError: in prepare, no such column: created_at\n ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\n error here ---^\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\"\nError: in prepare, no such column: created_at\n ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\n error here ---^\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $","depth":25,"role_description":"text"},{"role":"AXButton","text":"Show more","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"15:50","depth":23,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"The","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ocr_text","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"table uses a different timestamp column. Try:","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;\"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"If you're unsure of the column names, check the schema first:","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"\".schema ocr_text\"","depth":26,"role_description":"text"},{"role":"AXButton","text":"Copy","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give positive feedback","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give negative feedback","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;\"\nError: in prepare, no such column: timestamp\n ari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;\n error here ---^\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \".schema ocr_text\"\nCREATE TABLE IF NOT EXISTS \"ocr_text\" (\n frame_id INTEGER NOT NULL,\n text TEXT NOT NULL,\n text_json TEXT,\n app_name TEXT NOT NULL DEFAULT '',\n ocr_engine TEXT NOT NULL DEFAULT 'unknown'\n, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);\nCREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);\nCREATE INDEX idx_ocr_text_length ON ocr_text (text_length);\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $","depth":25,"role_description":"text"},{"role":"AXButton","text":"Show more","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"16:10","depth":23,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"No timestamp on","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ocr_text","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"directly — it joins via","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"frame_id","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"to the","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"frames","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"table. Try:","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT DISTINCT o.app_name, o.window_name FROM ocr_text o JOIN frames f ON o.frame_id = f.id WHERE o.app_name LIKE '%Safari%' OR o.window_name LIKE '%Boosteroid%' ORDER BY f.id DESC LIMIT 20;\"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"Or just get distinct values without ordering by time:","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;\"","depth":27,"role_description":"text"},{"role":"AXButton","text":"Copy","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give positive feedback","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give negative feedback","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;\"\nError: in prepare, no such column: timestamp\n ari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;\n error here ---^\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \".schema ocr_text\"\nCREATE TABLE IF NOT EXISTS \"ocr_text\" (\n frame_id INTEGER NOT NULL,\n text TEXT NOT NULL,\n text_json TEXT,\n app_name TEXT NOT NULL DEFAULT '',\n ocr_engine TEXT NOT NULL DEFAULT 'unknown'\n, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);\nCREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);\nCREATE INDEX idx_ocr_text_length ON ocr_text (text_length);\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $","depth":25,"role_description":"text"},{"role":"AXButton","text":"Show more","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"16:27","depth":23,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run the second query (no ORDER BY):","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;\"","depth":27,"role_description":"text"},{"role":"AXButton","text":"Copy","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give positive feedback","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give negative feedback","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"16:36","depth":23,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Empty result — Boosteroid isn't being captured via Safari's window name. It might be running in a different browser or as a PWA. Let's cast a wider net:","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' OR app_name LIKE '%Boosteroid%' OR app_name LIKE '%Chrome%' OR app_name LIKE '%Firefox%' OR app_name LIKE '%Arc%' OR app_name LIKE '%Brave%' OR app_name LIKE '%Vivaldi%' LIMIT 50;\"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"And separately, check what apps are being recorded at all:","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT DISTINCT app_name FROM ocr_text LIMIT 50;\"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"That second query will show you exactly what Screenpipe is capturing, and you can spot which app Boosteroid is running under.","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give positive feedback","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give negative feedback","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' OR app_name LIKE '%Boosteroid%' OR app_name LIKE '%Chrome%' OR app_name LIKE '%Firefox%' OR app_name LIKE '%Arc%' OR app_name LIKE '%Brave%' OR app_name LIKE '%Vivaldi%' LIMIT 50;\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT DISTINCT app_name FROM ocr_text LIMIT 50;\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"16:36","depth":23,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"The DB is completely empty — no OCR data at all. This means Screenpipe isn't recording anything currently, or the DB you're querying is not the active one.","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Check a few things:","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"1. Is Screenpipe actually running?","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"pgrep -la screenpipe","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"2. Is this the right DB?","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"ls","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"-lh ~/.screenpipe/db.sqlite","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"# Check if there are other DB files","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"find","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"~ -name","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"\"db.sqlite\"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"2","depth":26,"role_description":"text"},{"role":"AXStaticText","text":">","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"/dev/null","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"3. Check DB size — if it's tiny, it's empty:","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"du","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"-sh ~/.screenpipe/db.sqlite","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"4. Check frames table too:","depth":25,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT COUNT(*) FROM frames;\"","depth":26,"role_description":"text"}]...
|
-430807021609346284
|
-8544006821181072974
|
app_switch
|
accessibility
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Collapse sidebar
Search
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Customize
Artifacts
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
More options for Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
More options for Linux SQLite UI for NAS
Claude API 500 internal server error
More options for Claude API 500 internal server error
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
More options for eGPU compatibility with Mac mini and Studio
Understanding OpenRouter API gateway
More options for Understanding OpenRouter API gateway
Screenpipe 14-day retention explained
More options for Screenpipe 14-day retention explained
Reddit homepage feed overview
More options for Reddit homepage feed overview
Docker container not visible in console
More options for Docker container not visible in console
DIA browser RAM configuration
More options for DIA browser RAM configuration
Screenpipe company background
More options for Screenpipe company background
DSK Bank Bulgaria secure investing explained
More options for DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
More options for Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
More options for Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
More options for Chromecast remote volume buttons not working
Screenpipe free version guide
More options for Screenpipe free version guide
Self-hosted LLM alternatives to Claude Sonnet
More options for Self-hosted LLM alternatives to Claude Sonnet
Screenpipe database query setup
More options for Screenpipe database query setup
Running screenpipe for free
More options for Running screenpipe for free
Updated to 1.3109.0
Relaunch to apply
Relaunch
Lukas Kovalik
Lukas Kovalik
Get apps and extensions
Boosteroid still recording despite ignored windows setting
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Close
Share chat
Screenpipe I have set Boosteroid to ignored windows but it is still being recorded. lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cat config.json
{
"disable_audio": true,
"monitor_ids": ["Display 1_1440x900_0,0", "Display 2_3008x1253_-813,-1253"],
"ignored_windows": [
"1Password",
"Keychain Access",
"Bitwarden",
"System Preferences",
"System Settings",
"zoom.us",
"HBO Max",
"Screenpipe Dashboard",
"Boosteroid"
]
}
Show more
15:40
Retry
Edit
Copy
The
ignored_windows
filter in Screenpipe matches against window
titles
, not app names. The issue is likely that Boosteroid runs in a browser (Safari), so the window title is something like
"Boosteroid - Play PC Games on any device"
or the game title — not just "Boosteroid".
To find the exact window title being captured, query the DB:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Or if you use the
spq
alias:
Copy to clipboard
bash
spq
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Once you see the exact
window_name
value, add that string to
ignored_windows
. For example it might need to be:
Copy to clipboard
json
"Boosteroid - Play PC Games on any device"
A few other things worth knowing:
The match is
substring-based
, so adding
"Boosteroid"
should
work if the window name contains that string — but only if Screenpipe is checking
window_name
and not
app_name
. Safari's
app_name
is just
"Safari"
, so the filter on
"Boosteroid"
may not be hitting anything.
You could also try adding
"Safari"
to
ignored_windows
entirely, though that's a blunt instrument if you use Safari for other things.
After editing
config.json
, make sure to
restart Screenpipe
fully for the change to take effect.
The query above will tell you exactly what string to add.
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Error: in prepare, no such column: created_at
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Error: in prepare, no such column: created_at
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
Show more
15:50
Retry
Edit
Copy
The
ocr_text
table uses a different timestamp column. Try:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;"
If you're unsure of the column names, check the schema first:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
".schema ocr_text"
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;"
Error: in prepare, no such column: timestamp
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite ".schema ocr_text"
CREATE TABLE IF NOT EXISTS "ocr_text" (
frame_id INTEGER NOT NULL,
text TEXT NOT NULL,
text_json TEXT,
app_name TEXT NOT NULL DEFAULT '',
ocr_engine TEXT NOT NULL DEFAULT 'unknown'
, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);
CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);
CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
Show more
16:10
Retry
Edit
Copy
No timestamp on
ocr_text
directly — it joins via
frame_id
to the
frames
table. Try:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT o.app_name, o.window_name FROM ocr_text o JOIN frames f ON o.frame_id = f.id WHERE o.app_name LIKE '%Safari%' OR o.window_name LIKE '%Boosteroid%' ORDER BY f.id DESC LIMIT 20;"
Or just get distinct values without ordering by time:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;"
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;"
Error: in prepare, no such column: timestamp
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite ".schema ocr_text"
CREATE TABLE IF NOT EXISTS "ocr_text" (
frame_id INTEGER NOT NULL,
text TEXT NOT NULL,
text_json TEXT,
app_name TEXT NOT NULL DEFAULT '',
ocr_engine TEXT NOT NULL DEFAULT 'unknown'
, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);
CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);
CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
Show more
16:27
Retry
Edit
Copy
Run the second query (no ORDER BY):
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;"
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
16:36
Retry
Edit
Copy
Empty result — Boosteroid isn't being captured via Safari's window name. It might be running in a different browser or as a PWA. Let's cast a wider net:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' OR app_name LIKE '%Boosteroid%' OR app_name LIKE '%Chrome%' OR app_name LIKE '%Firefox%' OR app_name LIKE '%Arc%' OR app_name LIKE '%Brave%' OR app_name LIKE '%Vivaldi%' LIMIT 50;"
And separately, check what apps are being recorded at all:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT app_name FROM ocr_text LIMIT 50;"
That second query will show you exactly what Screenpipe is capturing, and you can spot which app Boosteroid is running under.
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' OR app_name LIKE '%Boosteroid%' OR app_name LIKE '%Chrome%' OR app_name LIKE '%Firefox%' OR app_name LIKE '%Arc%' OR app_name LIKE '%Brave%' OR app_name LIKE '%Vivaldi%' LIMIT 50;"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT DISTINCT app_name FROM ocr_text LIMIT 50;"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
16:36
Retry
Edit
Copy
The DB is completely empty — no OCR data at all. This means Screenpipe isn't recording anything currently, or the DB you're querying is not the active one.
Check a few things:
1. Is Screenpipe actually running?
Copy to clipboard
bash
pgrep -la screenpipe
2. Is this the right DB?
Copy to clipboard
bash
ls
-lh ~/.screenpipe/db.sqlite
# Check if there are other DB files
find
~ -name
"db.sqlite"
2
>
/dev/null
3. Check DB size — if it's tiny, it's empty:
Copy to clipboard
bash
du
-sh ~/.screenpipe/db.sqlite
4. Check frames table too:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT COUNT(*) FROM frames;"...
|
NULL
|
|
50862
|
1094
|
30
|
2026-04-17T15:33:25.695930+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776440005695_m2.jpg...
|
Claude
|
Claude
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Collapse sidebar
Search
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Customize
Artifacts
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
More options for Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
More options for Linux SQLite UI for NAS
Claude API 500 internal server error
More options for Claude API 500 internal server error
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
More options for eGPU compatibility with Mac mini and Studio
Understanding OpenRouter API gateway
More options for Understanding OpenRouter API gateway
Screenpipe 14-day retention explained
More options for Screenpipe 14-day retention explained
Reddit homepage feed overview
More options for Reddit homepage feed overview
Docker container not visible in console
More options for Docker container not visible in console
DIA browser RAM configuration
More options for DIA browser RAM configuration
Screenpipe company background
More options for Screenpipe company background
DSK Bank Bulgaria secure investing explained
More options for DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
More options for Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
More options for Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
More options for Chromecast remote volume buttons not working
Screenpipe free version guide
More options for Screenpipe free version guide
Self-hosted LLM alternatives to Claude Sonnet
More options for Self-hosted LLM alternatives to Claude Sonnet
Screenpipe database query setup
More options for Screenpipe database query setup
Running screenpipe for free
More options for Running screenpipe for free
Updated to 1.3109.0
Relaunch to apply
Relaunch
Lukas Kovalik
Lukas Kovalik
Get apps and extensions
Boosteroid still recording despite ignored windows setting
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Close
Share chat
Screenpipe I have set Boosteroid to ignored windows but it is still being recorded. lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cat config.json
{
"disable_audio": true,
"monitor_ids": ["Display 1_1440x900_0,0", "Display 2_3008x1253_-813,-1253"],
"ignored_windows": [
"1Password",
"Keychain Access",
"Bitwarden",
"System Preferences",
"System Settings",
"zoom.us",
"HBO Max",
"Screenpipe Dashboard",
"Boosteroid"
]
}
Show more
15:40
Retry
Edit
Copy
The
ignored_windows
filter in Screenpipe matches against window
titles
, not app names. The issue is likely that Boosteroid runs in a browser (Safari), so the window title is something like
"Boosteroid - Play PC Games on any device"
or the game title — not just "Boosteroid".
To find the exact window title being captured, query the DB:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Or if you use the
spq
alias:
Copy to clipboard
bash
spq
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Once you see the exact
window_name
value, add that string to
ignored_windows
. For example it might need to be:
Copy to clipboard
json
"Boosteroid - Play PC Games on any device"
A few other things worth knowing:
The match is
substring-based
, so adding
"Boosteroid"
should
work if the window name contains that string — but only if Screenpipe is checking
window_name
and not
app_name
. Safari's
app_name
is just
"Safari"
, so the filter on
"Boosteroid"
may not be hitting anything.
You could also try adding
"Safari"
to
ignored_windows
entirely, though that's a blunt instrument if you use Safari for other things.
After editing
config.json
, make sure to
restart Screenpipe
fully for the change to take effect.
The query above will tell you exactly what string to add.
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Error: in prepare, no such column: created_at
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Error: in prepare, no such column: created_at
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
Show more
15:50
Retry
Edit
Copy
The
ocr_text
table uses a different timestamp column. Try:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;"
If you're unsure of the column names, check the schema first:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
".schema ocr_text"
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;"
Error: in prepare, no such column: timestamp
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite ".schema ocr_text"
CREATE TABLE IF NOT EXISTS "ocr_text" (
frame_id INTEGER NOT NULL,
text TEXT NOT NULL,
text_json TEXT,
app_name TEXT NOT NULL DEFAULT '',
ocr_engine TEXT NOT NULL DEFAULT 'unknown'
, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);
CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);
CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
Show more
16:10
Retry
Edit
Copy
No timestamp on
ocr_text
directly — it joins via
frame_id
to the
frames
table. Try:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT o.app_name, o.window_name FROM ocr_text o JOIN frames f ON o.frame_id = f.id WHERE o.app_name LIKE '%Safari%' OR o.window_name LIKE '%Boosteroid%' ORDER BY f.id DESC LIMIT 20;"
Or just get distinct values without ordering by time:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;"
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;"
Error: in prepare, no such column: timestamp
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite ".schema ocr_text"
CREATE TABLE IF NOT EXISTS "ocr_text" (
frame_id INTEGER NOT NULL,
text TEXT NOT NULL,
text_json TEXT,
app_name TEXT NOT NULL DEFAULT '',
ocr_engine TEXT NOT NULL DEFAULT 'unknown'
, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);
CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);
CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
Show more
16:27
Retry
Edit
Copy
Run the second query (no ORDER BY):
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;"
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
16:36
Retry
Edit
Copy
Empty result — Boosteroid isn't being captured via Safari's window name. It might be running in a different browser or as a PWA. Let's cast a wider net:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' OR app_name LIKE '%Boosteroid%' OR app_name LIKE '%Chrome%' OR app_name LIKE '%Firefox%' OR app_name LIKE '%Arc%' OR app_name LIKE '%Brave%' OR app_name LIKE '%Vivaldi%' LIMIT 50;"
And separately, check what apps are being recorded at all:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT app_name FROM ocr_text LIMIT 50;"
That second query will show you exactly what Screenpipe is capturing, and you can spot which app Boosteroid is running under.
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' OR app_name LIKE '%Boosteroid%' OR app_name LIKE '%Chrome%' OR app_name LIKE '%Firefox%' OR app_name LIKE '%Arc%' OR app_name LIKE '%Brave%' OR app_name LIKE '%Vivaldi%' LIMIT 50;"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT DISTINCT app_name FROM ocr_text LIMIT 50;"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
16:36
Retry
Edit
Copy
The DB is completely empty — no OCR data at all. This means Screenpipe isn't recording anything currently, or the DB you're querying is not the active one.
Check a few things:
1. Is Screenpipe actually running?
Copy to clipboard
bash
pgrep -la screenpipe
2. Is this the right DB?
Copy to clipboard
bash
ls
-lh ~/.screenpipe/db.sqlite
# Check if there are other DB files
find
~ -name
"db.sqlite"
2
>
/dev/null
3. Check DB size — if it's tiny, it's empty:
Copy to clipboard
bash
du
-sh ~/.screenpipe/db.sqlite
4. Check frames table too:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT COUNT(*) FROM frames;"...
|
[{"role":"AXLink","text":& [{"role":"AXLink","text":"Skip to content","depth":14,"bounds":{"left":0.002734375,"top":0.022222223,"width":0.000390625,"height":0.00069444446},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Skip to content","depth":15,"bounds":{"left":0.002734375,"top":0.022222223,"width":0.044921875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Click to collapse","depth":16,"bounds":{"left":0.1234375,"top":0.74375,"width":0.036328126,"height":0.010416667},"role_description":"text"},{"role":"AXStaticText","text":"⌘B","depth":16,"bounds":{"left":0.16171876,"top":0.74375,"width":0.0078125,"height":0.010416667},"role_description":"text"},{"role":"AXStaticText","text":"Drag to resize","depth":16,"bounds":{"left":0.1234375,"top":0.75416666,"width":0.03046875,"height":0.010416667},"role_description":"text"},{"role":"AXButton","text":"Collapse sidebar","depth":15,"bounds":{"left":0.0359375,"top":0.025694445,"width":0.009375,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search","depth":15,"bounds":{"left":0.0453125,"top":0.025694445,"width":0.009375,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat","depth":16,"bounds":{"left":0.006640625,"top":0.05347222,"width":0.026171874,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cowork","depth":16,"bounds":{"left":0.033203125,"top":0.05347222,"width":0.011328125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":16,"bounds":{"left":0.044921875,"top":0.05347222,"width":0.011328125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New chat ⌘N","depth":16,"bounds":{"left":0.00625,"top":0.07986111,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"New chat","depth":17,"bounds":{"left":0.01796875,"top":0.08263889,"width":0.023046875,"height":0.011805556},"role_description":"text"},{"role":"AXStaticText","text":"⌘N","depth":18,"bounds":{"left":0.09882812,"top":0.083333336,"width":0.008203125,"height":0.010416667},"role_description":"text"},{"role":"AXButton","text":"Projects","depth":16,"bounds":{"left":0.00625,"top":0.09791667,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":16,"bounds":{"left":0.00625,"top":0.11597222,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Artifacts","depth":16,"bounds":{"left":0.00625,"top":0.13402778,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pinned","depth":16,"bounds":{"left":0.00859375,"top":0.16875,"width":0.1,"height":0.011111111},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Bulgarian citizenship application process for EU residents","depth":17,"bounds":{"left":0.00625,"top":0.18333334,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Bulgarian citizenship application process for EU residents","depth":18,"bounds":{"left":0.10078125,"top":0.18611111,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Dawarich location tracking project","depth":17,"bounds":{"left":0.00625,"top":0.20208333,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Dawarich location tracking project","depth":18,"bounds":{"left":0.10078125,"top":0.2048611,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Recents","depth":16,"bounds":{"left":0.00859375,"top":0.22847222,"width":0.076171875,"height":0.011111111},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"View all","depth":16,"bounds":{"left":0.0859375,"top":0.22847222,"width":0.02265625,"height":0.011111111},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Boosteroid still recording despite ignored windows setting","depth":17,"bounds":{"left":0.00625,"top":0.24305555,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Boosteroid still recording despite ignored windows setting","depth":18,"bounds":{"left":0.10078125,"top":0.24583334,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Missing JavaScript promise in authorization response","depth":17,"bounds":{"left":0.00625,"top":0.26180556,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Missing JavaScript promise in authorization response","depth":18,"bounds":{"left":0.10078125,"top":0.26458332,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Linux SQLite UI for NAS","depth":17,"bounds":{"left":0.00625,"top":0.28055555,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Linux SQLite UI for NAS","depth":18,"bounds":{"left":0.10078125,"top":0.28333333,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Claude API 500 internal server error","depth":17,"bounds":{"left":0.00625,"top":0.29930556,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Claude API 500 internal server error","depth":18,"bounds":{"left":0.10078125,"top":0.30208334,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe query capabilities and usage","depth":17,"bounds":{"left":0.00625,"top":0.31805557,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe query capabilities and usage","depth":18,"bounds":{"left":0.10078125,"top":0.32083333,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"eGPU compatibility with Mac mini and Studio","depth":17,"bounds":{"left":0.00625,"top":0.33680555,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for eGPU compatibility with Mac mini and Studio","depth":18,"bounds":{"left":0.10078125,"top":0.33958334,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Understanding OpenRouter API gateway","depth":17,"bounds":{"left":0.00625,"top":0.35555556,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Understanding OpenRouter API gateway","depth":18,"bounds":{"left":0.10078125,"top":0.35833332,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe 14-day retention explained","depth":17,"bounds":{"left":0.00625,"top":0.37430555,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe 14-day retention explained","depth":18,"bounds":{"left":0.10078125,"top":0.37708333,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reddit homepage feed overview","depth":17,"bounds":{"left":0.00625,"top":0.39305556,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Reddit homepage feed overview","depth":18,"bounds":{"left":0.10078125,"top":0.39583334,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Docker container not visible in console","depth":17,"bounds":{"left":0.00625,"top":0.41180557,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Docker container not visible in console","depth":18,"bounds":{"left":0.10078125,"top":0.41458333,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"DIA browser RAM configuration","depth":17,"bounds":{"left":0.00625,"top":0.43055555,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for DIA browser RAM configuration","depth":18,"bounds":{"left":0.10078125,"top":0.43333334,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe company background","depth":17,"bounds":{"left":0.00625,"top":0.44930556,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe company background","depth":18,"bounds":{"left":0.10078125,"top":0.45208332,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"DSK Bank Bulgaria secure investing explained","depth":17,"bounds":{"left":0.00625,"top":0.46805555,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for DSK Bank Bulgaria secure investing explained","depth":18,"bounds":{"left":0.10078125,"top":0.47083333,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Building a comprehensive personal homelab system","depth":17,"bounds":{"left":0.00625,"top":0.48680556,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Building a comprehensive personal homelab system","depth":18,"bounds":{"left":0.10078125,"top":0.48958334,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Importing Google Timeline data to Owntracks","depth":17,"bounds":{"left":0.00625,"top":0.50555557,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Importing Google Timeline data to Owntracks","depth":18,"bounds":{"left":0.10078125,"top":0.5083333,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chromecast remote volume buttons not working","depth":17,"bounds":{"left":0.00625,"top":0.5243056,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Chromecast remote volume buttons not working","depth":18,"bounds":{"left":0.10078125,"top":0.52708334,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe free version guide","depth":17,"bounds":{"left":0.00625,"top":0.54305553,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe free version guide","depth":18,"bounds":{"left":0.10078125,"top":0.54583335,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Self-hosted LLM alternatives to Claude Sonnet","depth":17,"bounds":{"left":0.00625,"top":0.56180555,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Self-hosted LLM alternatives to Claude Sonnet","depth":18,"bounds":{"left":0.10078125,"top":0.56458336,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe database query setup","depth":17,"bounds":{"left":0.00625,"top":0.58055556,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe database query setup","depth":18,"bounds":{"left":0.10078125,"top":0.5833333,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Running screenpipe for free","depth":17,"bounds":{"left":0.00625,"top":0.59930557,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Running screenpipe for free","depth":18,"bounds":{"left":0.10078125,"top":0.6020833,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Updated to 1.3109.0","depth":16,"bounds":{"left":0.032421876,"top":0.89166665,"width":0.05078125,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Relaunch to apply","depth":16,"bounds":{"left":0.037890624,"top":0.90625,"width":0.03984375,"height":0.010416667},"role_description":"text"},{"role":"AXButton","text":"Relaunch","depth":16,"bounds":{"left":0.011328125,"top":0.92569447,"width":0.09296875,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Lukas Kovalik","depth":16,"bounds":{"left":0.00625,"top":0.97083336,"width":0.044921875,"height":0.016666668},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"bounds":{"left":0.01796875,"top":0.9736111,"width":0.030078124,"height":0.010416667},"role_description":"text"},{"role":"AXButton","text":"Get apps and extensions","depth":15,"bounds":{"left":0.1,"top":0.97152776,"width":0.009375,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Boosteroid still recording despite ignored windows setting","depth":20,"bounds":{"left":0.121875,"top":0.024305556,"width":0.15703125,"height":0.019444445},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Boosteroid still recording despite ignored windows setting","depth":22,"bounds":{"left":0.125,"top":0.027083334,"width":0.15078124,"height":0.013194445},"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Boosteroid still recording despite ignored windows setting","depth":20,"bounds":{"left":0.27890626,"top":0.024305556,"width":0.011328125,"height":0.019444445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":22,"bounds":{"left":0.52382815,"top":0.022916667,"width":0.0125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share chat","depth":22,"bounds":{"left":0.5378906,"top":0.022916667,"width":0.0125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe I have set Boosteroid to ignored windows but it is still being recorded. lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cat config.json\n{\n \"disable_audio\": true,\n \"monitor_ids\": [\"Display 1_1440x900_0,0\", \"Display 2_3008x1253_-813,-1253\"],\n \"ignored_windows\": [\n \"1Password\",\n \"Keychain Access\",\n \"Bitwarden\",\n \"System Preferences\",\n \"System Settings\",\n \"zoom.us\",\n \"HBO Max\",\n \"Screenpipe Dashboard\",\n \"Boosteroid\"\n ]\n}","depth":25,"bounds":{"left":0.23867187,"top":0.017361112,"width":0.22578125,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Show more","depth":23,"bounds":{"left":0.23867187,"top":0.017361112,"width":0.17421874,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"15:40","depth":23,"bounds":{"left":0.425,"top":0.017361112,"width":0.011328125,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Retry","depth":23,"bounds":{"left":0.43945312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":23,"bounds":{"left":0.4519531,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":23,"bounds":{"left":0.46445313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"The","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"ignored_windows","depth":25,"bounds":{"left":0.20703125,"top":0.017361112,"width":0.05078125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"filter in Screenpipe matches against window","depth":24,"bounds":{"left":0.259375,"top":0.017361112,"width":0.13085938,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"titles","depth":25,"bounds":{"left":0.38984376,"top":0.017361112,"width":0.015625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":", not app names. The issue is likely that Boosteroid runs in a browser (Safari), so the window title is something like","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.27148438,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid - Play PC Games on any device\"","depth":25,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.13007812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"or the game title — not just \"Boosteroid\".","depth":24,"bounds":{"left":0.32226562,"top":0.017361112,"width":0.11835937,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"To find the exact window title being captured, query the DB:","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.17226562,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":27,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.10507812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\"","depth":27,"bounds":{"left":0.3,"top":0.017361112,"width":0.1765625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Or if you use the","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.0484375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"spq","depth":25,"bounds":{"left":0.24257812,"top":0.017361112,"width":0.010546875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"alias:","depth":24,"bounds":{"left":0.2546875,"top":0.017361112,"width":0.01640625,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"spq","depth":27,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.01328125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' ORDER BY created_at DESC LIMIT 20;\"","depth":27,"bounds":{"left":0.20820312,"top":0.017361112,"width":0.26835936,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Once you see the exact","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.06757812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"window_name","depth":25,"bounds":{"left":0.26171875,"top":0.017361112,"width":0.0375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"value, add that string to","depth":24,"bounds":{"left":0.30078125,"top":0.017361112,"width":0.0703125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"ignored_windows","depth":25,"bounds":{"left":0.37265626,"top":0.017361112,"width":0.05078125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":". For example it might need to be:","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.27148438,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"json","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.009375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid - Play PC Games on any device\"","depth":26,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.13789062,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"A few other things worth knowing:","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.10039063,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"The match is","depth":25,"bounds":{"left":0.20507812,"top":0.017361112,"width":0.03828125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"substring-based","depth":26,"bounds":{"left":0.24296875,"top":0.017361112,"width":0.04921875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":", so adding","depth":25,"bounds":{"left":0.29179686,"top":0.017361112,"width":0.032421876,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid\"","depth":26,"bounds":{"left":0.32578126,"top":0.017361112,"width":0.040625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.36796874,"top":0.017361112,"width":0.001953125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"should","depth":26,"bounds":{"left":0.36953124,"top":0.017361112,"width":0.019921875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"work if the window name contains that string — but only if Screenpipe is checking","depth":25,"bounds":{"left":0.20507812,"top":0.017361112,"width":0.25859374,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"window_name","depth":26,"bounds":{"left":0.36992186,"top":0.017361112,"width":0.0375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"and not","depth":25,"bounds":{"left":0.40898436,"top":0.017361112,"width":0.023828125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"app_name","depth":26,"bounds":{"left":0.20703125,"top":0.017361112,"width":0.02734375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":". Safari's","depth":25,"bounds":{"left":0.2359375,"top":0.017361112,"width":0.025390625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"app_name","depth":26,"bounds":{"left":0.26289064,"top":0.017361112,"width":0.02734375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"is just","depth":25,"bounds":{"left":0.29179686,"top":0.017361112,"width":0.01953125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"Safari\"","depth":26,"bounds":{"left":0.31289062,"top":0.017361112,"width":0.02734375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":", so the filter on","depth":25,"bounds":{"left":0.34179688,"top":0.017361112,"width":0.0453125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid\"","depth":26,"bounds":{"left":0.38867188,"top":0.017361112,"width":0.041015625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"may not be hitting anything.","depth":25,"bounds":{"left":0.20507812,"top":0.017361112,"width":0.2511719,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"You could also try adding","depth":25,"bounds":{"left":0.20507812,"top":0.017361112,"width":0.07421875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"Safari\"","depth":26,"bounds":{"left":0.28085938,"top":0.017361112,"width":0.02734375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"to","depth":25,"bounds":{"left":0.30976564,"top":0.017361112,"width":0.00859375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"ignored_windows","depth":26,"bounds":{"left":0.31992188,"top":0.017361112,"width":0.051171876,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"entirely, though that's a blunt instrument if you use Safari for other things.","depth":25,"bounds":{"left":0.20507812,"top":0.017361112,"width":0.25351563,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"After editing","depth":25,"bounds":{"left":0.20507812,"top":0.017361112,"width":0.038671874,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"config.json","depth":26,"bounds":{"left":0.2453125,"top":0.017361112,"width":0.0375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":", make sure to","depth":25,"bounds":{"left":0.284375,"top":0.017361112,"width":0.041015625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"restart Screenpipe","depth":26,"bounds":{"left":0.325,"top":0.017361112,"width":0.055859376,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"fully for the change to take effect.","depth":25,"bounds":{"left":0.20507812,"top":0.017361112,"width":0.25390625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"The query above will tell you exactly what string to add.","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.15976563,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy","depth":23,"bounds":{"left":0.18945312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give positive feedback","depth":23,"bounds":{"left":0.20195313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give negative feedback","depth":23,"bounds":{"left":0.21445313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":23,"bounds":{"left":0.22695312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\"\nError: in prepare, no such column: created_at\n ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\n error here ---^\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\"\nError: in prepare, no such column: created_at\n ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\n error here ---^\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $","depth":25,"bounds":{"left":0.23867187,"top":0.017361112,"width":0.2234375,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Show more","depth":23,"bounds":{"left":0.23867187,"top":0.017361112,"width":0.17421874,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"15:50","depth":23,"bounds":{"left":0.425,"top":0.017361112,"width":0.011328125,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Retry","depth":23,"bounds":{"left":0.43945312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":23,"bounds":{"left":0.4519531,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":23,"bounds":{"left":0.46445313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"The","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"ocr_text","depth":25,"bounds":{"left":0.20703125,"top":0.017361112,"width":0.02734375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"table uses a different timestamp column. Try:","depth":24,"bounds":{"left":0.2359375,"top":0.017361112,"width":0.13164063,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":27,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.10507812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;\"","depth":27,"bounds":{"left":0.3,"top":0.017361112,"width":0.1765625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"If you're unsure of the column names, check the schema first:","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.17578125,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":26,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.10507812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\".schema ocr_text\"","depth":26,"bounds":{"left":0.3,"top":0.017361112,"width":0.059765626,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy","depth":23,"bounds":{"left":0.18945312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give positive feedback","depth":23,"bounds":{"left":0.20195313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give negative feedback","depth":23,"bounds":{"left":0.21445313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":23,"bounds":{"left":0.22695312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;\"\nError: in prepare, no such column: timestamp\n ari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;\n error here ---^\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \".schema ocr_text\"\nCREATE TABLE IF NOT EXISTS \"ocr_text\" (\n frame_id INTEGER NOT NULL,\n text TEXT NOT NULL,\n text_json TEXT,\n app_name TEXT NOT NULL DEFAULT '',\n ocr_engine TEXT NOT NULL DEFAULT 'unknown'\n, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);\nCREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);\nCREATE INDEX idx_ocr_text_length ON ocr_text (text_length);\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $","depth":25,"bounds":{"left":0.23867187,"top":0.017361112,"width":0.23046875,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Show more","depth":23,"bounds":{"left":0.23867187,"top":0.017361112,"width":0.17421874,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"16:10","depth":23,"bounds":{"left":0.42617187,"top":0.017361112,"width":0.01015625,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Retry","depth":23,"bounds":{"left":0.43945312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":23,"bounds":{"left":0.4519531,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":23,"bounds":{"left":0.46445313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"No timestamp on","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.0515625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"ocr_text","depth":25,"bounds":{"left":0.24570313,"top":0.017361112,"width":0.02734375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"directly — it joins via","depth":24,"bounds":{"left":0.2746094,"top":0.017361112,"width":0.06289063,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"frame_id","depth":25,"bounds":{"left":0.3390625,"top":0.017361112,"width":0.027734375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"to the","depth":24,"bounds":{"left":0.3683594,"top":0.017361112,"width":0.019140625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"frames","depth":25,"bounds":{"left":0.3890625,"top":0.017361112,"width":0.020703126,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"table. Try:","depth":24,"bounds":{"left":0.41132814,"top":0.017361112,"width":0.03046875,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":27,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.10507812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT DISTINCT o.app_name, o.window_name FROM ocr_text o JOIN frames f ON o.frame_id = f.id WHERE o.app_name LIKE '%Safari%' OR o.window_name LIKE '%Boosteroid%' ORDER BY f.id DESC LIMIT 20;\"","depth":27,"bounds":{"left":0.3,"top":0.017361112,"width":0.1765625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Or just get distinct values without ordering by time:","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.14804688,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":27,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.10507812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;\"","depth":27,"bounds":{"left":0.3,"top":0.017361112,"width":0.1765625,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy","depth":23,"bounds":{"left":0.18945312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give positive feedback","depth":23,"bounds":{"left":0.20195313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give negative feedback","depth":23,"bounds":{"left":0.21445313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":23,"bounds":{"left":0.22695312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;\"\nError: in prepare, no such column: timestamp\n ari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;\n error here ---^\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \".schema ocr_text\"\nCREATE TABLE IF NOT EXISTS \"ocr_text\" (\n frame_id INTEGER NOT NULL,\n text TEXT NOT NULL,\n text_json TEXT,\n app_name TEXT NOT NULL DEFAULT '',\n ocr_engine TEXT NOT NULL DEFAULT 'unknown'\n, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);\nCREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);\nCREATE INDEX idx_ocr_text_length ON ocr_text (text_length);\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $","depth":25,"bounds":{"left":0.23867187,"top":0.017361112,"width":0.23046875,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Show more","depth":23,"bounds":{"left":0.23867187,"top":0.017361112,"width":0.17421874,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"16:27","depth":23,"bounds":{"left":0.42539063,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Retry","depth":23,"bounds":{"left":0.43945312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":23,"bounds":{"left":0.4519531,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":23,"bounds":{"left":0.46445313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Run the second query (no ORDER BY):","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.11171875,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":27,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.10507812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;\"","depth":27,"bounds":{"left":0.3,"top":0.017361112,"width":0.1765625,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy","depth":23,"bounds":{"left":0.18945312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give positive feedback","depth":23,"bounds":{"left":0.20195313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give negative feedback","depth":23,"bounds":{"left":0.21445313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":23,"bounds":{"left":0.22695312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $","depth":25,"bounds":{"left":0.23867187,"top":0.017361112,"width":0.2234375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"16:36","depth":23,"bounds":{"left":0.42539063,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Retry","depth":23,"bounds":{"left":0.43945312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":23,"bounds":{"left":0.4519531,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":23,"bounds":{"left":0.46445313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Empty result — Boosteroid isn't being captured via Safari's window name. It might be running in a different browser or as a PWA. Let's cast a wider net:","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.27070314,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":27,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.10507812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' OR app_name LIKE '%Boosteroid%' OR app_name LIKE '%Chrome%' OR app_name LIKE '%Firefox%' OR app_name LIKE '%Arc%' OR app_name LIKE '%Brave%' OR app_name LIKE '%Vivaldi%' LIMIT 50;\"","depth":27,"bounds":{"left":0.3,"top":0.017361112,"width":0.1765625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"And separately, check what apps are being recorded at all:","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.16601562,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":26,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.10507812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT DISTINCT app_name FROM ocr_text LIMIT 50;\"","depth":26,"bounds":{"left":0.3,"top":0.017361112,"width":0.16445312,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"That second query will show you exactly what Screenpipe is capturing, and you can spot which app Boosteroid is running under.","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.25351563,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy","depth":23,"bounds":{"left":0.18945312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give positive feedback","depth":23,"bounds":{"left":0.20195313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give negative feedback","depth":23,"bounds":{"left":0.21445313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":23,"bounds":{"left":0.22695312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' OR app_name LIKE '%Boosteroid%' OR app_name LIKE '%Chrome%' OR app_name LIKE '%Firefox%' OR app_name LIKE '%Arc%' OR app_name LIKE '%Brave%' OR app_name LIKE '%Vivaldi%' LIMIT 50;\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT DISTINCT app_name FROM ocr_text LIMIT 50;\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $","depth":25,"bounds":{"left":0.23867187,"top":0.017361112,"width":0.23085937,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"16:36","depth":23,"bounds":{"left":0.42539063,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Retry","depth":23,"bounds":{"left":0.43945312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":23,"bounds":{"left":0.4519531,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":23,"bounds":{"left":0.46445313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"The DB is completely empty — no OCR data at all. This means Screenpipe isn't recording anything currently, or the DB you're querying is not the active one.","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.25507814,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Check a few things:","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.056640625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"1. Is Screenpipe actually running?","depth":25,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.10078125,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"pgrep -la screenpipe","depth":26,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.065625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"2. Is this the right DB?","depth":25,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.06523438,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"ls","depth":26,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.006640625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"-lh ~/.screenpipe/db.sqlite","depth":26,"bounds":{"left":0.2015625,"top":0.017361112,"width":0.09257813,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"# Check if there are other DB files","depth":26,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.11484375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"find","depth":26,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.01328125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"~ -name","depth":26,"bounds":{"left":0.20820312,"top":0.017361112,"width":0.030078124,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"db.sqlite\"","depth":26,"bounds":{"left":0.23789063,"top":0.017361112,"width":0.036328126,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.27382812,"top":0.017361112,"width":0.00390625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"2","depth":26,"bounds":{"left":0.27734375,"top":0.017361112,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":">","depth":26,"bounds":{"left":0.28046876,"top":0.017361112,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"/dev/null","depth":26,"bounds":{"left":0.28359374,"top":0.017361112,"width":0.030078124,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"3. Check DB size — if it's tiny, it's empty:","depth":25,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.11875,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"du","depth":26,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.006640625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"-sh ~/.screenpipe/db.sqlite","depth":26,"bounds":{"left":0.2015625,"top":0.017361112,"width":0.09257813,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"4. Check frames table too:","depth":25,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.07695313,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":26,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.10507812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT COUNT(*) FROM frames;\"","depth":26,"bounds":{"left":0.3,"top":0.017361112,"width":0.09882812,"height":0.00069444446},"role_description":"text"}]...
|
-430807021609346284
|
-8544006821181072974
|
app_switch
|
accessibility
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Collapse sidebar
Search
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Customize
Artifacts
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
More options for Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
More options for Linux SQLite UI for NAS
Claude API 500 internal server error
More options for Claude API 500 internal server error
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
More options for eGPU compatibility with Mac mini and Studio
Understanding OpenRouter API gateway
More options for Understanding OpenRouter API gateway
Screenpipe 14-day retention explained
More options for Screenpipe 14-day retention explained
Reddit homepage feed overview
More options for Reddit homepage feed overview
Docker container not visible in console
More options for Docker container not visible in console
DIA browser RAM configuration
More options for DIA browser RAM configuration
Screenpipe company background
More options for Screenpipe company background
DSK Bank Bulgaria secure investing explained
More options for DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
More options for Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
More options for Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
More options for Chromecast remote volume buttons not working
Screenpipe free version guide
More options for Screenpipe free version guide
Self-hosted LLM alternatives to Claude Sonnet
More options for Self-hosted LLM alternatives to Claude Sonnet
Screenpipe database query setup
More options for Screenpipe database query setup
Running screenpipe for free
More options for Running screenpipe for free
Updated to 1.3109.0
Relaunch to apply
Relaunch
Lukas Kovalik
Lukas Kovalik
Get apps and extensions
Boosteroid still recording despite ignored windows setting
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Close
Share chat
Screenpipe I have set Boosteroid to ignored windows but it is still being recorded. lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cat config.json
{
"disable_audio": true,
"monitor_ids": ["Display 1_1440x900_0,0", "Display 2_3008x1253_-813,-1253"],
"ignored_windows": [
"1Password",
"Keychain Access",
"Bitwarden",
"System Preferences",
"System Settings",
"zoom.us",
"HBO Max",
"Screenpipe Dashboard",
"Boosteroid"
]
}
Show more
15:40
Retry
Edit
Copy
The
ignored_windows
filter in Screenpipe matches against window
titles
, not app names. The issue is likely that Boosteroid runs in a browser (Safari), so the window title is something like
"Boosteroid - Play PC Games on any device"
or the game title — not just "Boosteroid".
To find the exact window title being captured, query the DB:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Or if you use the
spq
alias:
Copy to clipboard
bash
spq
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Once you see the exact
window_name
value, add that string to
ignored_windows
. For example it might need to be:
Copy to clipboard
json
"Boosteroid - Play PC Games on any device"
A few other things worth knowing:
The match is
substring-based
, so adding
"Boosteroid"
should
work if the window name contains that string — but only if Screenpipe is checking
window_name
and not
app_name
. Safari's
app_name
is just
"Safari"
, so the filter on
"Boosteroid"
may not be hitting anything.
You could also try adding
"Safari"
to
ignored_windows
entirely, though that's a blunt instrument if you use Safari for other things.
After editing
config.json
, make sure to
restart Screenpipe
fully for the change to take effect.
The query above will tell you exactly what string to add.
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Error: in prepare, no such column: created_at
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Error: in prepare, no such column: created_at
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
Show more
15:50
Retry
Edit
Copy
The
ocr_text
table uses a different timestamp column. Try:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;"
If you're unsure of the column names, check the schema first:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
".schema ocr_text"
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;"
Error: in prepare, no such column: timestamp
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite ".schema ocr_text"
CREATE TABLE IF NOT EXISTS "ocr_text" (
frame_id INTEGER NOT NULL,
text TEXT NOT NULL,
text_json TEXT,
app_name TEXT NOT NULL DEFAULT '',
ocr_engine TEXT NOT NULL DEFAULT 'unknown'
, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);
CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);
CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
Show more
16:10
Retry
Edit
Copy
No timestamp on
ocr_text
directly — it joins via
frame_id
to the
frames
table. Try:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT o.app_name, o.window_name FROM ocr_text o JOIN frames f ON o.frame_id = f.id WHERE o.app_name LIKE '%Safari%' OR o.window_name LIKE '%Boosteroid%' ORDER BY f.id DESC LIMIT 20;"
Or just get distinct values without ordering by time:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;"
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;"
Error: in prepare, no such column: timestamp
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY timestamp DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite ".schema ocr_text"
CREATE TABLE IF NOT EXISTS "ocr_text" (
frame_id INTEGER NOT NULL,
text TEXT NOT NULL,
text_json TEXT,
app_name TEXT NOT NULL DEFAULT '',
ocr_engine TEXT NOT NULL DEFAULT 'unknown'
, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);
CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);
CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
Show more
16:27
Retry
Edit
Copy
Run the second query (no ORDER BY):
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;"
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT DISTINCT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' LIMIT 20;"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
16:36
Retry
Edit
Copy
Empty result — Boosteroid isn't being captured via Safari's window name. It might be running in a different browser or as a PWA. Let's cast a wider net:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' OR app_name LIKE '%Boosteroid%' OR app_name LIKE '%Chrome%' OR app_name LIKE '%Firefox%' OR app_name LIKE '%Arc%' OR app_name LIKE '%Brave%' OR app_name LIKE '%Vivaldi%' LIMIT 50;"
And separately, check what apps are being recorded at all:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT DISTINCT app_name FROM ocr_text LIMIT 50;"
That second query will show you exactly what Screenpipe is capturing, and you can spot which app Boosteroid is running under.
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' OR app_name LIKE '%Boosteroid%' OR app_name LIKE '%Chrome%' OR app_name LIKE '%Firefox%' OR app_name LIKE '%Arc%' OR app_name LIKE '%Brave%' OR app_name LIKE '%Vivaldi%' LIMIT 50;"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT DISTINCT app_name FROM ocr_text LIMIT 50;"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
16:36
Retry
Edit
Copy
The DB is completely empty — no OCR data at all. This means Screenpipe isn't recording anything currently, or the DB you're querying is not the active one.
Check a few things:
1. Is Screenpipe actually running?
Copy to clipboard
bash
pgrep -la screenpipe
2. Is this the right DB?
Copy to clipboard
bash
ls
-lh ~/.screenpipe/db.sqlite
# Check if there are other DB files
find
~ -name
"db.sqlite"
2
>
/dev/null
3. Check DB size — if it's tiny, it's empty:
Copy to clipboard
bash
du
-sh ~/.screenpipe/db.sqlite
4. Check frames table too:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT COUNT(*) FROM frames;"...
|
NULL
|
|
50868
|
1093
|
42
|
2026-04-17T15:33:45.261806+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776440025261_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp-zshInh100% <478Fri 17 Apr 18:33:44T*1* Review screenp...• X6ec2-user@ip-10-...• ₴7ec2-user@ip-10-...• 88DOCKER- ₴81DEV (docker)APP (-zsh)|X3-zsh-zsh• ₴53.6G/Users/lukas/.screenpipe/db.sqliteINFO: archive.dbdoes not exist yet - will be createdon firstsync[2026-04-17 18:09:41]ISSSSsssssssssssss=:====[2026-04-17 18:09:41]Screenpipe sync starting for: 2026-04-14[2026-04-17 18:09:41]=====[+00m00s] • Preflight checksSource DB:NAS mount:Archive DB:OK(3.6G)OK/Volumes/Test/screenpipewill be created[+00m00s] • Counting source rows for 2026-04-14frames:elements:ui_events:ocr_text:meetings:10733695969105428206[+00m00s] • Initialising tables, indexes, FTScreating tablescreating indexescreating FTS tables• 0mb2s• Om03s• 0m01s[+00m06s] • Syncing data for 2026-04-14video_chunks• 0m01sframes (10733 rows)• 8m46socr_text (8206 rows)• 9m50sui_events (10542 rows)• Om06selements (695969 rows):. zsh: terminated~/.screenpipe/screenpipe_sync.sh 2026-04-14lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14OK: NASmountedOK:Source DBexists3.6G/Users/lukas/.screenpipe/db.sqliteOK: archive.db exists687M/Volumes/Test/screenpipe/archive.db17 tables[2026-04-17 18:33:18][2026-04-17 18:33:18]Screenpipe sync starting for: 2026-04-14[2026-04-17 18:33:18]:====|=====[+00m00s] • Preflight checksSource DB:OKNAS mount:OK(3.6G)/Volumes/Test/screenpipe[2026-04-17 18:33:19] Date 2026-04-14 already has 10733 frames in archive - skippingukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ U...
|
NULL
|
8087547896453206730
|
NULL
|
app_switch
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp-zshInh100% <478Fri 17 Apr 18:33:44T*1* Review screenp...• X6ec2-user@ip-10-...• ₴7ec2-user@ip-10-...• 88DOCKER- ₴81DEV (docker)APP (-zsh)|X3-zsh-zsh• ₴53.6G/Users/lukas/.screenpipe/db.sqliteINFO: archive.dbdoes not exist yet - will be createdon firstsync[2026-04-17 18:09:41]ISSSSsssssssssssss=:====[2026-04-17 18:09:41]Screenpipe sync starting for: 2026-04-14[2026-04-17 18:09:41]=====[+00m00s] • Preflight checksSource DB:NAS mount:Archive DB:OK(3.6G)OK/Volumes/Test/screenpipewill be created[+00m00s] • Counting source rows for 2026-04-14frames:elements:ui_events:ocr_text:meetings:10733695969105428206[+00m00s] • Initialising tables, indexes, FTScreating tablescreating indexescreating FTS tables• 0mb2s• Om03s• 0m01s[+00m06s] • Syncing data for 2026-04-14video_chunks• 0m01sframes (10733 rows)• 8m46socr_text (8206 rows)• 9m50sui_events (10542 rows)• Om06selements (695969 rows):. zsh: terminated~/.screenpipe/screenpipe_sync.sh 2026-04-14lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14OK: NASmountedOK:Source DBexists3.6G/Users/lukas/.screenpipe/db.sqliteOK: archive.db exists687M/Volumes/Test/screenpipe/archive.db17 tables[2026-04-17 18:33:18][2026-04-17 18:33:18]Screenpipe sync starting for: 2026-04-14[2026-04-17 18:33:18]:====|=====[+00m00s] • Preflight checksSource DB:OKNAS mount:OK(3.6G)/Volumes/Test/screenpipe[2026-04-17 18:33:19] Date 2026-04-14 already has 10733 frames in archive - skippingukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ U...
|
NULL
|
|
50869
|
1094
|
32
|
2026-04-17T15:33:45.225463+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776440025225_m2.jpg...
|
iTerm2
|
NULL
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
ClaudeFileEditViewWindowHelp...Boosteroid still re ClaudeFileEditViewWindowHelp...Boosteroid still recording despite ignored windows setting0, Chat+ New chat5 Projectse Customize8u ArtifactsBulgarian citizenship application processDawarich location tracking projectBoosteroid still recording despite ignorecMissing JavaScript promise in authorizatLinux SQLite Ul for NASClaude API 500 internal server errorScreenpipe query capabilities and usageeoru comoatolv wiunvac miniano siUnderstanaing openkouter ArlgalewaScreenpipe 14-day retention explainedReddit homepage feed overviewDocker container not visible in consoleDIA Drowser KAM contigurationScreenpipe company backgroundDSK Bank Bulgaria secure investing explaoullon2 a como crensve oersonainomdImporting Google Timeline data to Owntrenromacast remora volume bulttans notiScreenpipe free version guideSelf-hosted LLM alternatives to Claude SScreenpipe database query setupRunning screenpipe for freegive mie estimates based on what you haveBased on what we know:Completed:• frames: 8m46s for 10,733 rows = ~49ms/row → 110MB writtenRunning now:• ocr_text: 8,206 rows x 49ms = ~6-7 min (similar row size ~36KB)Still to come:• ui_events: 10,542 rows x but tiny (163 bytes/row) → ~1-2 min• elements: 695,969 rows x 142 bytes/row → similar total bytes to frames → ~8-10 min• meetings: 0 rows → instant• FTS (elements_fts): 695k rows but text only → ~5-8 min• FTS (frames_fts): 10k rows → ~1 min• Verify: ~1 minRough total estimate: ~35-40 min for 2026-04-14.For yesterday (2026-04-15) with 886k elements it'll be longer - probably 45-60 min.At 3am via cron that's fine. The ETA estimator in the script will calibrate itself from actualmeasured speeds each run and show something like:elements (695969 rows)elapsed 3m12s ETA ~7m remainingLet it finish and we'll have real numbers for all tables.Updated to 1.3109.0Ke auncho aooyRelaunch^ LuKas KovallkSonnet 40 VClauae is Al ana can make mistakes. rlease double-cneck responses.libdA100% C•Fri 17 Apr 18:33:44CopyScreenpipe sync • SHsqlite3 "$DB_SRC" <<< "$sql" &local pid=$!local spin=[PASSWORD] aaa88'8local i=0while kill -0 "$pid" 2>/dev/null; doprintf "\r%-36s %s " "$label" "${spin[$1]}"i=$(( (1 + 1) % 10 ))sleep 0.2conewait "spid'local dur=$(( $(date +%) - start ))printf "\r%-36s v %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"DAUT ARGUMENIN1T L"921:-5" = "today" J; therARGE DATTESdate +%y-/m-%0Xelif [ -n "$51:-3" 1: thenLARGEI DAIL-"S1"if ! [[ "$TARGET_DATE" =~ ^[0-9]{43- [0-9]{23-[0-9](23$ ]]; thenecho "ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday."exit 1fielseTARGET_DATE=$(date -v-1d +%Y-%m-%d)10g10g "Screenpipe sync starting for: $TARGET_DATE"1ogFRcrLiohlstep "Preflight checks"if [ ! -f "$DB_SRC" ]; then10g "ERROR: Source DB not found at $DB_SRC"; exit 1printf"%-Dos %s(%s)\n" "Source DB:" "OK" "$(du -sh "$DB SRC" | cut -f1)"if [ ! -d "$NAS_MOUNT" ]; ther10g "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1printf "%-20s %s\n" "NAS mount:" "OK$NAS_MOUNT"if [ -f "$NAS_DB" ]; thenEXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';" 2>/dev/nu11 || echo "Q")if [ "$EXISTING"-gt "0" ; then10g "Date STARGET_DATE already has $EXISTING frames in archive - skipping"exit oprintf "elseprintf"%-20s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"%-20s %s\n" "Archive DB:" "will be created"100101102103COUNT SOURCE ROWSstep "Counting source rows for $TARGET_DATE"...
|
NULL
|
-6992655041382388376
|
NULL
|
app_switch
|
ocr
|
NULL
|
ClaudeFileEditViewWindowHelp...Boosteroid still re ClaudeFileEditViewWindowHelp...Boosteroid still recording despite ignored windows setting0, Chat+ New chat5 Projectse Customize8u ArtifactsBulgarian citizenship application processDawarich location tracking projectBoosteroid still recording despite ignorecMissing JavaScript promise in authorizatLinux SQLite Ul for NASClaude API 500 internal server errorScreenpipe query capabilities and usageeoru comoatolv wiunvac miniano siUnderstanaing openkouter ArlgalewaScreenpipe 14-day retention explainedReddit homepage feed overviewDocker container not visible in consoleDIA Drowser KAM contigurationScreenpipe company backgroundDSK Bank Bulgaria secure investing explaoullon2 a como crensve oersonainomdImporting Google Timeline data to Owntrenromacast remora volume bulttans notiScreenpipe free version guideSelf-hosted LLM alternatives to Claude SScreenpipe database query setupRunning screenpipe for freegive mie estimates based on what you haveBased on what we know:Completed:• frames: 8m46s for 10,733 rows = ~49ms/row → 110MB writtenRunning now:• ocr_text: 8,206 rows x 49ms = ~6-7 min (similar row size ~36KB)Still to come:• ui_events: 10,542 rows x but tiny (163 bytes/row) → ~1-2 min• elements: 695,969 rows x 142 bytes/row → similar total bytes to frames → ~8-10 min• meetings: 0 rows → instant• FTS (elements_fts): 695k rows but text only → ~5-8 min• FTS (frames_fts): 10k rows → ~1 min• Verify: ~1 minRough total estimate: ~35-40 min for 2026-04-14.For yesterday (2026-04-15) with 886k elements it'll be longer - probably 45-60 min.At 3am via cron that's fine. The ETA estimator in the script will calibrate itself from actualmeasured speeds each run and show something like:elements (695969 rows)elapsed 3m12s ETA ~7m remainingLet it finish and we'll have real numbers for all tables.Updated to 1.3109.0Ke auncho aooyRelaunch^ LuKas KovallkSonnet 40 VClauae is Al ana can make mistakes. rlease double-cneck responses.libdA100% C•Fri 17 Apr 18:33:44CopyScreenpipe sync • SHsqlite3 "$DB_SRC" <<< "$sql" &local pid=$!local spin=[PASSWORD] aaa88'8local i=0while kill -0 "$pid" 2>/dev/null; doprintf "\r%-36s %s " "$label" "${spin[$1]}"i=$(( (1 + 1) % 10 ))sleep 0.2conewait "spid'local dur=$(( $(date +%) - start ))printf "\r%-36s v %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"DAUT ARGUMENIN1T L"921:-5" = "today" J; therARGE DATTESdate +%y-/m-%0Xelif [ -n "$51:-3" 1: thenLARGEI DAIL-"S1"if ! [[ "$TARGET_DATE" =~ ^[0-9]{43- [0-9]{23-[0-9](23$ ]]; thenecho "ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday."exit 1fielseTARGET_DATE=$(date -v-1d +%Y-%m-%d)10g10g "Screenpipe sync starting for: $TARGET_DATE"1ogFRcrLiohlstep "Preflight checks"if [ ! -f "$DB_SRC" ]; then10g "ERROR: Source DB not found at $DB_SRC"; exit 1printf"%-Dos %s(%s)\n" "Source DB:" "OK" "$(du -sh "$DB SRC" | cut -f1)"if [ ! -d "$NAS_MOUNT" ]; ther10g "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1printf "%-20s %s\n" "NAS mount:" "OK$NAS_MOUNT"if [ -f "$NAS_DB" ]; thenEXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';" 2>/dev/nu11 || echo "Q")if [ "$EXISTING"-gt "0" ; then10g "Date STARGET_DATE already has $EXISTING frames in archive - skipping"exit oprintf "elseprintf"%-20s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"%-20s %s\n" "Archive DB:" "will be created"100101102103COUNT SOURCE ROWSstep "Counting source rows for $TARGET_DATE"...
|
NULL
|
|
50871
|
1093
|
44
|
2026-04-17T15:33:47.970079+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776440027970_m1.jpg...
|
Finder
|
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Term2ShellEditViewSessionScriptsProfilesWindowHelp Term2ShellEditViewSessionScriptsProfilesWindowHelpTO lo100% C-zshDOCKER881DEV (docker)APP (-zsh)X33.6G/Users/lukas/.screenpipe/db.sqliteINFO: archive.dbdoesnot exist yet- will be createdon firstsync[2026-04-17 18:09:41]===================:====[2026-04-17 18:09:41]Screenpipe sync starting for: 2026-04-14[2026-04-17 18:09:41]:====[+00m00s] • Preflight checksSource DB:NAS mount:Archive DB:OKOK(3.6G)/Volumes/Test/screenpipewill be created[+00m00s] • Counting source rows for 2026-04-14frames:elements:ul_events:ocr_text:meetings:107336959691054282060-zsh-zsh• ₴85* Review screenp...• X6ec2-user@ip-10-...• [EMAIL] 17 Apr 18:33:471₴81O ₴8[+00m$11ng[+00m06s] » Syncing data for2026-04-14video_chunksOm01sFinderframes (10733 rows)8m46socr_text (8206 rows)• 9m50sui_events (10542 rows)• Om06selements (695969 rows):. zsh: terminated~/.screenpipe/screenpipe_sync.sh 2026-04-14lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14OK: NASmountedОK:Source DBexists3.6G/Users/lukas/.screenpipe/db.sqliteOK: archive.dbexists687MNolumes/Test/screenpipe/archive.db17 tables[2026-04-17 18:33:18][2026-04-17 18:33:18][2026-04-17 18:33:18]Screenpipe sync starting for:2026-04-14=====[+00m00s] • Preflight checksSource DB:OKNAS mount:OK(3.6G)/Volumes/Test/screenpipe[2026-04-17 18:33:19] Date 2026-04-14 already has 10733 frames in archive - skippingukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ UNloll...
|
NULL
|
-2239616942129252051
|
NULL
|
app_switch
|
ocr
|
NULL
|
Term2ShellEditViewSessionScriptsProfilesWindowHelp Term2ShellEditViewSessionScriptsProfilesWindowHelpTO lo100% C-zshDOCKER881DEV (docker)APP (-zsh)X33.6G/Users/lukas/.screenpipe/db.sqliteINFO: archive.dbdoesnot exist yet- will be createdon firstsync[2026-04-17 18:09:41]===================:====[2026-04-17 18:09:41]Screenpipe sync starting for: 2026-04-14[2026-04-17 18:09:41]:====[+00m00s] • Preflight checksSource DB:NAS mount:Archive DB:OKOK(3.6G)/Volumes/Test/screenpipewill be created[+00m00s] • Counting source rows for 2026-04-14frames:elements:ul_events:ocr_text:meetings:107336959691054282060-zsh-zsh• ₴85* Review screenp...• X6ec2-user@ip-10-...• [EMAIL] 17 Apr 18:33:471₴81O ₴8[+00m$11ng[+00m06s] » Syncing data for2026-04-14video_chunksOm01sFinderframes (10733 rows)8m46socr_text (8206 rows)• 9m50sui_events (10542 rows)• Om06selements (695969 rows):. zsh: terminated~/.screenpipe/screenpipe_sync.sh 2026-04-14lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14OK: NASmountedОK:Source DBexists3.6G/Users/lukas/.screenpipe/db.sqliteOK: archive.dbexists687MNolumes/Test/screenpipe/archive.db17 tables[2026-04-17 18:33:18][2026-04-17 18:33:18][2026-04-17 18:33:18]Screenpipe sync starting for:2026-04-14=====[+00m00s] • Preflight checksSource DB:OKNAS mount:OK(3.6G)/Volumes/Test/screenpipe[2026-04-17 18:33:19] Date 2026-04-14 already has 10733 frames in archive - skippingukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ UNloll...
|
NULL
|
|
50872
|
1094
|
33
|
2026-04-17T15:33:47.981862+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776440027981_m2.jpg...
|
Finder
|
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
caude0, Chat+ New chat5 Projectse Customize8u Arti caude0, Chat+ New chat5 Projectse Customize8u ArtifactsBulgarian citizenship application processDawarich location tracking projectBoosteroid still recording despite ignorecMissing JavaScript promise in authorizatLinux SQLite Ul for NASClaude API 500 internal server errorScreenpipe query capabilities and usageeoru comoatolv wiunvac miniano siUnderstanaing openkouter Arl galewaScreenpipe 14-day retention explainedReddit homepage feed overviewDocker container not visible in consoleDIA Drowser KAM contigurationScreenpipe company backgroundDSK Bank Bulgaria secure investing explaoullon2 a como crensve oersonainomdImporting Google Timeline data to Owntrenromacast remora volume bulttans notiScreenpipe free version guideSelf-hosted LLM alternatives to Claude SScreenpipe database query setupRunning screenpipe for freeWindovHelpBoosteroid still recording despite ignored windows settinggive mie estimates based on what you haveBased on what we know:Completed:• frames: 8m46s for 10,733 rows = ~49ms/row → 110MB writtenRunning now:• ocr_text: 8,206 rows x 49ms = ~6-7 min (similar row size ~36KB)Still to come:• ui_events: 10,542 rows x but tiny (163 bytes/row) → ~1-2 min• elements: 695,969 rows x 142 bytes/row → similar total bytes to frames → ~8-10 min• meetings: 0 rows → instant• FTS (elements_fts): 695k rows but text only → ~5-8 min• FTS (frames_fts): 10k rows → ~1 min• Verify: ~1 minRough total estimate: ~35-40 min for 2026-04-14.For yesterday (2026-04-15) with 886k elements it'll be longer - probably 45-60 min.At 3am via cron that's fine. The ETA estimator in the script will calibrate itself from actualmeasured speeds each run and show something like:elements (695969 rows)elapsed 3m12s ETA ~7m remainingLet it finish and we'll have real numbers for all tables.Updated to 1.3109.0Ke auncho aooyRelaunch^ LuKas KovallkSonnet 40VClauae is Al ana can make mistakes. rlease double-cneck responses.‹$0100% CFri 17 Apr 18:33:47CopyScreenpipe sync • SHsqlite3 "$DB_SRC" <<< "$sql" &local pid=$!local spin=[PASSWORD] i=0while kill -0 "$pid" 2>/dev/null; doprintf "\r%-36s %s " "$label" "${spin[$1]}"i=$(( (1 + 1) % 10 ))sleep 0.2conewait "spid'local dur=s(( $(date +%s) - start ))printf "\r%-36s v %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"DAUT ARGUMENIN1T L"921:-5" = "today" J; therARGE DATTES date +%y-/m-/dxelif [ -n "$51:-3" 1: thenLARGEI DAIL-"S1"if ! [[ "$TARGET_DATE" =~ ^[0-9]{43- [0-9](23-[0-9](23$ ]]; thenecho "ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday."exit 1fielseTARGET_DATE=$(date -v-1d +%Y-%m-%d)10g10g "Screenpipe sync starting for: $TARGET_DATE"1ogFRcrLiohlstep "Preflight checks"if [ ! -f "$DB_SRC" ]; then10g "ERROR: Source DB not found at $DB_SRC"; exit 1printf"%-Dos %s(%s) \n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"if [ ! -d "$NAS_MOUNT" ]; ther10g "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1printf "%-20s %s\n" "NAS mount:" "OK$NAS_MOUNT"if [ -f "$NAS_DB" ]; thenEXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';" 2>/dev/nu11 || echo "Q")if [ "$EXISTING"-gt "0" ; then10g "Date STARGET_DATE already has $EXISTING frames in archive - skipping"exit oprintf "elseprintf"%-20s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"%-20s %s\n" "Archive DB:" "will be created"100101102103COUNT SOURCE ROWSstep "Counting source rows for $TARGET_DATE"...
|
NULL
|
6212137661796237847
|
NULL
|
app_switch
|
ocr
|
NULL
|
caude0, Chat+ New chat5 Projectse Customize8u Arti caude0, Chat+ New chat5 Projectse Customize8u ArtifactsBulgarian citizenship application processDawarich location tracking projectBoosteroid still recording despite ignorecMissing JavaScript promise in authorizatLinux SQLite Ul for NASClaude API 500 internal server errorScreenpipe query capabilities and usageeoru comoatolv wiunvac miniano siUnderstanaing openkouter Arl galewaScreenpipe 14-day retention explainedReddit homepage feed overviewDocker container not visible in consoleDIA Drowser KAM contigurationScreenpipe company backgroundDSK Bank Bulgaria secure investing explaoullon2 a como crensve oersonainomdImporting Google Timeline data to Owntrenromacast remora volume bulttans notiScreenpipe free version guideSelf-hosted LLM alternatives to Claude SScreenpipe database query setupRunning screenpipe for freeWindovHelpBoosteroid still recording despite ignored windows settinggive mie estimates based on what you haveBased on what we know:Completed:• frames: 8m46s for 10,733 rows = ~49ms/row → 110MB writtenRunning now:• ocr_text: 8,206 rows x 49ms = ~6-7 min (similar row size ~36KB)Still to come:• ui_events: 10,542 rows x but tiny (163 bytes/row) → ~1-2 min• elements: 695,969 rows x 142 bytes/row → similar total bytes to frames → ~8-10 min• meetings: 0 rows → instant• FTS (elements_fts): 695k rows but text only → ~5-8 min• FTS (frames_fts): 10k rows → ~1 min• Verify: ~1 minRough total estimate: ~35-40 min for 2026-04-14.For yesterday (2026-04-15) with 886k elements it'll be longer - probably 45-60 min.At 3am via cron that's fine. The ETA estimator in the script will calibrate itself from actualmeasured speeds each run and show something like:elements (695969 rows)elapsed 3m12s ETA ~7m remainingLet it finish and we'll have real numbers for all tables.Updated to 1.3109.0Ke auncho aooyRelaunch^ LuKas KovallkSonnet 40VClauae is Al ana can make mistakes. rlease double-cneck responses.‹$0100% CFri 17 Apr 18:33:47CopyScreenpipe sync • SHsqlite3 "$DB_SRC" <<< "$sql" &local pid=$!local spin=[PASSWORD] i=0while kill -0 "$pid" 2>/dev/null; doprintf "\r%-36s %s " "$label" "${spin[$1]}"i=$(( (1 + 1) % 10 ))sleep 0.2conewait "spid'local dur=s(( $(date +%s) - start ))printf "\r%-36s v %dm%02ds\n" "$label" "$(( dur / 60 ))" "$(( dur % 60 ))" | tee -a "$LOG_FILE"DAUT ARGUMENIN1T L"921:-5" = "today" J; therARGE DATTES date +%y-/m-/dxelif [ -n "$51:-3" 1: thenLARGEI DAIL-"S1"if ! [[ "$TARGET_DATE" =~ ^[0-9]{43- [0-9](23-[0-9](23$ ]]; thenecho "ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for yesterday."exit 1fielseTARGET_DATE=$(date -v-1d +%Y-%m-%d)10g10g "Screenpipe sync starting for: $TARGET_DATE"1ogFRcrLiohlstep "Preflight checks"if [ ! -f "$DB_SRC" ]; then10g "ERROR: Source DB not found at $DB_SRC"; exit 1printf"%-Dos %s(%s) \n" "Source DB:" "OK" "$(du -sh "$DB_SRC" | cut -f1)"if [ ! -d "$NAS_MOUNT" ]; ther10g "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1printf "%-20s %s\n" "NAS mount:" "OK$NAS_MOUNT"if [ -f "$NAS_DB" ]; thenEXISTING=$(sqlite3 "$NAS_DB" "SELECT COUNT(*) FROM frames WHERE date(timestamp) = '$TARGET_DATE';" 2>/dev/nu11 || echo "Q")if [ "$EXISTING"-gt "0" ; then10g "Date STARGET_DATE already has $EXISTING frames in archive - skipping"exit oprintf "elseprintf"%-20s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"%-20s %s\n" "Archive DB:" "will be created"100101102103COUNT SOURCE ROWSstep "Counting source rows for $TARGET_DATE"...
|
NULL
|
|
50892
|
1093
|
54
|
2026-04-17T15:34:59.809868+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776440099809_m1.jpg...
|
Claude
|
Claude
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Collapse sidebar
Search
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Customize
Artifacts
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
More options for Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
More options for Linux SQLite UI for NAS
Claude API 500 internal server error
More options for Claude API 500 internal server error
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
More options for eGPU compatibility with Mac mini and Studio
Understanding OpenRouter API gateway
More options for Understanding OpenRouter API gateway
Screenpipe 14-day retention explained
More options for Screenpipe 14-day retention explained
Reddit homepage feed overview
More options for Reddit homepage feed overview
Docker container not visible in console
More options for Docker container not visible in console
DIA browser RAM configuration
More options for DIA browser RAM configuration
Screenpipe company background
More options for Screenpipe company background
DSK Bank Bulgaria secure investing explained
More options for DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
More options for Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
More options for Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
More options for Chromecast remote volume buttons not working
Screenpipe free version guide
More options for Screenpipe free version guide
Self-hosted LLM alternatives to Claude Sonnet
More options for Self-hosted LLM alternatives to Claude Sonnet
Screenpipe database query setup
More options for Screenpipe database query setup
Running screenpipe for free
More options for Running screenpipe for free
Updated to 1.3109.0
Relaunch to apply
Relaunch
Lukas Kovalik
Lukas Kovalik
Get apps and extensions
Boosteroid still recording despite ignored windows setting
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Close
Share chat
Screenpipe I have set Boosteroid to ignored windows but it is still being recorded. lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cat config.json
{
"disable_audio": true,
"monitor_ids": ["Display 1_1440x900_0,0", "Display 2_3008x1253_-813,-1253"],
"ignored_windows": [
"1Password",
"Keychain Access",
"Bitwarden",
"System Preferences",
"System Settings",
"zoom.us",
"HBO Max",
"Screenpipe Dashboard",
"Boosteroid"
]
}
Show more
15:40
Retry
Edit
Copy
The
ignored_windows
filter in Screenpipe matches against window
titles
, not app names. The issue is likely that Boosteroid runs in a browser (Safari), so the window title is something like
"Boosteroid - Play PC Games on any device"
or the game title — not just "Boosteroid".
To find the exact window title being captured, query the DB:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Or if you use the
spq
alias:
Copy to clipboard
bash
spq
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Once you see the exact
window_name
value, add that string to
ignored_windows
. For example it might need to be:
Copy to clipboard
json
"Boosteroid - Play PC Games on any device"
A few other things worth knowing:
The match is
substring-based
, so adding
"Boosteroid"
should
work if the window name contains that string — but only if Screenpipe is checking
window_name
and not
app_name
. Safari's
app_name
is just
"Safari"
, so the filter on...
|
[{"role":"AXLink","text":& [{"role":"AXLink","text":"Skip to content","depth":14,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Skip to content","depth":15,"role_description":"text"},{"role":"AXStaticText","text":"Click to collapse","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"⌘B","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"Drag to resize","depth":16,"role_description":"text"},{"role":"AXButton","text":"Collapse sidebar","depth":15,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search","depth":15,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cowork","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New chat ⌘N","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"New chat","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"⌘N","depth":18,"role_description":"text"},{"role":"AXButton","text":"Projects","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Artifacts","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pinned","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Bulgarian citizenship application process for EU residents","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Bulgarian citizenship application process for EU residents","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Dawarich location tracking project","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Dawarich location tracking project","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Recents","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"View all","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Boosteroid still recording despite ignored windows setting","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Boosteroid still recording despite ignored windows setting","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Missing JavaScript promise in authorization response","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Missing JavaScript promise in authorization response","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Linux SQLite UI for NAS","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Linux SQLite UI for NAS","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Claude API 500 internal server error","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Claude API 500 internal server error","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe query capabilities and usage","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe query capabilities and usage","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"eGPU compatibility with Mac mini and Studio","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for eGPU compatibility with Mac mini and Studio","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Understanding OpenRouter API gateway","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Understanding OpenRouter API gateway","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe 14-day retention explained","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe 14-day retention explained","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reddit homepage feed overview","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Reddit homepage feed overview","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Docker container not visible in console","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Docker container not visible in console","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"DIA browser RAM configuration","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for DIA browser RAM configuration","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe company background","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe company background","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"DSK Bank Bulgaria secure investing explained","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for DSK Bank Bulgaria secure investing explained","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Building a comprehensive personal homelab system","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Building a comprehensive personal homelab system","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Importing Google Timeline data to Owntracks","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Importing Google Timeline data to Owntracks","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chromecast remote volume buttons not working","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Chromecast remote volume buttons not working","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe free version guide","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe free version guide","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Self-hosted LLM alternatives to Claude Sonnet","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Self-hosted LLM alternatives to Claude Sonnet","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe database query setup","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe database query setup","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Running screenpipe for free","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Running screenpipe for free","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Updated to 1.3109.0","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"Relaunch to apply","depth":16,"role_description":"text"},{"role":"AXButton","text":"Relaunch","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Lukas Kovalik","depth":16,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"role_description":"text"},{"role":"AXButton","text":"Get apps and extensions","depth":15,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Boosteroid still recording despite ignored windows setting","depth":20,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Boosteroid still recording despite ignored windows setting","depth":22,"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Boosteroid still recording despite ignored windows setting","depth":20,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share chat","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe I have set Boosteroid to ignored windows but it is still being recorded. lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cat config.json\n{\n \"disable_audio\": true,\n \"monitor_ids\": [\"Display 1_1440x900_0,0\", \"Display 2_3008x1253_-813,-1253\"],\n \"ignored_windows\": [\n \"1Password\",\n \"Keychain Access\",\n \"Bitwarden\",\n \"System Preferences\",\n \"System Settings\",\n \"zoom.us\",\n \"HBO Max\",\n \"Screenpipe Dashboard\",\n \"Boosteroid\"\n ]\n}","depth":25,"role_description":"text"},{"role":"AXButton","text":"Show more","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"15:40","depth":23,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":23,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"The","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ignored_windows","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"filter in Screenpipe matches against window","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"titles","depth":25,"role_description":"text"},{"role":"AXStaticText","text":", not app names. The issue is likely that Boosteroid runs in a browser (Safari), so the window title is something like","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid - Play PC Games on any device\"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"or the game title — not just \"Boosteroid\".","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"To find the exact window title being captured, query the DB:","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"Or if you use the","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"spq","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"alias:","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"spq","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' ORDER BY created_at DESC LIMIT 20;\"","depth":27,"role_description":"text"},{"role":"AXStaticText","text":"Once you see the exact","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"window_name","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"value, add that string to","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ignored_windows","depth":25,"role_description":"text"},{"role":"AXStaticText","text":". For example it might need to be:","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"json","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid - Play PC Games on any device\"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"A few other things worth knowing:","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"The match is","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"substring-based","depth":26,"role_description":"text"},{"role":"AXStaticText","text":", so adding","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid\"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"should","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"work if the window name contains that string — but only if Screenpipe is checking","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"window_name","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"and not","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"app_name","depth":26,"role_description":"text"},{"role":"AXStaticText","text":". Safari's","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"app_name","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"is just","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"Safari\"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":", so the filter on","depth":25,"role_description":"text"}]...
|
5602138308367637014
|
-4601030523039524676
|
app_switch
|
accessibility
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Collapse sidebar
Search
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Customize
Artifacts
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
More options for Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
More options for Linux SQLite UI for NAS
Claude API 500 internal server error
More options for Claude API 500 internal server error
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
More options for eGPU compatibility with Mac mini and Studio
Understanding OpenRouter API gateway
More options for Understanding OpenRouter API gateway
Screenpipe 14-day retention explained
More options for Screenpipe 14-day retention explained
Reddit homepage feed overview
More options for Reddit homepage feed overview
Docker container not visible in console
More options for Docker container not visible in console
DIA browser RAM configuration
More options for DIA browser RAM configuration
Screenpipe company background
More options for Screenpipe company background
DSK Bank Bulgaria secure investing explained
More options for DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
More options for Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
More options for Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
More options for Chromecast remote volume buttons not working
Screenpipe free version guide
More options for Screenpipe free version guide
Self-hosted LLM alternatives to Claude Sonnet
More options for Self-hosted LLM alternatives to Claude Sonnet
Screenpipe database query setup
More options for Screenpipe database query setup
Running screenpipe for free
More options for Running screenpipe for free
Updated to 1.3109.0
Relaunch to apply
Relaunch
Lukas Kovalik
Lukas Kovalik
Get apps and extensions
Boosteroid still recording despite ignored windows setting
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Close
Share chat
Screenpipe I have set Boosteroid to ignored windows but it is still being recorded. lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cat config.json
{
"disable_audio": true,
"monitor_ids": ["Display 1_1440x900_0,0", "Display 2_3008x1253_-813,-1253"],
"ignored_windows": [
"1Password",
"Keychain Access",
"Bitwarden",
"System Preferences",
"System Settings",
"zoom.us",
"HBO Max",
"Screenpipe Dashboard",
"Boosteroid"
]
}
Show more
15:40
Retry
Edit
Copy
The
ignored_windows
filter in Screenpipe matches against window
titles
, not app names. The issue is likely that Boosteroid runs in a browser (Safari), so the window title is something like
"Boosteroid - Play PC Games on any device"
or the game title — not just "Boosteroid".
To find the exact window title being captured, query the DB:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Or if you use the
spq
alias:
Copy to clipboard
bash
spq
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Once you see the exact
window_name
value, add that string to
ignored_windows
. For example it might need to be:
Copy to clipboard
json
"Boosteroid - Play PC Games on any device"
A few other things worth knowing:
The match is
substring-based
, so adding
"Boosteroid"
should
work if the window name contains that string — but only if Screenpipe is checking
window_name
and not
app_name
. Safari's
app_name
is just
"Safari"
, so the filter on...
|
NULL
|
|
50893
|
1094
|
44
|
2026-04-17T15:34:59.844398+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776440099844_m2.jpg...
|
Claude
|
Claude
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Collapse sidebar
Search
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Customize
Artifacts
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
More options for Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
More options for Linux SQLite UI for NAS
Claude API 500 internal server error
More options for Claude API 500 internal server error
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
More options for eGPU compatibility with Mac mini and Studio
Understanding OpenRouter API gateway
More options for Understanding OpenRouter API gateway
Screenpipe 14-day retention explained
More options for Screenpipe 14-day retention explained
Reddit homepage feed overview
More options for Reddit homepage feed overview
Docker container not visible in console
More options for Docker container not visible in console
DIA browser RAM configuration
More options for DIA browser RAM configuration
Screenpipe company background
More options for Screenpipe company background
DSK Bank Bulgaria secure investing explained
More options for DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
More options for Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
More options for Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
More options for Chromecast remote volume buttons not working
Screenpipe free version guide
More options for Screenpipe free version guide
Self-hosted LLM alternatives to Claude Sonnet
More options for Self-hosted LLM alternatives to Claude Sonnet
Screenpipe database query setup
More options for Screenpipe database query setup
Running screenpipe for free
More options for Running screenpipe for free
Updated to 1.3109.0
Relaunch to apply
Relaunch
Lukas Kovalik
Lukas Kovalik
Get apps and extensions
Boosteroid still recording despite ignored windows setting
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Close
Share chat
Screenpipe I have set Boosteroid to ignored windows but it is still being recorded. lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cat config.json
{
"disable_audio": true,
"monitor_ids": ["Display 1_1440x900_0,0", "Display 2_3008x1253_-813,-1253"],
"ignored_windows": [
"1Password",
"Keychain Access",
"Bitwarden",
"System Preferences",
"System Settings",
"zoom.us",
"HBO Max",
"Screenpipe Dashboard",
"Boosteroid"
]
}
Show more
15:40
Retry
Edit
Copy
The
ignored_windows
filter in Screenpipe matches against window
titles
, not app names. The issue is likely that Boosteroid runs in a browser (Safari), so the window title is something like
"Boosteroid - Play PC Games on any device"
or the game title — not just "Boosteroid".
To find the exact window title being captured, query the DB:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Or if you use the
spq
alias:
Copy to clipboard
bash
spq
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Once you see the exact
window_name
value, add that string to
ignored_windows
. For example it might need to be:
Copy to clipboard
json
"Boosteroid - Play PC Games on any device"
A few other things worth knowing:
The match is
substring-based
, so adding
"Boosteroid"
should
work if the window name contains that string — but only if Screenpipe is checking
window_name
and not
app_name
. Safari's
app_name
is just
"Safari"
, so the filter on
"Boosteroid"
may not be hitting anything.
You could also try adding
"Safari"
to
ignored_windows
entirely, though that's a blunt instrument if you use Safari for other things.
After editing
config.json
, make sure to
restart Screenpipe
fully for the change to take effect.
The query above will tell you exactly what string to add.
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Error: in prepare, no such column: created_at
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Error: in prepare, no such column: created_at
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
Show more
15:50
Retry
Edit
Copy...
|
[{"role":"AXLink","text":& [{"role":"AXLink","text":"Skip to content","depth":14,"bounds":{"left":0.002734375,"top":0.022222223,"width":0.000390625,"height":0.00069444446},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Skip to content","depth":15,"bounds":{"left":0.002734375,"top":0.022222223,"width":0.044921875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Click to collapse","depth":16,"bounds":{"left":0.1234375,"top":0.74375,"width":0.036328126,"height":0.010416667},"role_description":"text"},{"role":"AXStaticText","text":"⌘B","depth":16,"bounds":{"left":0.16171876,"top":0.74375,"width":0.0078125,"height":0.010416667},"role_description":"text"},{"role":"AXStaticText","text":"Drag to resize","depth":16,"bounds":{"left":0.1234375,"top":0.75416666,"width":0.03046875,"height":0.010416667},"role_description":"text"},{"role":"AXButton","text":"Collapse sidebar","depth":15,"bounds":{"left":0.0359375,"top":0.025694445,"width":0.009375,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search","depth":15,"bounds":{"left":0.0453125,"top":0.025694445,"width":0.009375,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat","depth":16,"bounds":{"left":0.006640625,"top":0.05347222,"width":0.026171874,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cowork","depth":16,"bounds":{"left":0.033203125,"top":0.05347222,"width":0.011328125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":16,"bounds":{"left":0.044921875,"top":0.05347222,"width":0.011328125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New chat ⌘N","depth":16,"bounds":{"left":0.00625,"top":0.07986111,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"New chat","depth":17,"bounds":{"left":0.01796875,"top":0.08263889,"width":0.023046875,"height":0.011805556},"role_description":"text"},{"role":"AXStaticText","text":"⌘N","depth":18,"bounds":{"left":0.09882812,"top":0.083333336,"width":0.008203125,"height":0.010416667},"role_description":"text"},{"role":"AXButton","text":"Projects","depth":16,"bounds":{"left":0.00625,"top":0.09791667,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":16,"bounds":{"left":0.00625,"top":0.11597222,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Artifacts","depth":16,"bounds":{"left":0.00625,"top":0.13402778,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pinned","depth":16,"bounds":{"left":0.00859375,"top":0.16875,"width":0.1,"height":0.011111111},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Bulgarian citizenship application process for EU residents","depth":17,"bounds":{"left":0.00625,"top":0.18333334,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Bulgarian citizenship application process for EU residents","depth":18,"bounds":{"left":0.10078125,"top":0.18611111,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Dawarich location tracking project","depth":17,"bounds":{"left":0.00625,"top":0.20208333,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Dawarich location tracking project","depth":18,"bounds":{"left":0.10078125,"top":0.2048611,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Recents","depth":16,"bounds":{"left":0.00859375,"top":0.22847222,"width":0.076171875,"height":0.011111111},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"View all","depth":16,"bounds":{"left":0.0859375,"top":0.22847222,"width":0.02265625,"height":0.011111111},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Boosteroid still recording despite ignored windows setting","depth":17,"bounds":{"left":0.00625,"top":0.24305555,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Boosteroid still recording despite ignored windows setting","depth":18,"bounds":{"left":0.10078125,"top":0.24583334,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Missing JavaScript promise in authorization response","depth":17,"bounds":{"left":0.00625,"top":0.26180556,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Missing JavaScript promise in authorization response","depth":18,"bounds":{"left":0.10078125,"top":0.26458332,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Linux SQLite UI for NAS","depth":17,"bounds":{"left":0.00625,"top":0.28055555,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Linux SQLite UI for NAS","depth":18,"bounds":{"left":0.10078125,"top":0.28333333,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Claude API 500 internal server error","depth":17,"bounds":{"left":0.00625,"top":0.29930556,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Claude API 500 internal server error","depth":18,"bounds":{"left":0.10078125,"top":0.30208334,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe query capabilities and usage","depth":17,"bounds":{"left":0.00625,"top":0.31805557,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe query capabilities and usage","depth":18,"bounds":{"left":0.10078125,"top":0.32083333,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"eGPU compatibility with Mac mini and Studio","depth":17,"bounds":{"left":0.00625,"top":0.33680555,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for eGPU compatibility with Mac mini and Studio","depth":18,"bounds":{"left":0.10078125,"top":0.33958334,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Understanding OpenRouter API gateway","depth":17,"bounds":{"left":0.00625,"top":0.35555556,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Understanding OpenRouter API gateway","depth":18,"bounds":{"left":0.10078125,"top":0.35833332,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe 14-day retention explained","depth":17,"bounds":{"left":0.00625,"top":0.37430555,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe 14-day retention explained","depth":18,"bounds":{"left":0.10078125,"top":0.37708333,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reddit homepage feed overview","depth":17,"bounds":{"left":0.00625,"top":0.39305556,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Reddit homepage feed overview","depth":18,"bounds":{"left":0.10078125,"top":0.39583334,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Docker container not visible in console","depth":17,"bounds":{"left":0.00625,"top":0.41180557,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Docker container not visible in console","depth":18,"bounds":{"left":0.10078125,"top":0.41458333,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"DIA browser RAM configuration","depth":17,"bounds":{"left":0.00625,"top":0.43055555,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for DIA browser RAM configuration","depth":18,"bounds":{"left":0.10078125,"top":0.43333334,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe company background","depth":17,"bounds":{"left":0.00625,"top":0.44930556,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe company background","depth":18,"bounds":{"left":0.10078125,"top":0.45208332,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"DSK Bank Bulgaria secure investing explained","depth":17,"bounds":{"left":0.00625,"top":0.46805555,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for DSK Bank Bulgaria secure investing explained","depth":18,"bounds":{"left":0.10078125,"top":0.47083333,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Building a comprehensive personal homelab system","depth":17,"bounds":{"left":0.00625,"top":0.48680556,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Building a comprehensive personal homelab system","depth":18,"bounds":{"left":0.10078125,"top":0.48958334,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Importing Google Timeline data to Owntracks","depth":17,"bounds":{"left":0.00625,"top":0.50555557,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Importing Google Timeline data to Owntracks","depth":18,"bounds":{"left":0.10078125,"top":0.5083333,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chromecast remote volume buttons not working","depth":17,"bounds":{"left":0.00625,"top":0.5243056,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Chromecast remote volume buttons not working","depth":18,"bounds":{"left":0.10078125,"top":0.52708334,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe free version guide","depth":17,"bounds":{"left":0.00625,"top":0.54305553,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe free version guide","depth":18,"bounds":{"left":0.10078125,"top":0.54583335,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Self-hosted LLM alternatives to Claude Sonnet","depth":17,"bounds":{"left":0.00625,"top":0.56180555,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Self-hosted LLM alternatives to Claude Sonnet","depth":18,"bounds":{"left":0.10078125,"top":0.56458336,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe database query setup","depth":17,"bounds":{"left":0.00625,"top":0.58055556,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe database query setup","depth":18,"bounds":{"left":0.10078125,"top":0.5833333,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Running screenpipe for free","depth":17,"bounds":{"left":0.00625,"top":0.59930557,"width":0.103125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Running screenpipe for free","depth":18,"bounds":{"left":0.10078125,"top":0.6020833,"width":0.00703125,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Updated to 1.3109.0","depth":16,"bounds":{"left":0.032421876,"top":0.89166665,"width":0.05078125,"height":0.0125},"role_description":"text"},{"role":"AXStaticText","text":"Relaunch to apply","depth":16,"bounds":{"left":0.037890624,"top":0.90625,"width":0.03984375,"height":0.010416667},"role_description":"text"},{"role":"AXButton","text":"Relaunch","depth":16,"bounds":{"left":0.011328125,"top":0.92569447,"width":0.09296875,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Lukas Kovalik","depth":16,"bounds":{"left":0.00625,"top":0.97083336,"width":0.044921875,"height":0.016666668},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"bounds":{"left":0.01796875,"top":0.9736111,"width":0.030078124,"height":0.010416667},"role_description":"text"},{"role":"AXButton","text":"Get apps and extensions","depth":15,"bounds":{"left":0.1,"top":0.97152776,"width":0.009375,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Boosteroid still recording despite ignored windows setting","depth":20,"bounds":{"left":0.121875,"top":0.024305556,"width":0.15703125,"height":0.019444445},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Boosteroid still recording despite ignored windows setting","depth":22,"bounds":{"left":0.125,"top":0.027083334,"width":0.15078124,"height":0.013194445},"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Boosteroid still recording despite ignored windows setting","depth":20,"bounds":{"left":0.27890626,"top":0.024305556,"width":0.011328125,"height":0.019444445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":22,"bounds":{"left":0.52382815,"top":0.022916667,"width":0.0125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share chat","depth":22,"bounds":{"left":0.5378906,"top":0.022916667,"width":0.0125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe I have set Boosteroid to ignored windows but it is still being recorded. lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cat config.json\n{\n \"disable_audio\": true,\n \"monitor_ids\": [\"Display 1_1440x900_0,0\", \"Display 2_3008x1253_-813,-1253\"],\n \"ignored_windows\": [\n \"1Password\",\n \"Keychain Access\",\n \"Bitwarden\",\n \"System Preferences\",\n \"System Settings\",\n \"zoom.us\",\n \"HBO Max\",\n \"Screenpipe Dashboard\",\n \"Boosteroid\"\n ]\n}","depth":25,"bounds":{"left":0.23867187,"top":0.017361112,"width":0.22578125,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Show more","depth":23,"bounds":{"left":0.23867187,"top":0.017361112,"width":0.17421874,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"15:40","depth":23,"bounds":{"left":0.425,"top":0.017361112,"width":0.011328125,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Retry","depth":23,"bounds":{"left":0.43945312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":23,"bounds":{"left":0.4519531,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":23,"bounds":{"left":0.46445313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"The","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"ignored_windows","depth":25,"bounds":{"left":0.20703125,"top":0.017361112,"width":0.05078125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"filter in Screenpipe matches against window","depth":24,"bounds":{"left":0.259375,"top":0.017361112,"width":0.13085938,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"titles","depth":25,"bounds":{"left":0.38984376,"top":0.017361112,"width":0.015625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":", not app names. The issue is likely that Boosteroid runs in a browser (Safari), so the window title is something like","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.27148438,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid - Play PC Games on any device\"","depth":25,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.13007812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"or the game title — not just \"Boosteroid\".","depth":24,"bounds":{"left":0.32226562,"top":0.017361112,"width":0.11835937,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"To find the exact window title being captured, query the DB:","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.17226562,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":27,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.10507812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\"","depth":27,"bounds":{"left":0.3,"top":0.017361112,"width":0.1765625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Or if you use the","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.0484375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"spq","depth":25,"bounds":{"left":0.24257812,"top":0.017361112,"width":0.010546875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"alias:","depth":24,"bounds":{"left":0.2546875,"top":0.017361112,"width":0.01640625,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"spq","depth":27,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.01328125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' ORDER BY created_at DESC LIMIT 20;\"","depth":27,"bounds":{"left":0.20820312,"top":0.017361112,"width":0.26835936,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Once you see the exact","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.06757812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"window_name","depth":25,"bounds":{"left":0.26171875,"top":0.017361112,"width":0.0375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"value, add that string to","depth":24,"bounds":{"left":0.30078125,"top":0.017361112,"width":0.0703125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"ignored_windows","depth":25,"bounds":{"left":0.37265626,"top":0.017361112,"width":0.05078125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":". For example it might need to be:","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.27148438,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":26,"bounds":{"left":0.4609375,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"json","depth":25,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.009375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid - Play PC Games on any device\"","depth":26,"bounds":{"left":0.1953125,"top":0.017361112,"width":0.13789062,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"A few other things worth knowing:","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.10039063,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"The match is","depth":25,"bounds":{"left":0.20507812,"top":0.017361112,"width":0.03828125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"substring-based","depth":26,"bounds":{"left":0.24296875,"top":0.017361112,"width":0.04921875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":", so adding","depth":25,"bounds":{"left":0.29179686,"top":0.017361112,"width":0.032421876,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid\"","depth":26,"bounds":{"left":0.32578126,"top":0.017361112,"width":0.040625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.36796874,"top":0.017361112,"width":0.001953125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"should","depth":26,"bounds":{"left":0.36953124,"top":0.017361112,"width":0.019921875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"work if the window name contains that string — but only if Screenpipe is checking","depth":25,"bounds":{"left":0.20507812,"top":0.017361112,"width":0.25859374,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"window_name","depth":26,"bounds":{"left":0.36992186,"top":0.017361112,"width":0.0375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"and not","depth":25,"bounds":{"left":0.40898436,"top":0.017361112,"width":0.023828125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"app_name","depth":26,"bounds":{"left":0.20703125,"top":0.017361112,"width":0.02734375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":". Safari's","depth":25,"bounds":{"left":0.2359375,"top":0.017361112,"width":0.025390625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"app_name","depth":26,"bounds":{"left":0.26289064,"top":0.017361112,"width":0.02734375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"is just","depth":25,"bounds":{"left":0.29179686,"top":0.017361112,"width":0.01953125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"Safari\"","depth":26,"bounds":{"left":0.31289062,"top":0.017361112,"width":0.02734375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":", so the filter on","depth":25,"bounds":{"left":0.34179688,"top":0.017361112,"width":0.0453125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid\"","depth":26,"bounds":{"left":0.38867188,"top":0.017361112,"width":0.041015625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"may not be hitting anything.","depth":25,"bounds":{"left":0.20507812,"top":0.017361112,"width":0.2511719,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"You could also try adding","depth":25,"bounds":{"left":0.20507812,"top":0.017361112,"width":0.07421875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"Safari\"","depth":26,"bounds":{"left":0.28085938,"top":0.017361112,"width":0.02734375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"to","depth":25,"bounds":{"left":0.30976564,"top":0.017361112,"width":0.00859375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"ignored_windows","depth":26,"bounds":{"left":0.31992188,"top":0.017361112,"width":0.051171876,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"entirely, though that's a blunt instrument if you use Safari for other things.","depth":25,"bounds":{"left":0.20507812,"top":0.017361112,"width":0.25351563,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"After editing","depth":25,"bounds":{"left":0.20507812,"top":0.017361112,"width":0.038671874,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"config.json","depth":26,"bounds":{"left":0.2453125,"top":0.017361112,"width":0.0375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":", make sure to","depth":25,"bounds":{"left":0.284375,"top":0.017361112,"width":0.041015625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"restart Screenpipe","depth":26,"bounds":{"left":0.325,"top":0.017361112,"width":0.055859376,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"fully for the change to take effect.","depth":25,"bounds":{"left":0.20507812,"top":0.017361112,"width":0.25390625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"The query above will tell you exactly what string to add.","depth":24,"bounds":{"left":0.19257812,"top":0.017361112,"width":0.15976563,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy","depth":23,"bounds":{"left":0.18945312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give positive feedback","depth":23,"bounds":{"left":0.20195313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give negative feedback","depth":23,"bounds":{"left":0.21445313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":23,"bounds":{"left":0.22695312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\"\nError: in prepare, no such column: created_at\n ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\n error here ---^\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\"\nError: in prepare, no such column: created_at\n ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\n error here ---^\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $","depth":25,"bounds":{"left":0.23867187,"top":0.017361112,"width":0.2234375,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Show more","depth":23,"bounds":{"left":0.23867187,"top":0.017361112,"width":0.17421874,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"15:50","depth":23,"bounds":{"left":0.425,"top":0.017361112,"width":0.011328125,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Retry","depth":23,"bounds":{"left":0.43945312,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":23,"bounds":{"left":0.4519531,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":23,"bounds":{"left":0.46445313,"top":0.017361112,"width":0.0125,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-1097310441860994553
|
-4022322385764296522
|
app_switch
|
accessibility
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Collapse sidebar
Search
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Customize
Artifacts
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
More options for Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
More options for Linux SQLite UI for NAS
Claude API 500 internal server error
More options for Claude API 500 internal server error
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
More options for eGPU compatibility with Mac mini and Studio
Understanding OpenRouter API gateway
More options for Understanding OpenRouter API gateway
Screenpipe 14-day retention explained
More options for Screenpipe 14-day retention explained
Reddit homepage feed overview
More options for Reddit homepage feed overview
Docker container not visible in console
More options for Docker container not visible in console
DIA browser RAM configuration
More options for DIA browser RAM configuration
Screenpipe company background
More options for Screenpipe company background
DSK Bank Bulgaria secure investing explained
More options for DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
More options for Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
More options for Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
More options for Chromecast remote volume buttons not working
Screenpipe free version guide
More options for Screenpipe free version guide
Self-hosted LLM alternatives to Claude Sonnet
More options for Self-hosted LLM alternatives to Claude Sonnet
Screenpipe database query setup
More options for Screenpipe database query setup
Running screenpipe for free
More options for Running screenpipe for free
Updated to 1.3109.0
Relaunch to apply
Relaunch
Lukas Kovalik
Lukas Kovalik
Get apps and extensions
Boosteroid still recording despite ignored windows setting
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Close
Share chat
Screenpipe I have set Boosteroid to ignored windows but it is still being recorded. lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cat config.json
{
"disable_audio": true,
"monitor_ids": ["Display 1_1440x900_0,0", "Display 2_3008x1253_-813,-1253"],
"ignored_windows": [
"1Password",
"Keychain Access",
"Bitwarden",
"System Preferences",
"System Settings",
"zoom.us",
"HBO Max",
"Screenpipe Dashboard",
"Boosteroid"
]
}
Show more
15:40
Retry
Edit
Copy
The
ignored_windows
filter in Screenpipe matches against window
titles
, not app names. The issue is likely that Boosteroid runs in a browser (Safari), so the window title is something like
"Boosteroid - Play PC Games on any device"
or the game title — not just "Boosteroid".
To find the exact window title being captured, query the DB:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Or if you use the
spq
alias:
Copy to clipboard
bash
spq
"SELECT DISTINCT app_name, window_name FROM ocr_text WHERE window_name LIKE '%Boosteroid%' OR window_name LIKE '%boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Once you see the exact
window_name
value, add that string to
ignored_windows
. For example it might need to be:
Copy to clipboard
json
"Boosteroid - Play PC Games on any device"
A few other things worth knowing:
The match is
substring-based
, so adding
"Boosteroid"
should
work if the window name contains that string — but only if Screenpipe is checking
window_name
and not
app_name
. Safari's
app_name
is just
"Safari"
, so the filter on
"Boosteroid"
may not be hitting anything.
You could also try adding
"Safari"
to
ignored_windows
entirely, though that's a blunt instrument if you use Safari for other things.
After editing
config.json
, make sure to
restart Screenpipe
fully for the change to take effect.
The query above will tell you exactly what string to add.
Copy
Give positive feedback
Give negative feedback
Retry
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Error: in prepare, no such column: created_at
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Error: in prepare, no such column: created_at
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
Show more
15:50
Retry
Edit
Copy...
|
NULL
|
|
50906
|
1093
|
60
|
2026-04-17T15:36:26.265960+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776440186265_m1.jpg...
|
Finder
|
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Term2ShellEditViewSessionScriptsProfilesWindowHelp Term2ShellEditViewSessionScriptsProfilesWindowHelp40 lo100% <47*-zshDOCKER2-881DEV (docker)APP (-zsh)|X3-zshX4-zsh3.6G/Users/lukas/.screenpipe/db.sqliteОК:archive.db exists687MVolumes/Test/screenpipe/archive.db17 tables[2026-04-17 18:33:18][2026-04-17 18:33:18]Screenpipe sync starting for: 2026-04-14[2026-04-17 18:33:18]:====[+00m00s] • Preflight checksSource DB:OK(3.6G)NAS mount:OK/Volumes/Test/screenpipe[2026-04-17 18:33:19]Date2026-04-14already has10733 frames in archive - skippinglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14OK: NAS mountedOK: Source DB exists3.6G/Users/lukas/.screenpipe/db.sqliteIN-• ₴5* Review screenp...• X6ec2-user@ip-10-...O *7Fri 17 Apr 18:36:261*1ec2-user@ip-10-...• ₴8$1Finder[+00m00s] • Counting source rows for 2026-04-14frames:elements:ui_events:ocr_text:meetings:107336959691054282060[+00m01s] • Initialising tables, indexes, FTScreating tablescreating indexescreating FTS tables• Om02s• Om03s• 0m01s[+00m07s] • Syncing data for2026-04-14video_chunksframes (10733 rows)• 0m04s:AClukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ Runtime errornear line 3: interrupted (9)Program interrupted.lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $||...
|
NULL
|
3845749673119121021
|
NULL
|
app_switch
|
ocr
|
NULL
|
Term2ShellEditViewSessionScriptsProfilesWindowHelp Term2ShellEditViewSessionScriptsProfilesWindowHelp40 lo100% <47*-zshDOCKER2-881DEV (docker)APP (-zsh)|X3-zshX4-zsh3.6G/Users/lukas/.screenpipe/db.sqliteОК:archive.db exists687MVolumes/Test/screenpipe/archive.db17 tables[2026-04-17 18:33:18][2026-04-17 18:33:18]Screenpipe sync starting for: 2026-04-14[2026-04-17 18:33:18]:====[+00m00s] • Preflight checksSource DB:OK(3.6G)NAS mount:OK/Volumes/Test/screenpipe[2026-04-17 18:33:19]Date2026-04-14already has10733 frames in archive - skippinglukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14OK: NAS mountedOK: Source DB exists3.6G/Users/lukas/.screenpipe/db.sqliteIN-• ₴5* Review screenp...• X6ec2-user@ip-10-...O *7Fri 17 Apr 18:36:261*1ec2-user@ip-10-...• ₴8$1Finder[+00m00s] • Counting source rows for 2026-04-14frames:elements:ui_events:ocr_text:meetings:107336959691054282060[+00m01s] • Initialising tables, indexes, FTScreating tablescreating indexescreating FTS tables• Om02s• Om03s• 0m01s[+00m07s] • Syncing data for2026-04-14video_chunksframes (10733 rows)• 0m04s:AClukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ Runtime errornear line 3: interrupted (9)Program interrupted.lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $||...
|
NULL
|
|
50907
|
1094
|
52
|
2026-04-17T15:36:26.265960+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776440186265_m2.jpg...
|
Finder
|
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
caudeg chat+ New chat• Prolects@ Customizeo0 Artif caudeg chat+ New chat• Prolects@ Customizeo0 ArtifactsBulgarian citizenship application processDawarich location tracking projectBoosteroid still recording despite ignoreMissing JavaScript promise in authorizatUux solTeUnoriNAsClaude AP 500 internal server errorScreenpipe query capabilities and usageeoru comoat olv wunvac mimiano oiUnderstanaing openkouter ArlgalewaScreenpipe 14-day retention explainedReddit homepage feed overviewDocker container not visible in consoleDIA Drowser KAM contigurationScreenpipe company backgroundDSK Bank Bulgaria secure investing exploullon2 a como crensve oersonainomdImporting Google limeline data to owndenromacact remota volume bulttans notiScreenpipe free version guideSelf-hosted LLM alternatives to Claude Sscreenpipe database query setupRunning screenpipe for treeWindowHeloboosteroid sull recoraing despite ignored windows settingI stopped screenpipe and it got interrupted, CAn I run it only when runningscreenpipeYes — add a check at the start of the script that verifies Screenpipe is running beforeproceeding:bash#Cneck screenpipe is running1T pgrep -t "screenpipe recora" › /dev/null; then1og "ERROR: Screenpipe 1s not running - aborting sync to avoid DB corruption"exit 1fibut actually the bigger concern is the opposite — you want to syne while screenpipe 1srunning (so it's writing to db.sglite), but SQLite in WAL mode handles concurrent readers fine.The syne seript only reads irom the source DB, so sereenpipe running is sare.The issue when you stopped Screenpipe mid-sync was that the partial archive.db got createdbut is incomplete. Check 1ts state:bashsqlite3 /Volumes/Test/screenpipe/archive.db "SELECT name, COUNT(*) as rows FROM sqlite master WHERE type='table'UNION ALLSELECT 'Trames', COUNT* FROM TramesUNION ALLSELECT 'elements', COUNT* FROM elements;" 2>/dev/null echo "DB may be corrupted"If it's partial you have two options:1. Delete it and start fresh:rm /Volumes/Test/screenpipe/archive.db2. Keep what's there — the seript's skip logic will see trames already exist for that date andskipWhich happened - did it finish frames before you stopped it?Updated to 1.3109.0Ke auncho aooyRelaunch^ LuKas KovallkReply….Sonnet 40 VClauae is Al ana can make mistakes. rlease double-cneck responses.100% CFri 17 Apr 18:36:25copyscreenpipe sync shsqlite3 "$DB SRC" <<< "$sql" &local pid=s!local spin=[PASSWORD] 1=0while k1ll -0 "sp1d" 2>/dev/null; do%-36s %S " "$label" "${spin[$i]}"printt "\ri=$(( (i + 1) % 10 ))sleed 0.2conewait "$pid'local dur=s(( $(date +%s) - start ))printf "r%-36s v %dm%02ds n" "Slabel" "$(( dur / 60)""$( dur % 60 )" tee -a "SLOG FILE"DAUF ARGUMENIN1T L"911:-5" = "today" J; therARGE DAITES date +%y-xm-/dxelif [ -n "$51:-3" 1: thenLARGEI DAIL-"S1"if ! "STARGET DATE" =- A 0-91347- 0-91 21- 0-91 215 1: thenecho "ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for vesterday."exit 1fielseTARGET DATE=S(date -v-1d +%Y-%m-%d)LogLog"Screenpipe sync starting for: $TARGET_DATE"LogFACrLLOhlstep "Preflight checks"if !-f"$DB SRC" : ther1og "ERROR: Source DB not found at SDB SRC"; exit 1printf "%-Dos %s(%s)\n" "Source DB:" "OK" "$(du -sh "$DB SRC" | cut -f1)"if [ ! -d "$NAS_MOUNT" ]; therlog "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1printf "%-20s %s\n" "NAS mount:" "OK$NAS MOUNT'if [-f "$NAS DB" ]: thenEXISTING=$(sqlite3 "SNAS DB" "SELECT COUNT(* FROM frames WHERE date timestamp = 'STARGET DATE':" 2>/dev/null echo "0")if "SEXISTING"-gt "0" ; thenlog "Date STARGET DATE already has SEXISTING frames in archive - skippingexit oprintf"%-20s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"elseprintf "%-20s %s\n" "Archive DB:" "will be created"100101102COUNT SOURCE ROWS103step "Counting source rows for STARGET DATE'...
|
NULL
|
-4520388630504772302
|
NULL
|
app_switch
|
ocr
|
NULL
|
caudeg chat+ New chat• Prolects@ Customizeo0 Artif caudeg chat+ New chat• Prolects@ Customizeo0 ArtifactsBulgarian citizenship application processDawarich location tracking projectBoosteroid still recording despite ignoreMissing JavaScript promise in authorizatUux solTeUnoriNAsClaude AP 500 internal server errorScreenpipe query capabilities and usageeoru comoat olv wunvac mimiano oiUnderstanaing openkouter ArlgalewaScreenpipe 14-day retention explainedReddit homepage feed overviewDocker container not visible in consoleDIA Drowser KAM contigurationScreenpipe company backgroundDSK Bank Bulgaria secure investing exploullon2 a como crensve oersonainomdImporting Google limeline data to owndenromacact remota volume bulttans notiScreenpipe free version guideSelf-hosted LLM alternatives to Claude Sscreenpipe database query setupRunning screenpipe for treeWindowHeloboosteroid sull recoraing despite ignored windows settingI stopped screenpipe and it got interrupted, CAn I run it only when runningscreenpipeYes — add a check at the start of the script that verifies Screenpipe is running beforeproceeding:bash#Cneck screenpipe is running1T pgrep -t "screenpipe recora" › /dev/null; then1og "ERROR: Screenpipe 1s not running - aborting sync to avoid DB corruption"exit 1fibut actually the bigger concern is the opposite — you want to syne while screenpipe 1srunning (so it's writing to db.sglite), but SQLite in WAL mode handles concurrent readers fine.The syne seript only reads irom the source DB, so sereenpipe running is sare.The issue when you stopped Screenpipe mid-sync was that the partial archive.db got createdbut is incomplete. Check 1ts state:bashsqlite3 /Volumes/Test/screenpipe/archive.db "SELECT name, COUNT(*) as rows FROM sqlite master WHERE type='table'UNION ALLSELECT 'Trames', COUNT* FROM TramesUNION ALLSELECT 'elements', COUNT* FROM elements;" 2>/dev/null echo "DB may be corrupted"If it's partial you have two options:1. Delete it and start fresh:rm /Volumes/Test/screenpipe/archive.db2. Keep what's there — the seript's skip logic will see trames already exist for that date andskipWhich happened - did it finish frames before you stopped it?Updated to 1.3109.0Ke auncho aooyRelaunch^ LuKas KovallkReply….Sonnet 40 VClauae is Al ana can make mistakes. rlease double-cneck responses.100% CFri 17 Apr 18:36:25copyscreenpipe sync shsqlite3 "$DB SRC" <<< "$sql" &local pid=s!local spin=[PASSWORD] 1=0while k1ll -0 "sp1d" 2>/dev/null; do%-36s %S " "$label" "${spin[$i]}"printt "\ri=$(( (i + 1) % 10 ))sleed 0.2conewait "$pid'local dur=s(( $(date +%s) - start ))printf "r%-36s v %dm%02ds n" "Slabel" "$(( dur / 60)""$( dur % 60 )" tee -a "SLOG FILE"DAUF ARGUMENIN1T L"911:-5" = "today" J; therARGE DAITES date +%y-xm-/dxelif [ -n "$51:-3" 1: thenLARGEI DAIL-"S1"if ! "STARGET DATE" =- A 0-91347- 0-91 21- 0-91 215 1: thenecho "ERROR: Invalid date format. Use YYYY-MM-DD, 'today', or no argument for vesterday."exit 1fielseTARGET DATE=S(date -v-1d +%Y-%m-%d)LogLog"Screenpipe sync starting for: $TARGET_DATE"LogFACrLLOhlstep "Preflight checks"if !-f"$DB SRC" : ther1og "ERROR: Source DB not found at SDB SRC"; exit 1printf "%-Dos %s(%s)\n" "Source DB:" "OK" "$(du -sh "$DB SRC" | cut -f1)"if [ ! -d "$NAS_MOUNT" ]; therlog "ERROR: NAS not mounted at $NAS_MOUNT"; exit 1printf "%-20s %s\n" "NAS mount:" "OK$NAS MOUNT'if [-f "$NAS DB" ]: thenEXISTING=$(sqlite3 "SNAS DB" "SELECT COUNT(* FROM frames WHERE date timestamp = 'STARGET DATE':" 2>/dev/null echo "0")if "SEXISTING"-gt "0" ; thenlog "Date STARGET DATE already has SEXISTING frames in archive - skippingexit oprintf"%-20s %s (%s)\n" "Archive DB:" "exists" "$(du -sh "$NAS_DB" | cut -f1)"elseprintf "%-20s %s\n" "Archive DB:" "will be created"100101102COUNT SOURCE ROWS103step "Counting source rows for STARGET DATE'...
|
NULL
|
|
50922
|
1093
|
68
|
2026-04-17T15:36:38.146333+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776440198146_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
elements|465966705
ui_events|9804622
ocr_text|1443 elements|465966705
ui_events|9804622
ocr_text|1443084543
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'frames' as tbl,
COUNT(*) as total_rows,
SUM(payload) as total_bytes,
SUM(payload)/COUNT(*) as bytes_per_row,
-- estimate yesterday's rows
(SELECT COUNT(*) FROM frames WHERE date(timestamp) = '2026-04-15') as day_rows
FROM dbstat d, frames f
WHERE d.name = 'frames'
UNION ALL
SELECT 'elements',
COUNT(*),
SUM(payload),
SUM(payload)/COUNT(*),
(SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '2026-04-15'))
FROM dbstat d, elements e
WHERE d.name = 'elements'
UNION ALL
SELECT 'ui_events',
COUNT(*),
SUM(payload),
SUM(payload)/COUNT(*),
(SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '2026-04-15')
FROM dbstat d, ui_events e
WHERE d.name = 'ui_events';"
^CError: stepping, interrupted (9)
Program interrupted.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'frames' as tbl,
COUNT(*) as total_rows,
SUM(payload) as total_bytes,
SUM(payload)/COUNT(*) as bytes_per_row,
(SELECT COUNT(*) FROM frames WHERE date(timestamp) = '2026-04-15') as day_rows
FROM dbstat d, frames f
WHERE d.name = 'frames'"
^CError: stepping, interrupted (9)
Program interrupted.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes, COUNT(*) as pages
FROM dbstat WHERE name IN ('frames','elements','ui_events','ocr_text')
GROUP BY name;"
elements|466530643|121280
frames|1006977358|254673
ocr_text|1443956212|359424
ui_events|9826328|2576
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
SELECT 'frames', COUNT(*) FROM frames
UNION ALL SELECT 'elements', COUNT(*) FROM elements
UNION ALL SELECT 'ui_events', COUNT(*) FROM ui_events
UNION ALL SELECT 'ocr_text', COUNT(*) FROM ocr_text;"
frames|50235
elements|3279563
ui_events|60293
ocr_text|39114
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ # 1. Measure NAS write speed (write 10MB test file, measure seconds)
SPEED=$(
dd if=/dev/urandom of="$NAS_MOUNT/.speed_test" bs=1m count=10 2>&1 | \
grep -o '[0-9.]* bytes/sec' | awk '{print $1}'
rm -f "$NAS_MOUNT/.speed_test"
)
echo "NAS write speed: $(( SPEED / 1024 / 1024 )) MB/s"
# 2. Get bytes/row for each table from dbstat
BYTES_FRAMES=$(sqlite3 "$DB_SRC" "SELECT SUM(payload)/COUNT(*) FROM dbstat,frames WHERE dbstat.name='frames';")
zsh: unknown file attribute: i
NAS write speed: 0 MB/s
zsh: command not found: #
^CError: stepping, interrupted (9)
Program interrupted.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 7525816
drwxr-xr-x 18 lukas staff 576 17 Apr 08:56 .
drwx------+ 91 lukas staff 2912 17 Apr 17:23 ..
-rw-r--r--@ 1 lukas staff 8196 16 Apr 17:07 .DS_Store
-rw-r--r-- 1 lukas staff 358 16 Apr 16:49 config.json
drwxr-xr-x 6 lukas staff 192 15 Apr 14:53 data
-rw-r--r-- 1 lukas staff 3841454080 17 Apr 17:36 db.sqlite
-rw-r--r-- 1 lukas staff 98304 17 Apr 16:11 db.sqlite-shm
-rw-r--r-- 1 lukas staff 9698512 17 Apr 17:38 db.sqlite-wal
drwxr-xr-x 9 lukas staff 288 15 Apr 14:53 pipes
-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log
-rw-r--r-- 1 lukas staff 95425 11 Apr 23:14 screenpipe.2026-04-11.0.log
-rw-r--r-- 1 lukas staff 72332 12 Apr 23:55 screenpipe.2026-04-12.0.log
-rw-r--r-- 1 lukas staff 71555 13 Apr 19:50 screenpipe.2026-04-13.0.log
-rw-r--r-- 1 lukas staff 162389 14 Apr 19:31 screenpipe.2026-04-14.0.log
-rw-r--r-- 1 lukas staff 175763 15 Apr 18:55 screenpipe.2026-04-15.0.log
-rw-r--r-- 1 lukas staff 196994 16 Apr 20:33 screenpipe.2026-04-16.0.log
-rw-r--r-- 1 lukas staff 172446 17 Apr 17:38 screenpipe.2026-04-17.0.log
-rwxr-xr-x 1 lukas staff 666 16 Apr 19:43 screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nano screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ code screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ LOG_FILE="$HOME/.screenpipe/sync.log"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ echo "$msg" | tee -a "$LOG_FILE"
[2026-04-17 17:45:23]
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ screenpipe_sync.sh
zsh: command not found: screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
OK: archive.db exists
199M /Volumes/Test/screenpipe/archive.db
6 tables
[2026-04-17 17:58:51] ========================================
[2026-04-17 17:58:51] Screenpipe sync starting for: 2026-04-15
[2026-04-17 17:58:51] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-17 17:58:52] Date 2026-04-15 already has 12874 frames in archive — skipping
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
INFO: archive.db does not exist yet - will be created on first sync
[2026-04-17 17:59:49] ========================================
[2026-04-17 17:59:49] Screenpipe sync starting for: 2026-04-15
[2026-04-17 17:59:49] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
Archive DB: will be created
[+00m00s] ▶ Counting source rows for 2026-04-15
frames: 12874
elements: 886876
ui_events: 14453
ocr_text: 11412
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
[2026-04-17 17:59:50] Sync complete for 2026-04-15
[2026-04-17 17:59:50] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(MIN(timestamp)) FROM frames;"
2026-04-09
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
INFO: archive.db does not exist yet - will be created on first sync
[2026-04-17 18:09:41] ========================================
[2026-04-17 18:09:41] Screenpipe sync starting for: 2026-04-14
[2026-04-17 18:09:41] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
Archive DB: will be created
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m02s
creating indexes ✓ 0m03s
creating FTS tables ✓ 0m01s
[+00m06s] ▶ Syncing data for 2026-04-14
video_chunks ✓ 0m01s
frames (10733 rows) ✓ 8m46s
ocr_text (8206 rows) ✓ 9m50s
ui_events (10542 rows) ✓ 0m06s
elements (695969 rows) ⠧ zsh: terminated ~/.screenpipe/screenpipe_sync.sh 2026-04-14
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
OK: archive.db exists
687M /Volumes/Test/screenpipe/archive.db
17 tables
[2026-04-17 18:33:18] ========================================
[2026-04-17 18:33:18] Screenpipe sync starting for: 2026-04-14
[2026-04-17 18:33:18] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-17 18:33:19] Date 2026-04-14 already has 10733 frames in archive — skipping
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
INFO: archive.db does not exist yet - will be created on first sync
[2026-04-17 18:34:00] ========================================
[2026-04-17 18:34:00] Screenpipe sync starting for: 2026-04-14
[2026-04-17 18:34:00] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
Archive DB: will be created
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m02s
creating indexes ✓ 0m03s
creating FTS tables ✓ 0m01s
[+00m07s] ▶ Syncing data for 2026-04-14
video_chunks ✓ 0m04s
frames (10733 rows) ⠏ ^C
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ Runtime error near line 3: interrupted (9)
Program interrupted.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"elements|465966705\nui_events|9804622\nocr_text|1443084543\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT\n 'frames' as tbl,\n COUNT(*) as total_rows,\n SUM(payload) as total_bytes,\n SUM(payload)/COUNT(*) as bytes_per_row,\n -- estimate yesterday's rows\n (SELECT COUNT(*) FROM frames WHERE date(timestamp) = '2026-04-15') as day_rows\nFROM dbstat d, frames f\nWHERE d.name = 'frames'\nUNION ALL\nSELECT 'elements',\n COUNT(*),\n SUM(payload),\n SUM(payload)/COUNT(*),\n (SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '2026-04-15'))\nFROM dbstat d, elements e\nWHERE d.name = 'elements'\nUNION ALL\nSELECT 'ui_events',\n COUNT(*),\n SUM(payload),\n SUM(payload)/COUNT(*),\n (SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '2026-04-15')\nFROM dbstat d, ui_events e\nWHERE d.name = 'ui_events';\"\n\n^CError: stepping, interrupted (9)\nProgram interrupted.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT\n 'frames' as tbl,\n COUNT(*) as total_rows,\n SUM(payload) as total_bytes,\n SUM(payload)/COUNT(*) as bytes_per_row,\n (SELECT COUNT(*) FROM frames WHERE date(timestamp) = '2026-04-15') as day_rows \nFROM dbstat d, frames f\nWHERE d.name = 'frames'\"\n^CError: stepping, interrupted (9)\nProgram interrupted.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes, COUNT(*) as pages\nFROM dbstat WHERE name IN ('frames','elements','ui_events','ocr_text')\nGROUP BY name;\"\nelements|466530643|121280\nframes|1006977358|254673\nocr_text|1443956212|359424\nui_events|9826328|2576\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \nSELECT 'frames', COUNT(*) FROM frames\nUNION ALL SELECT 'elements', COUNT(*) FROM elements\nUNION ALL SELECT 'ui_events', COUNT(*) FROM ui_events\nUNION ALL SELECT 'ocr_text', COUNT(*) FROM ocr_text;\"\nframes|50235\nelements|3279563\nui_events|60293\nocr_text|39114\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ # 1. Measure NAS write speed (write 10MB test file, measure seconds)\nSPEED=$(\n dd if=/dev/urandom of=\"$NAS_MOUNT/.speed_test\" bs=1m count=10 2>&1 | \\\n grep -o '[0-9.]* bytes/sec' | awk '{print $1}'\n rm -f \"$NAS_MOUNT/.speed_test\"\n)\necho \"NAS write speed: $(( SPEED / 1024 / 1024 )) MB/s\"\n\n# 2. Get bytes/row for each table from dbstat\nBYTES_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT SUM(payload)/COUNT(*) FROM dbstat,frames WHERE dbstat.name='frames';\")\nzsh: unknown file attribute: i\nNAS write speed: 0 MB/s\nzsh: command not found: #\n^CError: stepping, interrupted (9)\nProgram interrupted.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll \ntotal 7525816\ndrwxr-xr-x 18 lukas staff 576 17 Apr 08:56 .\ndrwx------+ 91 lukas staff 2912 17 Apr 17:23 ..\n-rw-r--r--@ 1 lukas staff 8196 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 358 16 Apr 16:49 config.json\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 data\n-rw-r--r-- 1 lukas staff 3841454080 17 Apr 17:36 db.sqlite\n-rw-r--r-- 1 lukas staff 98304 17 Apr 16:11 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 9698512 17 Apr 17:38 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 15 Apr 14:53 pipes\n-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log\n-rw-r--r-- 1 lukas staff 95425 11 Apr 23:14 screenpipe.2026-04-11.0.log\n-rw-r--r-- 1 lukas staff 72332 12 Apr 23:55 screenpipe.2026-04-12.0.log\n-rw-r--r-- 1 lukas staff 71555 13 Apr 19:50 screenpipe.2026-04-13.0.log\n-rw-r--r-- 1 lukas staff 162389 14 Apr 19:31 screenpipe.2026-04-14.0.log\n-rw-r--r-- 1 lukas staff 175763 15 Apr 18:55 screenpipe.2026-04-15.0.log\n-rw-r--r-- 1 lukas staff 196994 16 Apr 20:33 screenpipe.2026-04-16.0.log\n-rw-r--r-- 1 lukas staff 172446 17 Apr 17:38 screenpipe.2026-04-17.0.log\n-rwxr-xr-x 1 lukas staff 666 16 Apr 19:43 screenpipe_sync.sh\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nano screenpipe_sync.sh \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ code screenpipe_sync.sh \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ LOG_FILE=\"$HOME/.screenpipe/sync.log\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ echo \"$msg\" | tee -a \"$LOG_FILE\"\n[2026-04-17 17:45:23] \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ screenpipe_sync.sh \nzsh: command not found: screenpipe_sync.sh\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15\nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nOK: archive.db exists\n199M\u0000\u0000\u0000\t/Volumes/Test/screenpipe/archive.db\n6 tables\n[2026-04-17 17:58:51] ========================================\n[2026-04-17 17:58:51] Screenpipe sync starting for: 2026-04-15\n[2026-04-17 17:58:51] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-17 17:58:52] Date 2026-04-15 already has 12874 frames in archive — skipping\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15\nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nINFO: archive.db does not exist yet - will be created on first sync\n[2026-04-17 17:59:49] ========================================\n[2026-04-17 17:59:49] Screenpipe sync starting for: 2026-04-15\n[2026-04-17 17:59:49] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n Archive DB: will be created\n\n[+00m00s] ▶ Counting source rows for 2026-04-15\n frames: 12874\n elements: 886876\n ui_events: 14453\n ocr_text: 11412\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n\n[2026-04-17 17:59:50] Sync complete for 2026-04-15\n[2026-04-17 17:59:50] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(MIN(timestamp)) FROM frames;\"\n2026-04-09\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14 \nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nINFO: archive.db does not exist yet - will be created on first sync\n[2026-04-17 18:09:41] ========================================\n[2026-04-17 18:09:41] Screenpipe sync starting for: 2026-04-14\n[2026-04-17 18:09:41] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n Archive DB: will be created\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m02s\n creating indexes ✓ 0m03s\n creating FTS tables ✓ 0m01s\n\n[+00m06s] ▶ Syncing data for 2026-04-14\n video_chunks ✓ 0m01s\n frames (10733 rows) ✓ 8m46s\n ocr_text (8206 rows) ✓ 9m50s\n ui_events (10542 rows) ✓ 0m06s\n elements (695969 rows) ⠧ zsh: terminated ~/.screenpipe/screenpipe_sync.sh 2026-04-14\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nOK: archive.db exists\n687M\u0000\u0000\u0000\t/Volumes/Test/screenpipe/archive.db\n17 tables\n[2026-04-17 18:33:18] ========================================\n[2026-04-17 18:33:18] Screenpipe sync starting for: 2026-04-14\n[2026-04-17 18:33:18] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-17 18:33:19] Date 2026-04-14 already has 10733 frames in archive — skipping\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nINFO: archive.db does not exist yet - will be created on first sync\n[2026-04-17 18:34:00] ========================================\n[2026-04-17 18:34:00] Screenpipe sync starting for: 2026-04-14\n[2026-04-17 18:34:00] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n Archive DB: will be created\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m02s\n creating indexes ✓ 0m03s\n creating FTS tables ✓ 0m01s\n\n[+00m07s] ▶ Syncing data for 2026-04-14\n video_chunks ✓ 0m04s\n frames (10733 rows) ⠏ ^C\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ Runtime error near line 3: interrupted (9)\nProgram interrupted.\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":"elements|465966705\nui_events|9804622\nocr_text|1443084543\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT\n 'frames' as tbl,\n COUNT(*) as total_rows,\n SUM(payload) as total_bytes,\n SUM(payload)/COUNT(*) as bytes_per_row,\n -- estimate yesterday's rows\n (SELECT COUNT(*) FROM frames WHERE date(timestamp) = '2026-04-15') as day_rows\nFROM dbstat d, frames f\nWHERE d.name = 'frames'\nUNION ALL\nSELECT 'elements',\n COUNT(*),\n SUM(payload),\n SUM(payload)/COUNT(*),\n (SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '2026-04-15'))\nFROM dbstat d, elements e\nWHERE d.name = 'elements'\nUNION ALL\nSELECT 'ui_events',\n COUNT(*),\n SUM(payload),\n SUM(payload)/COUNT(*),\n (SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '2026-04-15')\nFROM dbstat d, ui_events e\nWHERE d.name = 'ui_events';\"\n\n^CError: stepping, interrupted (9)\nProgram interrupted.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT\n 'frames' as tbl,\n COUNT(*) as total_rows,\n SUM(payload) as total_bytes,\n SUM(payload)/COUNT(*) as bytes_per_row,\n (SELECT COUNT(*) FROM frames WHERE date(timestamp) = '2026-04-15') as day_rows \nFROM dbstat d, frames f\nWHERE d.name = 'frames'\"\n^CError: stepping, interrupted (9)\nProgram interrupted.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes, COUNT(*) as pages\nFROM dbstat WHERE name IN ('frames','elements','ui_events','ocr_text')\nGROUP BY name;\"\nelements|466530643|121280\nframes|1006977358|254673\nocr_text|1443956212|359424\nui_events|9826328|2576\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \nSELECT 'frames', COUNT(*) FROM frames\nUNION ALL SELECT 'elements', COUNT(*) FROM elements\nUNION ALL SELECT 'ui_events', COUNT(*) FROM ui_events\nUNION ALL SELECT 'ocr_text', COUNT(*) FROM ocr_text;\"\nframes|50235\nelements|3279563\nui_events|60293\nocr_text|39114\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ # 1. Measure NAS write speed (write 10MB test file, measure seconds)\nSPEED=$(\n dd if=/dev/urandom of=\"$NAS_MOUNT/.speed_test\" bs=1m count=10 2>&1 | \\\n grep -o '[0-9.]* bytes/sec' | awk '{print $1}'\n rm -f \"$NAS_MOUNT/.speed_test\"\n)\necho \"NAS write speed: $(( SPEED / 1024 / 1024 )) MB/s\"\n\n# 2. Get bytes/row for each table from dbstat\nBYTES_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT SUM(payload)/COUNT(*) FROM dbstat,frames WHERE dbstat.name='frames';\")\nzsh: unknown file attribute: i\nNAS write speed: 0 MB/s\nzsh: command not found: #\n^CError: stepping, interrupted (9)\nProgram interrupted.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll \ntotal 7525816\ndrwxr-xr-x 18 lukas staff 576 17 Apr 08:56 .\ndrwx------+ 91 lukas staff 2912 17 Apr 17:23 ..\n-rw-r--r--@ 1 lukas staff 8196 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 358 16 Apr 16:49 config.json\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 data\n-rw-r--r-- 1 lukas staff 3841454080 17 Apr 17:36 db.sqlite\n-rw-r--r-- 1 lukas staff 98304 17 Apr 16:11 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 9698512 17 Apr 17:38 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 15 Apr 14:53 pipes\n-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log\n-rw-r--r-- 1 lukas staff 95425 11 Apr 23:14 screenpipe.2026-04-11.0.log\n-rw-r--r-- 1 lukas staff 72332 12 Apr 23:55 screenpipe.2026-04-12.0.log\n-rw-r--r-- 1 lukas staff 71555 13 Apr 19:50 screenpipe.2026-04-13.0.log\n-rw-r--r-- 1 lukas staff 162389 14 Apr 19:31 screenpipe.2026-04-14.0.log\n-rw-r--r-- 1 lukas staff 175763 15 Apr 18:55 screenpipe.2026-04-15.0.log\n-rw-r--r-- 1 lukas staff 196994 16 Apr 20:33 screenpipe.2026-04-16.0.log\n-rw-r--r-- 1 lukas staff 172446 17 Apr 17:38 screenpipe.2026-04-17.0.log\n-rwxr-xr-x 1 lukas staff 666 16 Apr 19:43 screenpipe_sync.sh\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nano screenpipe_sync.sh \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ code screenpipe_sync.sh \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ LOG_FILE=\"$HOME/.screenpipe/sync.log\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ echo \"$msg\" | tee -a \"$LOG_FILE\"\n[2026-04-17 17:45:23] \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ screenpipe_sync.sh \nzsh: command not found: screenpipe_sync.sh\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15\nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nOK: archive.db exists\n199M\u0000\u0000\u0000\t/Volumes/Test/screenpipe/archive.db\n6 tables\n[2026-04-17 17:58:51] ========================================\n[2026-04-17 17:58:51] Screenpipe sync starting for: 2026-04-15\n[2026-04-17 17:58:51] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-17 17:58:52] Date 2026-04-15 already has 12874 frames in archive — skipping\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15\nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nINFO: archive.db does not exist yet - will be created on first sync\n[2026-04-17 17:59:49] ========================================\n[2026-04-17 17:59:49] Screenpipe sync starting for: 2026-04-15\n[2026-04-17 17:59:49] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n Archive DB: will be created\n\n[+00m00s] ▶ Counting source rows for 2026-04-15\n frames: 12874\n elements: 886876\n ui_events: 14453\n ocr_text: 11412\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n\n[2026-04-17 17:59:50] Sync complete for 2026-04-15\n[2026-04-17 17:59:50] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(MIN(timestamp)) FROM frames;\"\n2026-04-09\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14 \nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nINFO: archive.db does not exist yet - will be created on first sync\n[2026-04-17 18:09:41] ========================================\n[2026-04-17 18:09:41] Screenpipe sync starting for: 2026-04-14\n[2026-04-17 18:09:41] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n Archive DB: will be created\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m02s\n creating indexes ✓ 0m03s\n creating FTS tables ✓ 0m01s\n\n[+00m06s] ▶ Syncing data for 2026-04-14\n video_chunks ✓ 0m01s\n frames (10733 rows) ✓ 8m46s\n ocr_text (8206 rows) ✓ 9m50s\n ui_events (10542 rows) ✓ 0m06s\n elements (695969 rows) ⠧ zsh: terminated ~/.screenpipe/screenpipe_sync.sh 2026-04-14\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nOK: archive.db exists\n687M\u0000\u0000\u0000\t/Volumes/Test/screenpipe/archive.db\n17 tables\n[2026-04-17 18:33:18] ========================================\n[2026-04-17 18:33:18] Screenpipe sync starting for: 2026-04-14\n[2026-04-17 18:33:18] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-17 18:33:19] Date 2026-04-14 already has 10733 frames in archive — skipping\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nINFO: archive.db does not exist yet - will be created on first sync\n[2026-04-17 18:34:00] ========================================\n[2026-04-17 18:34:00] Screenpipe sync starting for: 2026-04-14\n[2026-04-17 18:34:00] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n Archive DB: will be created\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m02s\n creating indexes ✓ 0m03s\n creating FTS tables ✓ 0m01s\n\n[+00m07s] ▶ Syncing data for 2026-04-14\n video_chunks ✓ 0m04s\n frames (10733 rows) ⠏ ^C\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ Runtime error near line 3: interrupted (9)\nProgram interrupted.\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true}]...
|
-5207223485962531185
|
-1485144430129254761
|
app_switch
|
accessibility
|
NULL
|
elements|465966705
ui_events|9804622
ocr_text|1443 elements|465966705
ui_events|9804622
ocr_text|1443084543
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'frames' as tbl,
COUNT(*) as total_rows,
SUM(payload) as total_bytes,
SUM(payload)/COUNT(*) as bytes_per_row,
-- estimate yesterday's rows
(SELECT COUNT(*) FROM frames WHERE date(timestamp) = '2026-04-15') as day_rows
FROM dbstat d, frames f
WHERE d.name = 'frames'
UNION ALL
SELECT 'elements',
COUNT(*),
SUM(payload),
SUM(payload)/COUNT(*),
(SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '2026-04-15'))
FROM dbstat d, elements e
WHERE d.name = 'elements'
UNION ALL
SELECT 'ui_events',
COUNT(*),
SUM(payload),
SUM(payload)/COUNT(*),
(SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '2026-04-15')
FROM dbstat d, ui_events e
WHERE d.name = 'ui_events';"
^CError: stepping, interrupted (9)
Program interrupted.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'frames' as tbl,
COUNT(*) as total_rows,
SUM(payload) as total_bytes,
SUM(payload)/COUNT(*) as bytes_per_row,
(SELECT COUNT(*) FROM frames WHERE date(timestamp) = '2026-04-15') as day_rows
FROM dbstat d, frames f
WHERE d.name = 'frames'"
^CError: stepping, interrupted (9)
Program interrupted.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes, COUNT(*) as pages
FROM dbstat WHERE name IN ('frames','elements','ui_events','ocr_text')
GROUP BY name;"
elements|466530643|121280
frames|1006977358|254673
ocr_text|1443956212|359424
ui_events|9826328|2576
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
SELECT 'frames', COUNT(*) FROM frames
UNION ALL SELECT 'elements', COUNT(*) FROM elements
UNION ALL SELECT 'ui_events', COUNT(*) FROM ui_events
UNION ALL SELECT 'ocr_text', COUNT(*) FROM ocr_text;"
frames|50235
elements|3279563
ui_events|60293
ocr_text|39114
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ # 1. Measure NAS write speed (write 10MB test file, measure seconds)
SPEED=$(
dd if=/dev/urandom of="$NAS_MOUNT/.speed_test" bs=1m count=10 2>&1 | \
grep -o '[0-9.]* bytes/sec' | awk '{print $1}'
rm -f "$NAS_MOUNT/.speed_test"
)
echo "NAS write speed: $(( SPEED / 1024 / 1024 )) MB/s"
# 2. Get bytes/row for each table from dbstat
BYTES_FRAMES=$(sqlite3 "$DB_SRC" "SELECT SUM(payload)/COUNT(*) FROM dbstat,frames WHERE dbstat.name='frames';")
zsh: unknown file attribute: i
NAS write speed: 0 MB/s
zsh: command not found: #
^CError: stepping, interrupted (9)
Program interrupted.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 7525816
drwxr-xr-x 18 lukas staff 576 17 Apr 08:56 .
drwx------+ 91 lukas staff 2912 17 Apr 17:23 ..
-rw-r--r--@ 1 lukas staff 8196 16 Apr 17:07 .DS_Store
-rw-r--r-- 1 lukas staff 358 16 Apr 16:49 config.json
drwxr-xr-x 6 lukas staff 192 15 Apr 14:53 data
-rw-r--r-- 1 lukas staff 3841454080 17 Apr 17:36 db.sqlite
-rw-r--r-- 1 lukas staff 98304 17 Apr 16:11 db.sqlite-shm
-rw-r--r-- 1 lukas staff 9698512 17 Apr 17:38 db.sqlite-wal
drwxr-xr-x 9 lukas staff 288 15 Apr 14:53 pipes
-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log
-rw-r--r-- 1 lukas staff 95425 11 Apr 23:14 screenpipe.2026-04-11.0.log
-rw-r--r-- 1 lukas staff 72332 12 Apr 23:55 screenpipe.2026-04-12.0.log
-rw-r--r-- 1 lukas staff 71555 13 Apr 19:50 screenpipe.2026-04-13.0.log
-rw-r--r-- 1 lukas staff 162389 14 Apr 19:31 screenpipe.2026-04-14.0.log
-rw-r--r-- 1 lukas staff 175763 15 Apr 18:55 screenpipe.2026-04-15.0.log
-rw-r--r-- 1 lukas staff 196994 16 Apr 20:33 screenpipe.2026-04-16.0.log
-rw-r--r-- 1 lukas staff 172446 17 Apr 17:38 screenpipe.2026-04-17.0.log
-rwxr-xr-x 1 lukas staff 666 16 Apr 19:43 screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nano screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ code screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ LOG_FILE="$HOME/.screenpipe/sync.log"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ echo "$msg" | tee -a "$LOG_FILE"
[2026-04-17 17:45:23]
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ screenpipe_sync.sh
zsh: command not found: screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
OK: archive.db exists
199M /Volumes/Test/screenpipe/archive.db
6 tables
[2026-04-17 17:58:51] ========================================
[2026-04-17 17:58:51] Screenpipe sync starting for: 2026-04-15
[2026-04-17 17:58:51] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-17 17:58:52] Date 2026-04-15 already has 12874 frames in archive — skipping
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
INFO: archive.db does not exist yet - will be created on first sync
[2026-04-17 17:59:49] ========================================
[2026-04-17 17:59:49] Screenpipe sync starting for: 2026-04-15
[2026-04-17 17:59:49] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
Archive DB: will be created
[+00m00s] ▶ Counting source rows for 2026-04-15
frames: 12874
elements: 886876
ui_events: 14453
ocr_text: 11412
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
[2026-04-17 17:59:50] Sync complete for 2026-04-15
[2026-04-17 17:59:50] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(MIN(timestamp)) FROM frames;"
2026-04-09
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
INFO: archive.db does not exist yet - will be created on first sync
[2026-04-17 18:09:41] ========================================
[2026-04-17 18:09:41] Screenpipe sync starting for: 2026-04-14
[2026-04-17 18:09:41] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
Archive DB: will be created
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m02s
creating indexes ✓ 0m03s
creating FTS tables ✓ 0m01s
[+00m06s] ▶ Syncing data for 2026-04-14
video_chunks ✓ 0m01s
frames (10733 rows) ✓ 8m46s
ocr_text (8206 rows) ✓ 9m50s
ui_events (10542 rows) ✓ 0m06s
elements (695969 rows) ⠧ zsh: terminated ~/.screenpipe/screenpipe_sync.sh 2026-04-14
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
OK: archive.db exists
687M /Volumes/Test/screenpipe/archive.db
17 tables
[2026-04-17 18:33:18] ========================================
[2026-04-17 18:33:18] Screenpipe sync starting for: 2026-04-14
[2026-04-17 18:33:18] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-17 18:33:19] Date 2026-04-14 already has 10733 frames in archive — skipping
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
INFO: archive.db does not exist yet - will be created on first sync
[2026-04-17 18:34:00] ========================================
[2026-04-17 18:34:00] Screenpipe sync starting for: 2026-04-14
[2026-04-17 18:34:00] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
Archive DB: will be created
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m02s
creating indexes ✓ 0m03s
creating FTS tables ✓ 0m01s
[+00m07s] ▶ Syncing data for 2026-04-14
video_chunks ✓ 0m04s
frames (10733 rows) ⠏ ^C
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ Runtime error near line 3: interrupted (9)
Program interrupted.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
NULL
|
|
50923
|
1094
|
60
|
2026-04-17T15:36:38.122464+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776440198122_m2.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
elements|465966705
ui_events|9804622
ocr_text|1443 elements|465966705
ui_events|9804622
ocr_text|1443084543
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'frames' as tbl,
COUNT(*) as total_rows,
SUM(payload) as total_bytes,
SUM(payload)/COUNT(*) as bytes_per_row,
-- estimate yesterday's rows
(SELECT COUNT(*) FROM frames WHERE date(timestamp) = '2026-04-15') as day_rows
FROM dbstat d, frames f
WHERE d.name = 'frames'
UNION ALL
SELECT 'elements',
COUNT(*),
SUM(payload),
SUM(payload)/COUNT(*),
(SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '2026-04-15'))
FROM dbstat d, elements e
WHERE d.name = 'elements'
UNION ALL
SELECT 'ui_events',
COUNT(*),
SUM(payload),
SUM(payload)/COUNT(*),
(SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '2026-04-15')
FROM dbstat d, ui_events e
WHERE d.name = 'ui_events';"
^CError: stepping, interrupted (9)
Program interrupted.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'frames' as tbl,
COUNT(*) as total_rows,
SUM(payload) as total_bytes,
SUM(payload)/COUNT(*) as bytes_per_row,
(SELECT COUNT(*) FROM frames WHERE date(timestamp) = '2026-04-15') as day_rows
FROM dbstat d, frames f
WHERE d.name = 'frames'"
^CError: stepping, interrupted (9)
Program interrupted.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes, COUNT(*) as pages
FROM dbstat WHERE name IN ('frames','elements','ui_events','ocr_text')
GROUP BY name;"
elements|466530643|121280
frames|1006977358|254673
ocr_text|1443956212|359424
ui_events|9826328|2576
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
SELECT 'frames', COUNT(*) FROM frames
UNION ALL SELECT 'elements', COUNT(*) FROM elements
UNION ALL SELECT 'ui_events', COUNT(*) FROM ui_events
UNION ALL SELECT 'ocr_text', COUNT(*) FROM ocr_text;"
frames|50235
elements|3279563
ui_events|60293
ocr_text|39114
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ # 1. Measure NAS write speed (write 10MB test file, measure seconds)
SPEED=$(
dd if=/dev/urandom of="$NAS_MOUNT/.speed_test" bs=1m count=10 2>&1 | \
grep -o '[0-9.]* bytes/sec' | awk '{print $1}'
rm -f "$NAS_MOUNT/.speed_test"
)
echo "NAS write speed: $(( SPEED / 1024 / 1024 )) MB/s"
# 2. Get bytes/row for each table from dbstat
BYTES_FRAMES=$(sqlite3 "$DB_SRC" "SELECT SUM(payload)/COUNT(*) FROM dbstat,frames WHERE dbstat.name='frames';")
zsh: unknown file attribute: i
NAS write speed: 0 MB/s
zsh: command not found: #
^CError: stepping, interrupted (9)
Program interrupted.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 7525816
drwxr-xr-x 18 lukas staff 576 17 Apr 08:56 .
drwx------+ 91 lukas staff 2912 17 Apr 17:23 ..
-rw-r--r--@ 1 lukas staff 8196 16 Apr 17:07 .DS_Store
-rw-r--r-- 1 lukas staff 358 16 Apr 16:49 config.json
drwxr-xr-x 6 lukas staff 192 15 Apr 14:53 data
-rw-r--r-- 1 lukas staff 3841454080 17 Apr 17:36 db.sqlite
-rw-r--r-- 1 lukas staff 98304 17 Apr 16:11 db.sqlite-shm
-rw-r--r-- 1 lukas staff 9698512 17 Apr 17:38 db.sqlite-wal
drwxr-xr-x 9 lukas staff 288 15 Apr 14:53 pipes
-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log
-rw-r--r-- 1 lukas staff 95425 11 Apr 23:14 screenpipe.2026-04-11.0.log
-rw-r--r-- 1 lukas staff 72332 12 Apr 23:55 screenpipe.2026-04-12.0.log
-rw-r--r-- 1 lukas staff 71555 13 Apr 19:50 screenpipe.2026-04-13.0.log
-rw-r--r-- 1 lukas staff 162389 14 Apr 19:31 screenpipe.2026-04-14.0.log
-rw-r--r-- 1 lukas staff 175763 15 Apr 18:55 screenpipe.2026-04-15.0.log
-rw-r--r-- 1 lukas staff 196994 16 Apr 20:33 screenpipe.2026-04-16.0.log
-rw-r--r-- 1 lukas staff 172446 17 Apr 17:38 screenpipe.2026-04-17.0.log
-rwxr-xr-x 1 lukas staff 666 16 Apr 19:43 screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nano screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ code screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ LOG_FILE="$HOME/.screenpipe/sync.log"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ echo "$msg" | tee -a "$LOG_FILE"
[2026-04-17 17:45:23]
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ screenpipe_sync.sh
zsh: command not found: screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
OK: archive.db exists
199M /Volumes/Test/screenpipe/archive.db
6 tables
[2026-04-17 17:58:51] ========================================
[2026-04-17 17:58:51] Screenpipe sync starting for: 2026-04-15
[2026-04-17 17:58:51] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-17 17:58:52] Date 2026-04-15 already has 12874 frames in archive — skipping
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
INFO: archive.db does not exist yet - will be created on first sync
[2026-04-17 17:59:49] ========================================
[2026-04-17 17:59:49] Screenpipe sync starting for: 2026-04-15
[2026-04-17 17:59:49] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
Archive DB: will be created
[+00m00s] ▶ Counting source rows for 2026-04-15
frames: 12874
elements: 886876
ui_events: 14453
ocr_text: 11412
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
[2026-04-17 17:59:50] Sync complete for 2026-04-15
[2026-04-17 17:59:50] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(MIN(timestamp)) FROM frames;"
2026-04-09
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
INFO: archive.db does not exist yet - will be created on first sync
[2026-04-17 18:09:41] ========================================
[2026-04-17 18:09:41] Screenpipe sync starting for: 2026-04-14
[2026-04-17 18:09:41] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
Archive DB: will be created
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m02s
creating indexes ✓ 0m03s
creating FTS tables ✓ 0m01s
[+00m06s] ▶ Syncing data for 2026-04-14
video_chunks ✓ 0m01s
frames (10733 rows) ✓ 8m46s
ocr_text (8206 rows) ✓ 9m50s
ui_events (10542 rows) ✓ 0m06s
elements (695969 rows) ⠧ zsh: terminated ~/.screenpipe/screenpipe_sync.sh 2026-04-14
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
OK: archive.db exists
687M /Volumes/Test/screenpipe/archive.db
17 tables
[2026-04-17 18:33:18] ========================================
[2026-04-17 18:33:18] Screenpipe sync starting for: 2026-04-14
[2026-04-17 18:33:18] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-17 18:33:19] Date 2026-04-14 already has 10733 frames in archive — skipping
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
INFO: archive.db does not exist yet - will be created on first sync
[2026-04-17 18:34:00] ========================================
[2026-04-17 18:34:00] Screenpipe sync starting for: 2026-04-14
[2026-04-17 18:34:00] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
Archive DB: will be created
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m02s
creating indexes ✓ 0m03s
creating FTS tables ✓ 0m01s
[+00m07s] ▶ Syncing data for 2026-04-14
video_chunks ✓ 0m04s
frames (10733 rows) ⠏ ^C
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ Runtime error near line 3: interrupted (9)
Program interrupted.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"elements|465966705\nui_events|9804622\nocr_text|1443084543\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT\n 'frames' as tbl,\n COUNT(*) as total_rows,\n SUM(payload) as total_bytes,\n SUM(payload)/COUNT(*) as bytes_per_row,\n -- estimate yesterday's rows\n (SELECT COUNT(*) FROM frames WHERE date(timestamp) = '2026-04-15') as day_rows\nFROM dbstat d, frames f\nWHERE d.name = 'frames'\nUNION ALL\nSELECT 'elements',\n COUNT(*),\n SUM(payload),\n SUM(payload)/COUNT(*),\n (SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '2026-04-15'))\nFROM dbstat d, elements e\nWHERE d.name = 'elements'\nUNION ALL\nSELECT 'ui_events',\n COUNT(*),\n SUM(payload),\n SUM(payload)/COUNT(*),\n (SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '2026-04-15')\nFROM dbstat d, ui_events e\nWHERE d.name = 'ui_events';\"\n\n^CError: stepping, interrupted (9)\nProgram interrupted.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT\n 'frames' as tbl,\n COUNT(*) as total_rows,\n SUM(payload) as total_bytes,\n SUM(payload)/COUNT(*) as bytes_per_row,\n (SELECT COUNT(*) FROM frames WHERE date(timestamp) = '2026-04-15') as day_rows \nFROM dbstat d, frames f\nWHERE d.name = 'frames'\"\n^CError: stepping, interrupted (9)\nProgram interrupted.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes, COUNT(*) as pages\nFROM dbstat WHERE name IN ('frames','elements','ui_events','ocr_text')\nGROUP BY name;\"\nelements|466530643|121280\nframes|1006977358|254673\nocr_text|1443956212|359424\nui_events|9826328|2576\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \nSELECT 'frames', COUNT(*) FROM frames\nUNION ALL SELECT 'elements', COUNT(*) FROM elements\nUNION ALL SELECT 'ui_events', COUNT(*) FROM ui_events\nUNION ALL SELECT 'ocr_text', COUNT(*) FROM ocr_text;\"\nframes|50235\nelements|3279563\nui_events|60293\nocr_text|39114\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ # 1. Measure NAS write speed (write 10MB test file, measure seconds)\nSPEED=$(\n dd if=/dev/urandom of=\"$NAS_MOUNT/.speed_test\" bs=1m count=10 2>&1 | \\\n grep -o '[0-9.]* bytes/sec' | awk '{print $1}'\n rm -f \"$NAS_MOUNT/.speed_test\"\n)\necho \"NAS write speed: $(( SPEED / 1024 / 1024 )) MB/s\"\n\n# 2. Get bytes/row for each table from dbstat\nBYTES_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT SUM(payload)/COUNT(*) FROM dbstat,frames WHERE dbstat.name='frames';\")\nzsh: unknown file attribute: i\nNAS write speed: 0 MB/s\nzsh: command not found: #\n^CError: stepping, interrupted (9)\nProgram interrupted.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll \ntotal 7525816\ndrwxr-xr-x 18 lukas staff 576 17 Apr 08:56 .\ndrwx------+ 91 lukas staff 2912 17 Apr 17:23 ..\n-rw-r--r--@ 1 lukas staff 8196 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 358 16 Apr 16:49 config.json\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 data\n-rw-r--r-- 1 lukas staff 3841454080 17 Apr 17:36 db.sqlite\n-rw-r--r-- 1 lukas staff 98304 17 Apr 16:11 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 9698512 17 Apr 17:38 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 15 Apr 14:53 pipes\n-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log\n-rw-r--r-- 1 lukas staff 95425 11 Apr 23:14 screenpipe.2026-04-11.0.log\n-rw-r--r-- 1 lukas staff 72332 12 Apr 23:55 screenpipe.2026-04-12.0.log\n-rw-r--r-- 1 lukas staff 71555 13 Apr 19:50 screenpipe.2026-04-13.0.log\n-rw-r--r-- 1 lukas staff 162389 14 Apr 19:31 screenpipe.2026-04-14.0.log\n-rw-r--r-- 1 lukas staff 175763 15 Apr 18:55 screenpipe.2026-04-15.0.log\n-rw-r--r-- 1 lukas staff 196994 16 Apr 20:33 screenpipe.2026-04-16.0.log\n-rw-r--r-- 1 lukas staff 172446 17 Apr 17:38 screenpipe.2026-04-17.0.log\n-rwxr-xr-x 1 lukas staff 666 16 Apr 19:43 screenpipe_sync.sh\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nano screenpipe_sync.sh \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ code screenpipe_sync.sh \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ LOG_FILE=\"$HOME/.screenpipe/sync.log\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ echo \"$msg\" | tee -a \"$LOG_FILE\"\n[2026-04-17 17:45:23] \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ screenpipe_sync.sh \nzsh: command not found: screenpipe_sync.sh\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15\nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nOK: archive.db exists\n199M\u0000\u0000\u0000\t/Volumes/Test/screenpipe/archive.db\n6 tables\n[2026-04-17 17:58:51] ========================================\n[2026-04-17 17:58:51] Screenpipe sync starting for: 2026-04-15\n[2026-04-17 17:58:51] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-17 17:58:52] Date 2026-04-15 already has 12874 frames in archive — skipping\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15\nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nINFO: archive.db does not exist yet - will be created on first sync\n[2026-04-17 17:59:49] ========================================\n[2026-04-17 17:59:49] Screenpipe sync starting for: 2026-04-15\n[2026-04-17 17:59:49] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n Archive DB: will be created\n\n[+00m00s] ▶ Counting source rows for 2026-04-15\n frames: 12874\n elements: 886876\n ui_events: 14453\n ocr_text: 11412\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n\n[2026-04-17 17:59:50] Sync complete for 2026-04-15\n[2026-04-17 17:59:50] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(MIN(timestamp)) FROM frames;\"\n2026-04-09\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14 \nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nINFO: archive.db does not exist yet - will be created on first sync\n[2026-04-17 18:09:41] ========================================\n[2026-04-17 18:09:41] Screenpipe sync starting for: 2026-04-14\n[2026-04-17 18:09:41] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n Archive DB: will be created\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m02s\n creating indexes ✓ 0m03s\n creating FTS tables ✓ 0m01s\n\n[+00m06s] ▶ Syncing data for 2026-04-14\n video_chunks ✓ 0m01s\n frames (10733 rows) ✓ 8m46s\n ocr_text (8206 rows) ✓ 9m50s\n ui_events (10542 rows) ✓ 0m06s\n elements (695969 rows) ⠧ zsh: terminated ~/.screenpipe/screenpipe_sync.sh 2026-04-14\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nOK: archive.db exists\n687M\u0000\u0000\u0000\t/Volumes/Test/screenpipe/archive.db\n17 tables\n[2026-04-17 18:33:18] ========================================\n[2026-04-17 18:33:18] Screenpipe sync starting for: 2026-04-14\n[2026-04-17 18:33:18] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-17 18:33:19] Date 2026-04-14 already has 10733 frames in archive — skipping\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nINFO: archive.db does not exist yet - will be created on first sync\n[2026-04-17 18:34:00] ========================================\n[2026-04-17 18:34:00] Screenpipe sync starting for: 2026-04-14\n[2026-04-17 18:34:00] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n Archive DB: will be created\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m02s\n creating indexes ✓ 0m03s\n creating FTS tables ✓ 0m01s\n\n[+00m07s] ▶ Syncing data for 2026-04-14\n video_chunks ✓ 0m04s\n frames (10733 rows) ⠏ ^C\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ Runtime error near line 3: interrupted (9)\nProgram interrupted.\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":"elements|465966705\nui_events|9804622\nocr_text|1443084543\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT\n 'frames' as tbl,\n COUNT(*) as total_rows,\n SUM(payload) as total_bytes,\n SUM(payload)/COUNT(*) as bytes_per_row,\n -- estimate yesterday's rows\n (SELECT COUNT(*) FROM frames WHERE date(timestamp) = '2026-04-15') as day_rows\nFROM dbstat d, frames f\nWHERE d.name = 'frames'\nUNION ALL\nSELECT 'elements',\n COUNT(*),\n SUM(payload),\n SUM(payload)/COUNT(*),\n (SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '2026-04-15'))\nFROM dbstat d, elements e\nWHERE d.name = 'elements'\nUNION ALL\nSELECT 'ui_events',\n COUNT(*),\n SUM(payload),\n SUM(payload)/COUNT(*),\n (SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '2026-04-15')\nFROM dbstat d, ui_events e\nWHERE d.name = 'ui_events';\"\n\n^CError: stepping, interrupted (9)\nProgram interrupted.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT\n 'frames' as tbl,\n COUNT(*) as total_rows,\n SUM(payload) as total_bytes,\n SUM(payload)/COUNT(*) as bytes_per_row,\n (SELECT COUNT(*) FROM frames WHERE date(timestamp) = '2026-04-15') as day_rows \nFROM dbstat d, frames f\nWHERE d.name = 'frames'\"\n^CError: stepping, interrupted (9)\nProgram interrupted.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT name, SUM(payload) as bytes, COUNT(*) as pages\nFROM dbstat WHERE name IN ('frames','elements','ui_events','ocr_text')\nGROUP BY name;\"\nelements|466530643|121280\nframes|1006977358|254673\nocr_text|1443956212|359424\nui_events|9826328|2576\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\n UW PICO 5.09 New Buffer \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n [ Read 25 lines ] \n^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos \n^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell \nSELECT 'frames', COUNT(*) FROM frames\nUNION ALL SELECT 'elements', COUNT(*) FROM elements\nUNION ALL SELECT 'ui_events', COUNT(*) FROM ui_events\nUNION ALL SELECT 'ocr_text', COUNT(*) FROM ocr_text;\"\nframes|50235\nelements|3279563\nui_events|60293\nocr_text|39114\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ # 1. Measure NAS write speed (write 10MB test file, measure seconds)\nSPEED=$(\n dd if=/dev/urandom of=\"$NAS_MOUNT/.speed_test\" bs=1m count=10 2>&1 | \\\n grep -o '[0-9.]* bytes/sec' | awk '{print $1}'\n rm -f \"$NAS_MOUNT/.speed_test\"\n)\necho \"NAS write speed: $(( SPEED / 1024 / 1024 )) MB/s\"\n\n# 2. Get bytes/row for each table from dbstat\nBYTES_FRAMES=$(sqlite3 \"$DB_SRC\" \"SELECT SUM(payload)/COUNT(*) FROM dbstat,frames WHERE dbstat.name='frames';\")\nzsh: unknown file attribute: i\nNAS write speed: 0 MB/s\nzsh: command not found: #\n^CError: stepping, interrupted (9)\nProgram interrupted.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll \ntotal 7525816\ndrwxr-xr-x 18 lukas staff 576 17 Apr 08:56 .\ndrwx------+ 91 lukas staff 2912 17 Apr 17:23 ..\n-rw-r--r--@ 1 lukas staff 8196 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 358 16 Apr 16:49 config.json\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 data\n-rw-r--r-- 1 lukas staff 3841454080 17 Apr 17:36 db.sqlite\n-rw-r--r-- 1 lukas staff 98304 17 Apr 16:11 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 9698512 17 Apr 17:38 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 15 Apr 14:53 pipes\n-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log\n-rw-r--r-- 1 lukas staff 95425 11 Apr 23:14 screenpipe.2026-04-11.0.log\n-rw-r--r-- 1 lukas staff 72332 12 Apr 23:55 screenpipe.2026-04-12.0.log\n-rw-r--r-- 1 lukas staff 71555 13 Apr 19:50 screenpipe.2026-04-13.0.log\n-rw-r--r-- 1 lukas staff 162389 14 Apr 19:31 screenpipe.2026-04-14.0.log\n-rw-r--r-- 1 lukas staff 175763 15 Apr 18:55 screenpipe.2026-04-15.0.log\n-rw-r--r-- 1 lukas staff 196994 16 Apr 20:33 screenpipe.2026-04-16.0.log\n-rw-r--r-- 1 lukas staff 172446 17 Apr 17:38 screenpipe.2026-04-17.0.log\n-rwxr-xr-x 1 lukas staff 666 16 Apr 19:43 screenpipe_sync.sh\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nano screenpipe_sync.sh \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ code screenpipe_sync.sh \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ LOG_FILE=\"$HOME/.screenpipe/sync.log\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ local msg=\"[$(date '+%Y-%m-%d %H:%M:%S')] $*\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ echo \"$msg\" | tee -a \"$LOG_FILE\"\n[2026-04-17 17:45:23] \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ screenpipe_sync.sh \nzsh: command not found: screenpipe_sync.sh\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15\nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nOK: archive.db exists\n199M\u0000\u0000\u0000\t/Volumes/Test/screenpipe/archive.db\n6 tables\n[2026-04-17 17:58:51] ========================================\n[2026-04-17 17:58:51] Screenpipe sync starting for: 2026-04-15\n[2026-04-17 17:58:51] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-17 17:58:52] Date 2026-04-15 already has 12874 frames in archive — skipping\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15\nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nINFO: archive.db does not exist yet - will be created on first sync\n[2026-04-17 17:59:49] ========================================\n[2026-04-17 17:59:49] Screenpipe sync starting for: 2026-04-15\n[2026-04-17 17:59:49] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n Archive DB: will be created\n\n[+00m00s] ▶ Counting source rows for 2026-04-15\n frames: 12874\n elements: 886876\n ui_events: 14453\n ocr_text: 11412\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n\n[2026-04-17 17:59:50] Sync complete for 2026-04-15\n[2026-04-17 17:59:50] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(MIN(timestamp)) FROM frames;\"\n2026-04-09\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14 \nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nINFO: archive.db does not exist yet - will be created on first sync\n[2026-04-17 18:09:41] ========================================\n[2026-04-17 18:09:41] Screenpipe sync starting for: 2026-04-14\n[2026-04-17 18:09:41] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n Archive DB: will be created\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m02s\n creating indexes ✓ 0m03s\n creating FTS tables ✓ 0m01s\n\n[+00m06s] ▶ Syncing data for 2026-04-14\n video_chunks ✓ 0m01s\n frames (10733 rows) ✓ 8m46s\n ocr_text (8206 rows) ✓ 9m50s\n ui_events (10542 rows) ✓ 0m06s\n elements (695969 rows) ⠧ zsh: terminated ~/.screenpipe/screenpipe_sync.sh 2026-04-14\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nOK: archive.db exists\n687M\u0000\u0000\u0000\t/Volumes/Test/screenpipe/archive.db\n17 tables\n[2026-04-17 18:33:18] ========================================\n[2026-04-17 18:33:18] Screenpipe sync starting for: 2026-04-14\n[2026-04-17 18:33:18] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-17 18:33:19] Date 2026-04-14 already has 10733 frames in archive — skipping\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\nOK: NAS mounted\nOK: Source DB exists\n3.6G\u0000\u0000\u0000\t/Users/lukas/.screenpipe/db.sqlite\nINFO: archive.db does not exist yet - will be created on first sync\n[2026-04-17 18:34:00] ========================================\n[2026-04-17 18:34:00] Screenpipe sync starting for: 2026-04-14\n[2026-04-17 18:34:00] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n Archive DB: will be created\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m02s\n creating indexes ✓ 0m03s\n creating FTS tables ✓ 0m01s\n\n[+00m07s] ▶ Syncing data for 2026-04-14\n video_chunks ✓ 0m04s\n frames (10733 rows) ⠏ ^C\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ Runtime error near line 3: interrupted (9)\nProgram interrupted.\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true}]...
|
-5207223485962531185
|
-1485144430129254761
|
app_switch
|
accessibility
|
NULL
|
elements|465966705
ui_events|9804622
ocr_text|1443 elements|465966705
ui_events|9804622
ocr_text|1443084543
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'frames' as tbl,
COUNT(*) as total_rows,
SUM(payload) as total_bytes,
SUM(payload)/COUNT(*) as bytes_per_row,
-- estimate yesterday's rows
(SELECT COUNT(*) FROM frames WHERE date(timestamp) = '2026-04-15') as day_rows
FROM dbstat d, frames f
WHERE d.name = 'frames'
UNION ALL
SELECT 'elements',
COUNT(*),
SUM(payload),
SUM(payload)/COUNT(*),
(SELECT COUNT(*) FROM elements WHERE frame_id IN (SELECT id FROM frames WHERE date(timestamp) = '2026-04-15'))
FROM dbstat d, elements e
WHERE d.name = 'elements'
UNION ALL
SELECT 'ui_events',
COUNT(*),
SUM(payload),
SUM(payload)/COUNT(*),
(SELECT COUNT(*) FROM ui_events WHERE date(timestamp) = '2026-04-15')
FROM dbstat d, ui_events e
WHERE d.name = 'ui_events';"
^CError: stepping, interrupted (9)
Program interrupted.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT
'frames' as tbl,
COUNT(*) as total_rows,
SUM(payload) as total_bytes,
SUM(payload)/COUNT(*) as bytes_per_row,
(SELECT COUNT(*) FROM frames WHERE date(timestamp) = '2026-04-15') as day_rows
FROM dbstat d, frames f
WHERE d.name = 'frames'"
^CError: stepping, interrupted (9)
Program interrupted.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT name, SUM(payload) as bytes, COUNT(*) as pages
FROM dbstat WHERE name IN ('frames','elements','ui_events','ocr_text')
GROUP BY name;"
elements|466530643|121280
frames|1006977358|254673
ocr_text|1443956212|359424
ui_events|9826328|2576
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
UW PICO 5.09 New Buffer
[ Read 25 lines ]
^G Get Help ^O WriteOut ^R Read File ^Y Prev Pg ^K Cut Text ^C Cur Pos
^X Exit ^J Justify ^W Where is ^V Next Pg ^U UnCut Text ^T To Spell
SELECT 'frames', COUNT(*) FROM frames
UNION ALL SELECT 'elements', COUNT(*) FROM elements
UNION ALL SELECT 'ui_events', COUNT(*) FROM ui_events
UNION ALL SELECT 'ocr_text', COUNT(*) FROM ocr_text;"
frames|50235
elements|3279563
ui_events|60293
ocr_text|39114
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ # 1. Measure NAS write speed (write 10MB test file, measure seconds)
SPEED=$(
dd if=/dev/urandom of="$NAS_MOUNT/.speed_test" bs=1m count=10 2>&1 | \
grep -o '[0-9.]* bytes/sec' | awk '{print $1}'
rm -f "$NAS_MOUNT/.speed_test"
)
echo "NAS write speed: $(( SPEED / 1024 / 1024 )) MB/s"
# 2. Get bytes/row for each table from dbstat
BYTES_FRAMES=$(sqlite3 "$DB_SRC" "SELECT SUM(payload)/COUNT(*) FROM dbstat,frames WHERE dbstat.name='frames';")
zsh: unknown file attribute: i
NAS write speed: 0 MB/s
zsh: command not found: #
^CError: stepping, interrupted (9)
Program interrupted.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll
total 7525816
drwxr-xr-x 18 lukas staff 576 17 Apr 08:56 .
drwx------+ 91 lukas staff 2912 17 Apr 17:23 ..
-rw-r--r--@ 1 lukas staff 8196 16 Apr 17:07 .DS_Store
-rw-r--r-- 1 lukas staff 358 16 Apr 16:49 config.json
drwxr-xr-x 6 lukas staff 192 15 Apr 14:53 data
-rw-r--r-- 1 lukas staff 3841454080 17 Apr 17:36 db.sqlite
-rw-r--r-- 1 lukas staff 98304 17 Apr 16:11 db.sqlite-shm
-rw-r--r-- 1 lukas staff 9698512 17 Apr 17:38 db.sqlite-wal
drwxr-xr-x 9 lukas staff 288 15 Apr 14:53 pipes
-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log
-rw-r--r-- 1 lukas staff 95425 11 Apr 23:14 screenpipe.2026-04-11.0.log
-rw-r--r-- 1 lukas staff 72332 12 Apr 23:55 screenpipe.2026-04-12.0.log
-rw-r--r-- 1 lukas staff 71555 13 Apr 19:50 screenpipe.2026-04-13.0.log
-rw-r--r-- 1 lukas staff 162389 14 Apr 19:31 screenpipe.2026-04-14.0.log
-rw-r--r-- 1 lukas staff 175763 15 Apr 18:55 screenpipe.2026-04-15.0.log
-rw-r--r-- 1 lukas staff 196994 16 Apr 20:33 screenpipe.2026-04-16.0.log
-rw-r--r-- 1 lukas staff 172446 17 Apr 17:38 screenpipe.2026-04-17.0.log
-rwxr-xr-x 1 lukas staff 666 16 Apr 19:43 screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ nano screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ code screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ LOG_FILE="$HOME/.screenpipe/sync.log"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ local msg="[$(date '+%Y-%m-%d %H:%M:%S')] $*"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ echo "$msg" | tee -a "$LOG_FILE"
[2026-04-17 17:45:23]
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ screenpipe_sync.sh
zsh: command not found: screenpipe_sync.sh
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
OK: archive.db exists
199M /Volumes/Test/screenpipe/archive.db
6 tables
[2026-04-17 17:58:51] ========================================
[2026-04-17 17:58:51] Screenpipe sync starting for: 2026-04-15
[2026-04-17 17:58:51] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-17 17:58:52] Date 2026-04-15 already has 12874 frames in archive — skipping
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
INFO: archive.db does not exist yet - will be created on first sync
[2026-04-17 17:59:49] ========================================
[2026-04-17 17:59:49] Screenpipe sync starting for: 2026-04-15
[2026-04-17 17:59:49] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
Archive DB: will be created
[+00m00s] ▶ Counting source rows for 2026-04-15
frames: 12874
elements: 886876
ui_events: 14453
ocr_text: 11412
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
[2026-04-17 17:59:50] Sync complete for 2026-04-15
[2026-04-17 17:59:50] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(MIN(timestamp)) FROM frames;"
2026-04-09
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
INFO: archive.db does not exist yet - will be created on first sync
[2026-04-17 18:09:41] ========================================
[2026-04-17 18:09:41] Screenpipe sync starting for: 2026-04-14
[2026-04-17 18:09:41] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
Archive DB: will be created
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m02s
creating indexes ✓ 0m03s
creating FTS tables ✓ 0m01s
[+00m06s] ▶ Syncing data for 2026-04-14
video_chunks ✓ 0m01s
frames (10733 rows) ✓ 8m46s
ocr_text (8206 rows) ✓ 9m50s
ui_events (10542 rows) ✓ 0m06s
elements (695969 rows) ⠧ zsh: terminated ~/.screenpipe/screenpipe_sync.sh 2026-04-14
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
OK: archive.db exists
687M /Volumes/Test/screenpipe/archive.db
17 tables
[2026-04-17 18:33:18] ========================================
[2026-04-17 18:33:18] Screenpipe sync starting for: 2026-04-14
[2026-04-17 18:33:18] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-17 18:33:19] Date 2026-04-14 already has 10733 frames in archive — skipping
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
OK: NAS mounted
OK: Source DB exists
3.6G /Users/lukas/.screenpipe/db.sqlite
INFO: archive.db does not exist yet - will be created on first sync
[2026-04-17 18:34:00] ========================================
[2026-04-17 18:34:00] Screenpipe sync starting for: 2026-04-14
[2026-04-17 18:34:00] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
Archive DB: will be created
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m02s
creating indexes ✓ 0m03s
creating FTS tables ✓ 0m01s
[+00m07s] ▶ Syncing data for 2026-04-14
video_chunks ✓ 0m04s
frames (10733 rows) ⠏ ^C
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ Runtime error near line 3: interrupted (9)
Program interrupted.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
NULL
|
|
51003
|
1099
|
17
|
2026-04-18T10:38:56.861353+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-18/1776 /Users/lukas/.screenpipe/data/data/2026-04-18/1776508736861_m1.jpg...
|
Firefox
|
install screenpipe - screenpipe docs — Personal
|
True
|
docs.screenpi.pe/getting-started
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
Статус на поръчка в stantek.com - DXP4800PLUS-B5F8
Статус на поръчка в stantek.com - [EMAIL] - Gmail
Stantek
Stantek
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
| Senetic
| Senetic
Stantek
Stantek
| Senetic
| Senetic
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Screenpipe Dashboard
Screenpipe Dashboard
Welcome to Steam
Welcome to Steam
YouTube
YouTube
New Tab
New Tab
Today's Deals
Today's Deals
New Tab
New Tab
Shameless • HBO Max
Shameless • HBO Max
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
install screenpipe - screenpipe docs
install screenpipe - screenpipe docs
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
screenpipe docs home page logo
screenpipe docs
home page
Open search
search screenpipe docs...
⌘
K
pricing
pricing
discord
discord
github
github
download
download
Toggle dark mode
documentation
documentation
api reference
api reference
get started
get started
home
home
quickstart
quickstart
installation
installation
use cases
use cases
architecture
architecture
pipes
pipes
pipe store
pipe store
build pipes
build pipes
pipe permissions
pipe permissions
connect
connect
mcp server
mcp server
mcp apps
mcp apps
connections
connections
cloud sync
cloud sync
cloud archive
cloud archive
teams
teams
use cases
use cases
search screen history
search screen history
meeting transcription
meeting transcription
ai memory
ai memory
for developers
for developers
integrations
integrations
chatgpt
chatgpt
apple intelligence
apple intelligence
ollama
ollama
claude code
claude code
opencode
opencode
OpenClaw
OpenClaw
cline
cline
continue
continue
gemini cli
gemini cli
obsidian
obsidian
msty
msty
reference
reference
api reference
api reference
compare
compare
vs pieces
vs pieces
vs littlebird
vs littlebird
vs omi
vs omi
vs granola
vs granola
vs rewind
vs rewind
vs microsoft recall
vs microsoft recall
vs limitless
vs limitless
vs otter
vs otter
vs fathom
vs fathom
vs fireflies
vs fireflies
resources
resources
troubleshooting
troubleshooting
faq
faq
contributing
contributing
On this page
On this page
desktop app (recommended)
desktop app (recommended)
CLI
CLI
access your recorded timeline
access your recorded timeline
verify it’s running
verify it’s running
connect to AI
connect to AI
what’s next?
what’s next?
get started
install screenpipe
install screenpipe
Install screenpipe on macOS, Windows, or Linux. Record everything on screen and search screen history on Mac, Windows, and Linux. Start recording in minutes.
want the fastest path? see the
5-minute quickstart →
5-minute quickstart →
Navigate to header desktop app (recommended)
Navigate to header
desktop app (recommended)
download the
desktop app
desktop app
and follow the installation instructions. works on macOS, Windows, and Linux.
the app manages recording, settings, search, pipes, and AI connections — no terminal needed.
Navigate to header CLI
Navigate to header
CLI
Copy the contents from the code block
npx
screenpipe@latest
record
this starts the screenpipe daemon in the background and continuously records your screen. data is stored in
~/.screenpipe/
on your local machine.
Navigate to header access your recorded timeline
Navigate to header
access your recorded timeline
after starting the CLI, you have three ways to access your screen history:
Desktop app (easiest)
— download the
screenpipe app
screenpipe app
for a visual timeline and built-in search
REST API
— query recorded content directly via curl or code (see below)
AI assistants
— connect Claude, Cursor, or other tools via MCP
Navigate to header verify it’s running
Navigate to header
verify it’s running
once screenpipe starts, it serves an API on
localhost:3030
:
Copy the contents from the code block
# check health
curl
http://localhost:3030/health
# search your screen history
curl
"http://localhost:3030/search"
Navigate to header connect to AI
Navigate to header
connect to AI
screenpipe works with any AI that supports MCP or HTTP APIs:
integration
how
claude desktop
add screenpipe as MCP server (
guide
guide
)
cursor
add screenpipe MCP to your project (
guide
guide
)
claude code
use screenpipe MCP or curl the API (
guide
guide
)
ollama
configure in app settings, use any local model
integration
claude desktop
cursor
claude code
ollama
how
add screenpipe as MCP server (
guide
guide
)
add screenpipe MCP to your project (
guide
guide
)
use screenpipe MCP or curl the API (
guide
guide
)
configure in app settings, use any local model
Navigate to header what’s next?
Navigate to header
what’s next?
search your screen history
search your screen history
— find anything you’ve seen
API reference
API reference
— REST API endpoints and parameters
troubleshooting
troubleshooting
— fix common issues
join our discord
join our discord
— get help from the community
download screenpipe →
download screenpipe →
Was this page helpful?
Yes
Yes
No
No
quickstart
quickstart
use cases
use cases
github
github
x
x
discord
discord
Powered by This documentation is built and hosted on Mintlify, a developer documentation platform
Powered by
This documentation is built and hosted on Mintlify, a developer documentation platform
install screenpipe - screenpipe docs
docs.screenpi.pe/continue...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Статус на поръчка в stantek.com - kovaliklukas@gmail.com - Gmail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Stantek","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Stantek","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"| Senetic","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"| Senetic","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Stantek","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Stantek","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"| Senetic","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"| Senetic","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Твърд диск, Western Digital Red 6TB Plus ( 3.5\", 256MB, 5400","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Твърд диск, Western Digital Red 6TB Plus ( 3.5\", 256MB, 5400","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe Dashboard","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe Dashboard","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Welcome to Steam","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome to Steam","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"YouTube","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"YouTube","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Shameless • HBO Max","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Shameless • HBO Max","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"install screenpipe - screenpipe docs","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"install screenpipe - screenpipe docs","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to main content","depth":6,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe docs home page logo","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe docs","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"home page","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open search","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"search screenpipe docs...","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"⌘","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"K","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pricing","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pricing","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"discord","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"discord","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"github","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"github","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"download","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"download","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle dark mode","depth":7,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"documentation","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"documentation","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"api reference","depth":7,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"api reference","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"get started","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"get started","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"home","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"home","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"quickstart","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"quickstart","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"installation","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"installation","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"use cases","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"use cases","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"architecture","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"pipes","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"pipes","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipe store","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipe store","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"build pipes","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build pipes","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipe permissions","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipe permissions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"connect","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"connect","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"mcp server","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"mcp server","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"mcp apps","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"mcp apps","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"connections","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"connections","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"cloud sync","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"cloud sync","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"cloud archive","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"cloud archive","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"teams","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"teams","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"use cases","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"use cases","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"search screen history","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"search screen history","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"meeting transcription","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"meeting transcription","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ai memory","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ai memory","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"for developers","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"for developers","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"integrations","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"integrations","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"chatgpt","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"chatgpt","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"apple intelligence","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"apple intelligence","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ollama","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ollama","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"claude code","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"claude code","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"opencode","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"opencode","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"OpenClaw","depth":11,"bounds":{"left":0.099305555,"top":0.0,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"OpenClaw","depth":13,"bounds":{"left":0.12986112,"top":0.0,"width":0.047222223,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"cline","depth":11,"bounds":{"left":0.099305555,"top":0.0,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"cline","depth":13,"bounds":{"left":0.12986112,"top":0.0,"width":0.021527778,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"continue","depth":11,"bounds":{"left":0.099305555,"top":0.0,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"continue","depth":13,"bounds":{"left":0.12986112,"top":0.0,"width":0.039583333,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"gemini cli","depth":11,"bounds":{"left":0.099305555,"top":0.027777778,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"gemini cli","depth":13,"bounds":{"left":0.12986112,"top":0.037777778,"width":0.043055557,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"obsidian","depth":11,"bounds":{"left":0.099305555,"top":0.06888889,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"obsidian","depth":13,"bounds":{"left":0.12986112,"top":0.078888886,"width":0.038194444,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"msty","depth":11,"bounds":{"left":0.099305555,"top":0.11,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"msty","depth":13,"bounds":{"left":0.12986112,"top":0.12,"width":0.022222223,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"reference","depth":9,"bounds":{"left":0.110416666,"top":0.18555556,"width":0.045138888,"height":0.026666667},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"reference","depth":10,"bounds":{"left":0.110416666,"top":0.18888889,"width":0.045138888,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"api reference","depth":11,"bounds":{"left":0.099305555,"top":0.22333333,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"api reference","depth":13,"bounds":{"left":0.12986112,"top":0.23333333,"width":0.060416665,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"compare","depth":9,"bounds":{"left":0.110416666,"top":0.2988889,"width":0.04097222,"height":0.026666667},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"compare","depth":10,"bounds":{"left":0.110416666,"top":0.30222222,"width":0.04097222,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs pieces","depth":11,"bounds":{"left":0.099305555,"top":0.33666667,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs pieces","depth":13,"bounds":{"left":0.12986112,"top":0.34666666,"width":0.043055557,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs littlebird","depth":11,"bounds":{"left":0.099305555,"top":0.37777779,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs littlebird","depth":13,"bounds":{"left":0.12986112,"top":0.38777778,"width":0.05,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs omi","depth":11,"bounds":{"left":0.099305555,"top":0.4188889,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs omi","depth":13,"bounds":{"left":0.12986112,"top":0.4288889,"width":0.029861111,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs granola","depth":11,"bounds":{"left":0.099305555,"top":0.46,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs granola","depth":13,"bounds":{"left":0.12986112,"top":0.47,"width":0.047222223,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs rewind","depth":11,"bounds":{"left":0.099305555,"top":0.5011111,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs rewind","depth":13,"bounds":{"left":0.12986112,"top":0.51111114,"width":0.04375,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs microsoft recall","depth":11,"bounds":{"left":0.099305555,"top":0.5422222,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs microsoft recall","depth":13,"bounds":{"left":0.12986112,"top":0.55222225,"width":0.084027775,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs limitless","depth":11,"bounds":{"left":0.099305555,"top":0.5833333,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs limitless","depth":13,"bounds":{"left":0.12986112,"top":0.5933333,"width":0.05,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs otter","depth":11,"bounds":{"left":0.099305555,"top":0.6244444,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs otter","depth":13,"bounds":{"left":0.12986112,"top":0.6344444,"width":0.034722224,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs fathom","depth":11,"bounds":{"left":0.099305555,"top":0.66555554,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs fathom","depth":13,"bounds":{"left":0.12986112,"top":0.6755555,"width":0.045138888,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs fireflies","depth":11,"bounds":{"left":0.099305555,"top":0.70666665,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs fireflies","depth":13,"bounds":{"left":0.12986112,"top":0.71666664,"width":0.047222223,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"resources","depth":9,"bounds":{"left":0.110416666,"top":0.7822222,"width":0.046527777,"height":0.026666667},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"resources","depth":10,"bounds":{"left":0.110416666,"top":0.78555554,"width":0.046527777,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"troubleshooting","depth":11,"bounds":{"left":0.099305555,"top":0.82,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"troubleshooting","depth":13,"bounds":{"left":0.12986112,"top":0.83,"width":0.07152778,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"faq","depth":11,"bounds":{"left":0.099305555,"top":0.8611111,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"faq","depth":13,"bounds":{"left":0.12986112,"top":0.8711111,"width":0.014583333,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"contributing","depth":11,"bounds":{"left":0.099305555,"top":0.9022222,"width":0.16736111,"height":0.04},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"contributing","depth":13,"bounds":{"left":0.12986112,"top":0.9122222,"width":0.05486111,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"On this page","depth":10,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"On this page","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"desktop app (recommended)","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"desktop app (recommended)","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"CLI","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CLI","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"access your recorded timeline","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"access your recorded timeline","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"verify it’s running","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"verify it’s running","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"connect to AI","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"connect to AI","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"what’s next?","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"what’s next?","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"get started","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"install screenpipe","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"install screenpipe","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Install screenpipe on macOS, Windows, or Linux. Record everything on screen and search screen history on Mac, Windows, and Linux. Start recording in minutes.","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"want the fastest path? see the","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"5-minute quickstart →","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5-minute quickstart →","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Navigate to header desktop app (recommended)","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Navigate to header","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"desktop app (recommended)","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"download the","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"desktop app","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"desktop app","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and follow the installation instructions. works on macOS, Windows, and Linux.","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"the app manages recording, settings, search, pipes, and AI connections — no terminal needed.","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Navigate to header CLI","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Navigate to header","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CLI","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy the contents from the code block","depth":10,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"npx","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"screenpipe@latest","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"record","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"this starts the screenpipe daemon in the background and continuously records your screen. data is stored in","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"~/.screenpipe/","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"on your local machine.","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Navigate to header access your recorded timeline","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Navigate to header","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"access your recorded timeline","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"after starting the CLI, you have three ways to access your screen history:","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Desktop app (easiest)","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— download the","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe app","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe app","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for a visual timeline and built-in search","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"REST API","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— query recorded content directly via curl or code (see below)","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI assistants","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— connect Claude, Cursor, or other tools via MCP","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Navigate to header verify it’s running","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Navigate to header","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"verify it’s running","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"once screenpipe starts, it serves an API on","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"localhost:3030","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy the contents from the code block","depth":10,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"# check health","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"curl","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://localhost:3030/health","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"# search your screen history","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"curl","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"http://localhost:3030/search\"","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Navigate to header connect to AI","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Navigate to header","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"connect to AI","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"screenpipe works with any AI that supports MCP or HTTP APIs:","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"integration","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"how","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"claude desktop","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"add screenpipe as MCP server (","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"guide","depth":14,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"guide","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"cursor","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"add screenpipe MCP to your project (","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"guide","depth":14,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"guide","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"claude code","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"use screenpipe MCP or curl the API (","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"guide","depth":14,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"guide","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ollama","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"configure in app settings, use any local model","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"integration","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"claude desktop","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"cursor","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"claude code","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ollama","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"how","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"add screenpipe as MCP server (","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"guide","depth":14,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"guide","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"add screenpipe MCP to your project (","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"guide","depth":14,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"guide","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"use screenpipe MCP or curl the API (","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"guide","depth":14,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"guide","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"configure in app settings, use any local model","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Navigate to header what’s next?","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Navigate to header","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"what’s next?","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"search your screen history","depth":11,"bounds":{"left":0.3513889,"top":0.17777778,"width":0.14305556,"height":0.023333333},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"search your screen history","depth":12,"bounds":{"left":0.3513889,"top":0.17777778,"width":0.14305556,"height":0.022222223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— find anything you’ve seen","depth":11,"bounds":{"left":0.49444443,"top":0.17777778,"width":0.15277778,"height":0.022222223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API reference","depth":11,"bounds":{"left":0.3513889,"top":0.21777777,"width":0.072916664,"height":0.023333333},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API reference","depth":12,"bounds":{"left":0.3513889,"top":0.21777777,"width":0.072916664,"height":0.022222223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— REST API endpoints and parameters","depth":11,"bounds":{"left":0.42430556,"top":0.21777777,"width":0.20694445,"height":0.022222223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"troubleshooting","depth":11,"bounds":{"left":0.3513889,"top":0.25777778,"width":0.08472222,"height":0.023333333},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"troubleshooting","depth":12,"bounds":{"left":0.3513889,"top":0.25777778,"width":0.08472222,"height":0.022222223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— fix common issues","depth":11,"bounds":{"left":0.43611112,"top":0.25777778,"width":0.11597222,"height":0.022222223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"join our discord","depth":11,"bounds":{"left":0.3513889,"top":0.29777777,"width":0.083333336,"height":0.023333333},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"join our discord","depth":12,"bounds":{"left":0.3513889,"top":0.29777777,"width":0.083333336,"height":0.022222223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— get help from the community","depth":11,"bounds":{"left":0.43472221,"top":0.29777777,"width":0.16875,"height":0.022222223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"download screenpipe →","depth":10,"bounds":{"left":0.32916668,"top":0.3511111,"width":0.13055556,"height":0.023333333},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"download screenpipe →","depth":11,"bounds":{"left":0.32916668,"top":0.3511111,"width":0.13055556,"height":0.022222223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Was this page helpful?","depth":9,"bounds":{"left":0.32916668,"top":0.4488889,"width":0.103472225,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Yes","depth":8,"bounds":{"left":0.7027778,"top":0.44,"width":0.056944445,"height":0.037777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Yes","depth":10,"bounds":{"left":0.7326389,"top":0.4488889,"width":0.016666668,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"No","depth":8,"bounds":{"left":0.76805556,"top":0.44,"width":0.05347222,"height":0.037777778},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"No","depth":10,"bounds":{"left":0.79791665,"top":0.4488889,"width":0.013194445,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"quickstart","depth":9,"bounds":{"left":0.33055556,"top":0.54888886,"width":0.057638887,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"quickstart","depth":11,"bounds":{"left":0.34097221,"top":0.55,"width":0.047222223,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"use cases","depth":9,"bounds":{"left":0.77013886,"top":0.54888886,"width":0.058333334,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"use cases","depth":11,"bounds":{"left":0.77013886,"top":0.55,"width":0.047916666,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"github","depth":9,"bounds":{"left":0.32916668,"top":0.7122222,"width":0.013888889,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"github","depth":11,"bounds":{"left":0.32847223,"top":0.7133333,"width":0.03263889,"height":0.022222223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"x","depth":9,"bounds":{"left":0.35972223,"top":0.7122222,"width":0.013888889,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"x","depth":11,"bounds":{"left":0.35902777,"top":0.7133333,"width":0.0055555557,"height":0.022222223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"discord","depth":9,"bounds":{"left":0.39027777,"top":0.7122222,"width":0.013888889,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"discord","depth":11,"bounds":{"left":0.38958332,"top":0.7133333,"width":0.03888889,"height":0.022222223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Powered by This documentation is built and hosted on Mintlify, a developer documentation platform","depth":9,"bounds":{"left":0.73888886,"top":0.7122222,"width":0.09097222,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Powered by","depth":11,"bounds":{"left":0.73888886,"top":0.7133333,"width":0.054166667,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This documentation is built and hosted on Mintlify, a developer documentation platform","depth":11,"bounds":{"left":0.73819447,"top":0.7122222,"width":0.26180553,"height":0.02},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"install screenpipe - screenpipe docs","depth":8,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"docs.screenpi.pe/continue","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-8271299722886637248
|
-8625000422661993385
|
app_switch
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
Статус на поръчка в stantek.com - DXP4800PLUS-B5F8
Статус на поръчка в stantek.com - [EMAIL] - Gmail
Stantek
Stantek
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
| Senetic
| Senetic
Stantek
Stantek
| Senetic
| Senetic
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Screenpipe Dashboard
Screenpipe Dashboard
Welcome to Steam
Welcome to Steam
YouTube
YouTube
New Tab
New Tab
Today's Deals
Today's Deals
New Tab
New Tab
Shameless • HBO Max
Shameless • HBO Max
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
install screenpipe - screenpipe docs
install screenpipe - screenpipe docs
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
screenpipe docs home page logo
screenpipe docs
home page
Open search
search screenpipe docs...
⌘
K
pricing
pricing
discord
discord
github
github
download
download
Toggle dark mode
documentation
documentation
api reference
api reference
get started
get started
home
home
quickstart
quickstart
installation
installation
use cases
use cases
architecture
architecture
pipes
pipes
pipe store
pipe store
build pipes
build pipes
pipe permissions
pipe permissions
connect
connect
mcp server
mcp server
mcp apps
mcp apps
connections
connections
cloud sync
cloud sync
cloud archive
cloud archive
teams
teams
use cases
use cases
search screen history
search screen history
meeting transcription
meeting transcription
ai memory
ai memory
for developers
for developers
integrations
integrations
chatgpt
chatgpt
apple intelligence
apple intelligence
ollama
ollama
claude code
claude code
opencode
opencode
OpenClaw
OpenClaw
cline
cline
continue
continue
gemini cli
gemini cli
obsidian
obsidian
msty
msty
reference
reference
api reference
api reference
compare
compare
vs pieces
vs pieces
vs littlebird
vs littlebird
vs omi
vs omi
vs granola
vs granola
vs rewind
vs rewind
vs microsoft recall
vs microsoft recall
vs limitless
vs limitless
vs otter
vs otter
vs fathom
vs fathom
vs fireflies
vs fireflies
resources
resources
troubleshooting
troubleshooting
faq
faq
contributing
contributing
On this page
On this page
desktop app (recommended)
desktop app (recommended)
CLI
CLI
access your recorded timeline
access your recorded timeline
verify it’s running
verify it’s running
connect to AI
connect to AI
what’s next?
what’s next?
get started
install screenpipe
install screenpipe
Install screenpipe on macOS, Windows, or Linux. Record everything on screen and search screen history on Mac, Windows, and Linux. Start recording in minutes.
want the fastest path? see the
5-minute quickstart →
5-minute quickstart →
Navigate to header desktop app (recommended)
Navigate to header
desktop app (recommended)
download the
desktop app
desktop app
and follow the installation instructions. works on macOS, Windows, and Linux.
the app manages recording, settings, search, pipes, and AI connections — no terminal needed.
Navigate to header CLI
Navigate to header
CLI
Copy the contents from the code block
npx
screenpipe@latest
record
this starts the screenpipe daemon in the background and continuously records your screen. data is stored in
~/.screenpipe/
on your local machine.
Navigate to header access your recorded timeline
Navigate to header
access your recorded timeline
after starting the CLI, you have three ways to access your screen history:
Desktop app (easiest)
— download the
screenpipe app
screenpipe app
for a visual timeline and built-in search
REST API
— query recorded content directly via curl or code (see below)
AI assistants
— connect Claude, Cursor, or other tools via MCP
Navigate to header verify it’s running
Navigate to header
verify it’s running
once screenpipe starts, it serves an API on
localhost:3030
:
Copy the contents from the code block
# check health
curl
http://localhost:3030/health
# search your screen history
curl
"http://localhost:3030/search"
Navigate to header connect to AI
Navigate to header
connect to AI
screenpipe works with any AI that supports MCP or HTTP APIs:
integration
how
claude desktop
add screenpipe as MCP server (
guide
guide
)
cursor
add screenpipe MCP to your project (
guide
guide
)
claude code
use screenpipe MCP or curl the API (
guide
guide
)
ollama
configure in app settings, use any local model
integration
claude desktop
cursor
claude code
ollama
how
add screenpipe as MCP server (
guide
guide
)
add screenpipe MCP to your project (
guide
guide
)
use screenpipe MCP or curl the API (
guide
guide
)
configure in app settings, use any local model
Navigate to header what’s next?
Navigate to header
what’s next?
search your screen history
search your screen history
— find anything you’ve seen
API reference
API reference
— REST API endpoints and parameters
troubleshooting
troubleshooting
— fix common issues
join our discord
join our discord
— get help from the community
download screenpipe →
download screenpipe →
Was this page helpful?
Yes
Yes
No
No
quickstart
quickstart
use cases
use cases
github
github
x
x
discord
discord
Powered by This documentation is built and hosted on Mintlify, a developer documentation platform
Powered by
This documentation is built and hosted on Mintlify, a developer documentation platform
install screenpipe - screenpipe docs
docs.screenpi.pe/continue...
|
NULL
|
|
51004
|
1100
|
19
|
2026-04-18T10:38:56.861459+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-18/1776 /Users/lukas/.screenpipe/data/data/2026-04-18/1776508736861_m2.jpg...
|
Firefox
|
install screenpipe - screenpipe docs — Personal
|
True
|
docs.screenpi.pe/getting-started
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
Статус на поръчка в stantek.com - DXP4800PLUS-B5F8
Статус на поръчка в stantek.com - [EMAIL] - Gmail
Stantek
Stantek
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
| Senetic
| Senetic
Stantek
Stantek
| Senetic
| Senetic
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Screenpipe Dashboard
Screenpipe Dashboard
Welcome to Steam
Welcome to Steam
YouTube
YouTube
New Tab
New Tab
Today's Deals
Today's Deals
New Tab
New Tab
Shameless • HBO Max
Shameless • HBO Max
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
install screenpipe - screenpipe docs
install screenpipe - screenpipe docs
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
screenpipe docs home page logo
screenpipe docs
home page
Open search
search screenpipe docs...
⌘
K
pricing
pricing
discord
discord
github
github
download
download
Toggle dark mode
documentation
documentation
api reference
api reference
get started
get started
home
home
quickstart
quickstart
installation
installation
use cases
use cases
architecture
architecture
pipes
pipes
pipe store
pipe store
build pipes
build pipes
pipe permissions
pipe permissions
connect
connect
mcp server
mcp server
mcp apps
mcp apps
connections
connections
cloud sync
cloud sync
cloud archive
cloud archive
teams
teams
use cases
use cases
search screen history
search screen history
meeting transcription
meeting transcription
ai memory
ai memory
for developers
for developers
integrations
integrations
chatgpt
chatgpt
apple intelligence
apple intelligence
ollama
ollama
claude code
claude code
opencode
opencode
OpenClaw
OpenClaw
cline
cline
continue
continue
gemini cli
gemini cli
obsidian
obsidian
msty
msty
reference
reference
api reference
api reference
compare
compare
vs pieces
vs pieces
vs littlebird
vs littlebird
vs omi
vs omi
vs granola
vs granola
vs rewind
vs rewind
vs microsoft recall
vs microsoft recall
vs limitless
vs limitless
vs otter
vs otter
vs fathom
vs fathom
vs fireflies
vs fireflies
resources
resources
troubleshooting
troubleshooting
faq
faq
contributing
contributing
On this page
On this page
desktop app (recommended)
desktop app (recommended)
CLI
CLI
access your recorded timeline
access your recorded timeline
verify it’s running
verify it’s running
connect to AI
connect to AI
what’s next?
what’s next?
get started
install screenpipe
install screenpipe
Install screenpipe on macOS, Windows, or Linux. Record everything on screen and search screen history on Mac, Windows, and Linux. Start recording in minutes.
want the fastest path? see the
5-minute quickstart →
5-minute quickstart →
Navigate to header desktop app (recommended)
Navigate to header
desktop app (recommended)
download the
desktop app
desktop app
and follow the installation instructions. works on macOS, Windows, and Linux.
the app manages recording, settings, search, pipes, and AI connections — no terminal needed.
Navigate to header CLI
Navigate to header
CLI
Copy the contents from the code block
npx
screenpipe@latest
record
this starts the screenpipe daemon in the background and continuously records your screen. data is stored in
~/.screenpipe/
on your local machine.
Navigate to header access your recorded timeline
Navigate to header
access your recorded timeline
after starting the CLI, you have three ways to access your screen history:
Desktop app (easiest)
— download the
screenpipe app
screenpipe app
for a visual timeline and built-in search
REST API
— query recorded content directly via curl or code (see below)
AI assistants
— connect Claude, Cursor, or other tools via MCP
Navigate to header verify it’s running
Navigate to header
verify it’s running
once screenpipe starts, it serves an API on
localhost:3030
:
Copy the contents from the code block
# check health
curl
http://localhost:3030/health
# search your screen history
curl
"http://localhost:3030/search"
Navigate to header connect to AI
Navigate to header
connect to AI
screenpipe works with any AI that supports MCP or HTTP APIs:
integration
how
claude desktop
add screenpipe as MCP server (
guide
guide
)
cursor
add screenpipe MCP to your project (
guide
guide
)
claude code
use screenpipe MCP or curl the API (
guide
guide
)
ollama
configure in app settings, use any local model
integration
claude desktop
cursor
claude code
ollama
how
add screenpipe as MCP server (
guide
guide
)
add screenpipe MCP to your project (
guide
guide
)
use screenpipe MCP or curl the API (
guide
guide
)
configure in app settings, use any local model
Navigate to header what’s next?
Navigate to header
what’s next?
search your screen history
search your screen history
— find anything you’ve seen
API reference
API reference
— REST API endpoints and parameters
troubleshooting
troubleshooting
— fix common issues
join our discord
join our discord
— get help from the community
download screenpipe →
download screenpipe →
Was this page helpful?
Yes
Yes
No
No
quickstart
quickstart
use cases
use cases
github
github
x
x...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.00234375,"top":0.045138888,"width":0.064453125,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Статус на поръчка в stantek.com - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.06679688,"top":0.045138888,"width":0.06484375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Stantek","depth":4,"bounds":{"left":0.0,"top":0.08263889,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Stantek","depth":5,"bounds":{"left":0.015625,"top":0.09236111,"width":0.015625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.0,"top":0.11111111,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.015625,"top":0.12083333,"width":0.30859375,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"| Senetic","depth":4,"bounds":{"left":0.0,"top":0.13958333,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"| Senetic","depth":5,"bounds":{"left":0.015625,"top":0.14930555,"width":0.017578125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Stantek","depth":4,"bounds":{"left":0.0,"top":0.16805555,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Stantek","depth":5,"bounds":{"left":0.015625,"top":0.17777778,"width":0.015625,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"| Senetic","depth":4,"bounds":{"left":0.0,"top":0.19652778,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"| Senetic","depth":5,"bounds":{"left":0.015625,"top":0.20625,"width":0.017578125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Твърд диск, Western Digital Red 6TB Plus ( 3.5\", 256MB, 5400","depth":4,"bounds":{"left":0.0,"top":0.225,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Твърд диск, Western Digital Red 6TB Plus ( 3.5\", 256MB, 5400","depth":5,"bounds":{"left":0.015625,"top":0.23472223,"width":0.12929687,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.0,"top":0.2534722,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.015625,"top":0.26319444,"width":0.044140626,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe Dashboard","depth":4,"bounds":{"left":0.0,"top":0.28194445,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe Dashboard","depth":5,"bounds":{"left":0.015625,"top":0.29166666,"width":0.046484374,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Welcome to Steam","depth":4,"bounds":{"left":0.0,"top":0.31041667,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome to Steam","depth":5,"bounds":{"left":0.015625,"top":0.3201389,"width":0.03828125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"YouTube","depth":4,"bounds":{"left":0.0,"top":0.33888888,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"YouTube","depth":5,"bounds":{"left":0.015625,"top":0.34861112,"width":0.0171875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.3673611,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.015625,"top":0.37708333,"width":0.017578125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.0,"top":0.39583334,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.015625,"top":0.40555555,"width":0.028515626,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.42430556,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.015625,"top":0.4340278,"width":0.017578125,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Shameless • HBO Max","depth":4,"bounds":{"left":0.0,"top":0.45277777,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Shameless • HBO Max","depth":5,"bounds":{"left":0.015625,"top":0.4625,"width":0.045703124,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.0,"top":0.48125,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.015625,"top":0.49097222,"width":0.26523438,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"install screenpipe - screenpipe docs","depth":4,"bounds":{"left":0.0,"top":0.50972223,"width":0.13359375,"height":0.028472222},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"install screenpipe - screenpipe docs","depth":5,"bounds":{"left":0.015625,"top":0.51944447,"width":0.07421875,"height":0.009722223},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.119140625,"top":0.5159722,"width":0.009375,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.003125,"top":0.5395833,"width":0.12734374,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.003125,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.01640625,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.029296875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0421875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.05546875,"top":0.97430557,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Skip to main content","depth":6,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to main content","depth":7,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe docs home page logo","depth":7,"bounds":{"left":0.2953125,"top":0.057638887,"width":0.0109375,"height":0.019444445},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe docs","depth":9,"bounds":{"left":0.29492188,"top":0.058333334,"width":0.048828125,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"home page","depth":9,"bounds":{"left":0.34375,"top":0.058333334,"width":0.03515625,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open search","depth":7,"bounds":{"left":0.4765625,"top":0.05486111,"width":0.175,"height":0.025},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"search screenpipe docs...","depth":9,"bounds":{"left":0.49140626,"top":0.06111111,"width":0.06640625,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"⌘","depth":9,"bounds":{"left":0.6390625,"top":0.061805554,"width":0.004296875,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"K","depth":9,"bounds":{"left":0.64335936,"top":0.061805554,"width":0.003515625,"height":0.010416667},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pricing","depth":10,"bounds":{"left":0.6875,"top":0.060416665,"width":0.01796875,"height":0.013888889},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pricing","depth":11,"bounds":{"left":0.6875,"top":0.06111111,"width":0.01796875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"discord","depth":10,"bounds":{"left":0.71484375,"top":0.060416665,"width":0.01953125,"height":0.013888889},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"discord","depth":11,"bounds":{"left":0.71484375,"top":0.06111111,"width":0.01953125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"github","depth":10,"bounds":{"left":0.74375,"top":0.060416665,"width":0.016796876,"height":0.013888889},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"github","depth":11,"bounds":{"left":0.74375,"top":0.06111111,"width":0.016796876,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"download","depth":10,"bounds":{"left":0.7699219,"top":0.05625,"width":0.044140626,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"download","depth":12,"bounds":{"left":0.77617186,"top":0.06111111,"width":0.02578125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Toggle dark mode","depth":7,"bounds":{"left":0.8203125,"top":0.05625,"width":0.0125,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"documentation","depth":7,"bounds":{"left":0.2953125,"top":0.08958333,"width":0.0390625,"height":0.033333335},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"documentation","depth":8,"bounds":{"left":0.2953125,"top":0.1,"width":0.0390625,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"api reference","depth":7,"bounds":{"left":0.34375,"top":0.08958333,"width":0.034765624,"height":0.033333335},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"api reference","depth":8,"bounds":{"left":0.34375,"top":0.1,"width":0.034765624,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"get started","depth":9,"bounds":{"left":0.2953125,"top":0.14513889,"width":0.028515626,"height":0.016666668},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"get started","depth":10,"bounds":{"left":0.2953125,"top":0.14722222,"width":0.028515626,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"home","depth":11,"bounds":{"left":0.2890625,"top":0.16875,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"home","depth":13,"bounds":{"left":0.30625,"top":0.175,"width":0.014453125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"quickstart","depth":11,"bounds":{"left":0.2890625,"top":0.19444445,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"quickstart","depth":13,"bounds":{"left":0.30625,"top":0.20069444,"width":0.025390625,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"installation","depth":11,"bounds":{"left":0.2890625,"top":0.22013889,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"installation","depth":13,"bounds":{"left":0.30625,"top":0.22638889,"width":0.02734375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"use cases","depth":11,"bounds":{"left":0.2890625,"top":0.24583334,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"use cases","depth":13,"bounds":{"left":0.30625,"top":0.25208333,"width":0.02578125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"architecture","depth":11,"bounds":{"left":0.2890625,"top":0.27152777,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture","depth":13,"bounds":{"left":0.30625,"top":0.2777778,"width":0.030859375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"pipes","depth":9,"bounds":{"left":0.2953125,"top":0.31875,"width":0.014453125,"height":0.016666668},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"pipes","depth":10,"bounds":{"left":0.2953125,"top":0.32083333,"width":0.014453125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipe store","depth":11,"bounds":{"left":0.2890625,"top":0.34236112,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipe store","depth":13,"bounds":{"left":0.30625,"top":0.34861112,"width":0.02578125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"build pipes","depth":11,"bounds":{"left":0.2890625,"top":0.36805555,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"build pipes","depth":13,"bounds":{"left":0.30625,"top":0.37430555,"width":0.028125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"pipe permissions","depth":11,"bounds":{"left":0.2890625,"top":0.39375,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"pipe permissions","depth":13,"bounds":{"left":0.30625,"top":0.4,"width":0.04375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"connect","depth":9,"bounds":{"left":0.2953125,"top":0.4409722,"width":0.021484375,"height":0.016666668},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"connect","depth":10,"bounds":{"left":0.2953125,"top":0.44305557,"width":0.021484375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"mcp server","depth":11,"bounds":{"left":0.2890625,"top":0.46458334,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"mcp server","depth":13,"bounds":{"left":0.30625,"top":0.47083333,"width":0.02890625,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"mcp apps","depth":11,"bounds":{"left":0.2890625,"top":0.49027777,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"mcp apps","depth":13,"bounds":{"left":0.30625,"top":0.4965278,"width":0.025390625,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"connections","depth":11,"bounds":{"left":0.2890625,"top":0.5159722,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"connections","depth":13,"bounds":{"left":0.30625,"top":0.5222222,"width":0.031640626,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"cloud sync","depth":11,"bounds":{"left":0.2890625,"top":0.5416667,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"cloud sync","depth":13,"bounds":{"left":0.30625,"top":0.54791665,"width":0.028125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"cloud archive","depth":11,"bounds":{"left":0.2890625,"top":0.5673611,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"cloud archive","depth":13,"bounds":{"left":0.30625,"top":0.57361114,"width":0.034375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"teams","depth":11,"bounds":{"left":0.2890625,"top":0.59305555,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"teams","depth":13,"bounds":{"left":0.30625,"top":0.59930557,"width":0.015625,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"use cases","depth":9,"bounds":{"left":0.2953125,"top":0.6402778,"width":0.0265625,"height":0.016666668},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"use cases","depth":10,"bounds":{"left":0.2953125,"top":0.6423611,"width":0.0265625,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"search screen history","depth":11,"bounds":{"left":0.2890625,"top":0.6638889,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"search screen history","depth":13,"bounds":{"left":0.30625,"top":0.6701389,"width":0.055859376,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"meeting transcription","depth":11,"bounds":{"left":0.2890625,"top":0.68958336,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"meeting transcription","depth":13,"bounds":{"left":0.30625,"top":0.6958333,"width":0.0546875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ai memory","depth":11,"bounds":{"left":0.2890625,"top":0.7152778,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ai memory","depth":13,"bounds":{"left":0.30625,"top":0.72152776,"width":0.026953125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"for developers","depth":11,"bounds":{"left":0.2890625,"top":0.7409722,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"for developers","depth":13,"bounds":{"left":0.30625,"top":0.74722224,"width":0.037109375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"integrations","depth":9,"bounds":{"left":0.2953125,"top":0.7881944,"width":0.03125,"height":0.016666668},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"integrations","depth":10,"bounds":{"left":0.2953125,"top":0.7902778,"width":0.03125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"chatgpt","depth":11,"bounds":{"left":0.2890625,"top":0.81180555,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"chatgpt","depth":13,"bounds":{"left":0.30625,"top":0.81805557,"width":0.01953125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"apple intelligence","depth":11,"bounds":{"left":0.2890625,"top":0.8375,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"apple intelligence","depth":13,"bounds":{"left":0.30625,"top":0.84375,"width":0.0453125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"ollama","depth":11,"bounds":{"left":0.2890625,"top":0.86319447,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"ollama","depth":13,"bounds":{"left":0.30625,"top":0.86944443,"width":0.016796876,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"claude code","depth":11,"bounds":{"left":0.2890625,"top":0.8888889,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"claude code","depth":13,"bounds":{"left":0.30625,"top":0.89513886,"width":0.031640626,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"opencode","depth":11,"bounds":{"left":0.2890625,"top":0.9145833,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"opencode","depth":13,"bounds":{"left":0.30625,"top":0.92083335,"width":0.02578125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"OpenClaw","depth":11,"bounds":{"left":0.2890625,"top":0.94027776,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"OpenClaw","depth":13,"bounds":{"left":0.30625,"top":0.9465278,"width":0.0265625,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"cline","depth":11,"bounds":{"left":0.2890625,"top":0.96597224,"width":0.09414063,"height":0.025},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"cline","depth":13,"bounds":{"left":0.30625,"top":0.9722222,"width":0.012109375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"continue","depth":11,"bounds":{"left":0.2890625,"top":0.9916667,"width":0.09414063,"height":0.008333325},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"continue","depth":13,"bounds":{"left":0.30625,"top":0.99791664,"width":0.022265624,"height":0.0020833611},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"gemini cli","depth":11,"bounds":{"left":0.2890625,"top":1.0,"width":0.09414063,"height":-0.017361164},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"gemini cli","depth":13,"bounds":{"left":0.30625,"top":1.0,"width":0.02421875,"height":-0.023611069},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"obsidian","depth":11,"bounds":{"left":0.2890625,"top":1.0,"width":0.09414063,"height":-0.043055534},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"obsidian","depth":13,"bounds":{"left":0.30625,"top":1.0,"width":0.021484375,"height":-0.04930556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"msty","depth":11,"bounds":{"left":0.2890625,"top":1.0,"width":0.09414063,"height":-0.068750024},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"msty","depth":13,"bounds":{"left":0.30625,"top":1.0,"width":0.0125,"height":-0.07500005},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"reference","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"reference","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"api reference","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"api reference","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"compare","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"compare","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs pieces","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs pieces","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs littlebird","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs littlebird","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs omi","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs omi","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs granola","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs granola","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs rewind","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs rewind","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs microsoft recall","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs microsoft recall","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs limitless","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs limitless","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs otter","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs otter","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs fathom","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs fathom","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"vs fireflies","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"vs fireflies","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"resources","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"resources","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"troubleshooting","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"troubleshooting","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"faq","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"faq","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"contributing","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"contributing","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"On this page","depth":10,"bounds":{"left":0.7359375,"top":0.15069444,"width":0.040625,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"On this page","depth":12,"bounds":{"left":0.74375,"top":0.15277778,"width":0.0328125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"desktop app (recommended)","depth":12,"bounds":{"left":0.7359375,"top":0.17291667,"width":0.103125,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"desktop app (recommended)","depth":13,"bounds":{"left":0.7359375,"top":0.17777778,"width":0.07578125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"CLI","depth":12,"bounds":{"left":0.7359375,"top":0.19513889,"width":0.103125,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"CLI","depth":13,"bounds":{"left":0.7359375,"top":0.2,"width":0.00859375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"access your recorded timeline","depth":12,"bounds":{"left":0.7359375,"top":0.21736111,"width":0.103125,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"access your recorded timeline","depth":13,"bounds":{"left":0.7421875,"top":0.22222222,"width":0.07773437,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"verify it’s running","depth":12,"bounds":{"left":0.7359375,"top":0.23958333,"width":0.103125,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"verify it’s running","depth":13,"bounds":{"left":0.7359375,"top":0.24444444,"width":0.044921875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"connect to AI","depth":12,"bounds":{"left":0.7359375,"top":0.26180556,"width":0.103125,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"connect to AI","depth":13,"bounds":{"left":0.7359375,"top":0.26666668,"width":0.034375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"what’s next?","depth":12,"bounds":{"left":0.7359375,"top":0.28402779,"width":0.103125,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"what’s next?","depth":13,"bounds":{"left":0.7359375,"top":0.2888889,"width":0.032421876,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"get started","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"install screenpipe","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"install screenpipe","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Install screenpipe on macOS, Windows, or Linux. Record everything on screen and search screen history on Mac, Windows, and Linux. Start recording in minutes.","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"want the fastest path? see the","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"5-minute quickstart →","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5-minute quickstart →","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Navigate to header desktop app (recommended)","depth":9,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Navigate to header","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"desktop app (recommended)","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"download the","depth":10,"bounds":{"left":0.41835937,"top":0.0,"width":0.041796874,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"desktop app","depth":10,"bounds":{"left":0.46015626,"top":0.0,"width":0.0375,"height":0.014583333},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"desktop app","depth":11,"bounds":{"left":0.46015626,"top":0.0,"width":0.0375,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and follow the installation instructions. works on macOS, Windows, and Linux.","depth":10,"bounds":{"left":0.41835937,"top":0.0,"width":0.27851564,"height":0.033333335},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"the app manages recording, settings, search, pipes, and AI connections — no terminal needed.","depth":10,"bounds":{"left":0.41835937,"top":0.0,"width":0.2800781,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Navigate to header CLI","depth":9,"bounds":{"left":0.41835937,"top":0.01875,"width":0.28164062,"height":0.022222223},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Navigate to header","depth":11,"bounds":{"left":0.40273437,"top":0.01875,"width":0.015625,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.40195313,"top":0.019444445,"width":0.001171875,"height":0.020833334},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CLI","depth":11,"bounds":{"left":0.41835937,"top":0.019444445,"width":0.0140625,"height":0.020833334},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy the contents from the code block","depth":10,"bounds":{"left":0.6832031,"top":0.06388889,"width":0.01015625,"height":0.018055556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"npx","depth":12,"bounds":{"left":0.425,"top":0.06666667,"width":0.009765625,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"screenpipe@latest","depth":12,"bounds":{"left":0.43476564,"top":0.06666667,"width":0.058984376,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"record","depth":12,"bounds":{"left":0.49375,"top":0.06666667,"width":0.023046875,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"this starts the screenpipe daemon in the background and continuously records your screen. data is stored in","depth":10,"bounds":{"left":0.41835937,"top":0.11736111,"width":0.27070314,"height":0.033333335},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"~/.screenpipe/","depth":11,"bounds":{"left":0.4699219,"top":0.1375,"width":0.04609375,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"on your local machine.","depth":10,"bounds":{"left":0.5191406,"top":0.13680555,"width":0.068359375,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Navigate to header access your recorded timeline","depth":9,"bounds":{"left":0.41835937,"top":0.18680556,"width":0.28164062,"height":0.019444445},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Navigate to header","depth":11,"bounds":{"left":0.40273437,"top":0.18680556,"width":0.015625,"height":0.019444445},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.40195313,"top":0.18819444,"width":0.001171875,"height":0.017361112},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"access your recorded timeline","depth":11,"bounds":{"left":0.41835937,"top":0.18819444,"width":0.10820313,"height":0.017361112},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"after starting the CLI, you have three ways to access your screen history:","depth":10,"bounds":{"left":0.41835937,"top":0.21736111,"width":0.215625,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Desktop app (easiest)","depth":12,"bounds":{"left":0.43398437,"top":0.25069445,"width":0.06601562,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— download the","depth":11,"bounds":{"left":0.5,"top":0.25069445,"width":0.0515625,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"screenpipe app","depth":11,"bounds":{"left":0.5515625,"top":0.25069445,"width":0.046484374,"height":0.014583333},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"screenpipe app","depth":12,"bounds":{"left":0.5515625,"top":0.25069445,"width":0.046484374,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for a visual timeline and built-in search","depth":11,"bounds":{"left":0.43398437,"top":0.25069445,"width":0.25820312,"height":0.033333335},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"REST API","depth":12,"bounds":{"left":0.43398437,"top":0.2951389,"width":0.027734375,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— query recorded content directly via curl or code (see below)","depth":11,"bounds":{"left":0.46171874,"top":0.2951389,"width":0.1875,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI assistants","depth":12,"bounds":{"left":0.43398437,"top":0.3201389,"width":0.038671874,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— connect Claude, Cursor, or other tools via MCP","depth":11,"bounds":{"left":0.47265625,"top":0.3201389,"width":0.1484375,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Navigate to header verify it’s running","depth":9,"bounds":{"left":0.41835937,"top":0.37013888,"width":0.28164062,"height":0.022222223},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Navigate to header","depth":11,"bounds":{"left":0.40273437,"top":0.37013888,"width":0.015625,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.40195313,"top":0.37083334,"width":0.001171875,"height":0.020833334},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"verify it’s running","depth":11,"bounds":{"left":0.41835937,"top":0.37083334,"width":0.07460938,"height":0.020833334},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"once screenpipe starts, it serves an API on","depth":10,"bounds":{"left":0.41835937,"top":0.40625,"width":0.12773438,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"localhost:3030","depth":11,"bounds":{"left":0.5492188,"top":0.40694445,"width":0.04609375,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":","depth":10,"bounds":{"left":0.5984375,"top":0.40625,"width":0.001953125,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy the contents from the code block","depth":10,"bounds":{"left":0.6832031,"top":0.44583333,"width":0.01015625,"height":0.018055556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"# check health","depth":12,"bounds":{"left":0.425,"top":0.4486111,"width":0.045703124,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"curl","depth":12,"bounds":{"left":0.425,"top":0.4652778,"width":0.012890625,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"http://localhost:3030/health","depth":12,"bounds":{"left":0.43789062,"top":0.4652778,"width":0.0953125,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"# search your screen history","depth":12,"bounds":{"left":0.425,"top":0.49861112,"width":0.091796875,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"curl","depth":12,"bounds":{"left":0.425,"top":0.5152778,"width":0.012890625,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"\"http://localhost:3030/search\"","depth":12,"bounds":{"left":0.43789062,"top":0.5152778,"width":0.10195313,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Navigate to header connect to AI","depth":9,"bounds":{"left":0.41835937,"top":0.57430553,"width":0.28164062,"height":0.022222223},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Navigate to header","depth":11,"bounds":{"left":0.40273437,"top":0.57430553,"width":0.015625,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.40195313,"top":0.575,"width":0.001171875,"height":0.020833334},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"connect to AI","depth":11,"bounds":{"left":0.41835937,"top":0.575,"width":0.05703125,"height":0.020833334},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"screenpipe works with any AI that supports MCP or HTTP APIs:","depth":10,"bounds":{"left":0.41835937,"top":0.61041665,"width":0.18671875,"height":0.013888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"integration","depth":14,"bounds":{"left":0.41835937,"top":0.6527778,"width":0.028515626,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"how","depth":14,"bounds":{"left":0.51289064,"top":0.6527778,"width":0.011328125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"claude desktop","depth":15,"bounds":{"left":0.41835937,"top":0.6784722,"width":0.040234376,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"add screenpipe as MCP server (","depth":14,"bounds":{"left":0.51289064,"top":0.6784722,"width":0.08320312,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"guide","depth":14,"bounds":{"left":0.5960938,"top":0.6784722,"width":0.01484375,"height":0.013194445},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"guide","depth":15,"bounds":{"left":0.5960938,"top":0.6784722,"width":0.01484375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"bounds":{"left":0.6109375,"top":0.6784722,"width":0.001953125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"cursor","depth":15,"bounds":{"left":0.41835937,"top":0.70416665,"width":0.0171875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"add screenpipe MCP to your project (","depth":14,"bounds":{"left":0.51289064,"top":0.70416665,"width":0.096875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"guide","depth":14,"bounds":{"left":0.60976565,"top":0.70416665,"width":0.01484375,"height":0.013194445},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"guide","depth":15,"bounds":{"left":0.60976565,"top":0.70416665,"width":0.01484375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"bounds":{"left":0.62460935,"top":0.70416665,"width":0.001953125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"claude code","depth":15,"bounds":{"left":0.41835937,"top":0.72986114,"width":0.03203125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"use screenpipe MCP or curl the API (","depth":14,"bounds":{"left":0.51289064,"top":0.72986114,"width":0.0953125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"guide","depth":14,"bounds":{"left":0.6082031,"top":0.72986114,"width":0.01484375,"height":0.013194445},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"guide","depth":15,"bounds":{"left":0.6082031,"top":0.72986114,"width":0.01484375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"bounds":{"left":0.6230469,"top":0.72986114,"width":0.001953125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ollama","depth":15,"bounds":{"left":0.41835937,"top":0.75555557,"width":0.0171875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"configure in app settings, use any local model","depth":14,"bounds":{"left":0.51289064,"top":0.75555557,"width":0.11835937,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"integration","depth":14,"bounds":{"left":0.41835937,"top":0.6527778,"width":0.028515626,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"claude desktop","depth":15,"bounds":{"left":0.41835937,"top":0.6784722,"width":0.040234376,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"cursor","depth":15,"bounds":{"left":0.41835937,"top":0.70416665,"width":0.0171875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"claude code","depth":15,"bounds":{"left":0.41835937,"top":0.72986114,"width":0.03203125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ollama","depth":15,"bounds":{"left":0.41835937,"top":0.75555557,"width":0.0171875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"how","depth":14,"bounds":{"left":0.51289064,"top":0.6527778,"width":0.011328125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"add screenpipe as MCP server (","depth":14,"bounds":{"left":0.51289064,"top":0.6784722,"width":0.08320312,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"guide","depth":14,"bounds":{"left":0.5960938,"top":0.6784722,"width":0.01484375,"height":0.013194445},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"guide","depth":15,"bounds":{"left":0.5960938,"top":0.6784722,"width":0.01484375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"bounds":{"left":0.6109375,"top":0.6784722,"width":0.001953125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"add screenpipe MCP to your project (","depth":14,"bounds":{"left":0.51289064,"top":0.70416665,"width":0.096875,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"guide","depth":14,"bounds":{"left":0.60976565,"top":0.70416665,"width":0.01484375,"height":0.013194445},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"guide","depth":15,"bounds":{"left":0.60976565,"top":0.70416665,"width":0.01484375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"bounds":{"left":0.62460935,"top":0.70416665,"width":0.001953125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"use screenpipe MCP or curl the API (","depth":14,"bounds":{"left":0.51289064,"top":0.72986114,"width":0.0953125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"guide","depth":14,"bounds":{"left":0.6082031,"top":0.72986114,"width":0.01484375,"height":0.013194445},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"guide","depth":15,"bounds":{"left":0.6082031,"top":0.72986114,"width":0.01484375,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"bounds":{"left":0.6230469,"top":0.72986114,"width":0.001953125,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"configure in app settings, use any local model","depth":14,"bounds":{"left":0.51289064,"top":0.75555557,"width":0.11835937,"height":0.0125},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Navigate to header what’s next?","depth":9,"bounds":{"left":0.41835937,"top":0.8194444,"width":0.28164062,"height":0.022222223},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Navigate to header","depth":11,"bounds":{"left":0.40273437,"top":0.8194444,"width":0.015625,"height":0.022222223},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.40195313,"top":0.8201389,"width":0.001171875,"height":0.020833334},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"what’s next?","depth":11,"bounds":{"left":0.41835937,"top":0.8201389,"width":0.05390625,"height":0.020833334},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"search your screen history","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"search your screen history","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— find anything you’ve seen","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API reference","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API reference","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— REST API endpoints and parameters","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"troubleshooting","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"troubleshooting","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— fix common issues","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"join our discord","depth":11,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"join our discord","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"— get help from the community","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"download screenpipe →","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"download screenpipe →","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Was this page helpful?","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Yes","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Yes","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"No","depth":8,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"No","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"quickstart","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"quickstart","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"use cases","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"use cases","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"github","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"github","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"x","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"x","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
4204987852590650598
|
-4013314404502516649
|
app_switch
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
Статус на поръчка в stantek.com - DXP4800PLUS-B5F8
Статус на поръчка в stantek.com - [EMAIL] - Gmail
Stantek
Stantek
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
| Senetic
| Senetic
Stantek
Stantek
| Senetic
| Senetic
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
Твърд диск, Western Digital Red 6TB Plus ( 3.5", 256MB, 5400
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Screenpipe Dashboard
Screenpipe Dashboard
Welcome to Steam
Welcome to Steam
YouTube
YouTube
New Tab
New Tab
Today's Deals
Today's Deals
New Tab
New Tab
Shameless • HBO Max
Shameless • HBO Max
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
install screenpipe - screenpipe docs
install screenpipe - screenpipe docs
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
Skip to main content
Skip to main content
screenpipe docs home page logo
screenpipe docs
home page
Open search
search screenpipe docs...
⌘
K
pricing
pricing
discord
discord
github
github
download
download
Toggle dark mode
documentation
documentation
api reference
api reference
get started
get started
home
home
quickstart
quickstart
installation
installation
use cases
use cases
architecture
architecture
pipes
pipes
pipe store
pipe store
build pipes
build pipes
pipe permissions
pipe permissions
connect
connect
mcp server
mcp server
mcp apps
mcp apps
connections
connections
cloud sync
cloud sync
cloud archive
cloud archive
teams
teams
use cases
use cases
search screen history
search screen history
meeting transcription
meeting transcription
ai memory
ai memory
for developers
for developers
integrations
integrations
chatgpt
chatgpt
apple intelligence
apple intelligence
ollama
ollama
claude code
claude code
opencode
opencode
OpenClaw
OpenClaw
cline
cline
continue
continue
gemini cli
gemini cli
obsidian
obsidian
msty
msty
reference
reference
api reference
api reference
compare
compare
vs pieces
vs pieces
vs littlebird
vs littlebird
vs omi
vs omi
vs granola
vs granola
vs rewind
vs rewind
vs microsoft recall
vs microsoft recall
vs limitless
vs limitless
vs otter
vs otter
vs fathom
vs fathom
vs fireflies
vs fireflies
resources
resources
troubleshooting
troubleshooting
faq
faq
contributing
contributing
On this page
On this page
desktop app (recommended)
desktop app (recommended)
CLI
CLI
access your recorded timeline
access your recorded timeline
verify it’s running
verify it’s running
connect to AI
connect to AI
what’s next?
what’s next?
get started
install screenpipe
install screenpipe
Install screenpipe on macOS, Windows, or Linux. Record everything on screen and search screen history on Mac, Windows, and Linux. Start recording in minutes.
want the fastest path? see the
5-minute quickstart →
5-minute quickstart →
Navigate to header desktop app (recommended)
Navigate to header
desktop app (recommended)
download the
desktop app
desktop app
and follow the installation instructions. works on macOS, Windows, and Linux.
the app manages recording, settings, search, pipes, and AI connections — no terminal needed.
Navigate to header CLI
Navigate to header
CLI
Copy the contents from the code block
npx
screenpipe@latest
record
this starts the screenpipe daemon in the background and continuously records your screen. data is stored in
~/.screenpipe/
on your local machine.
Navigate to header access your recorded timeline
Navigate to header
access your recorded timeline
after starting the CLI, you have three ways to access your screen history:
Desktop app (easiest)
— download the
screenpipe app
screenpipe app
for a visual timeline and built-in search
REST API
— query recorded content directly via curl or code (see below)
AI assistants
— connect Claude, Cursor, or other tools via MCP
Navigate to header verify it’s running
Navigate to header
verify it’s running
once screenpipe starts, it serves an API on
localhost:3030
:
Copy the contents from the code block
# check health
curl
http://localhost:3030/health
# search your screen history
curl
"http://localhost:3030/search"
Navigate to header connect to AI
Navigate to header
connect to AI
screenpipe works with any AI that supports MCP or HTTP APIs:
integration
how
claude desktop
add screenpipe as MCP server (
guide
guide
)
cursor
add screenpipe MCP to your project (
guide
guide
)
claude code
use screenpipe MCP or curl the API (
guide
guide
)
ollama
configure in app settings, use any local model
integration
claude desktop
cursor
claude code
ollama
how
add screenpipe as MCP server (
guide
guide
)
add screenpipe MCP to your project (
guide
guide
)
use screenpipe MCP or curl the API (
guide
guide
)
configure in app settings, use any local model
Navigate to header what’s next?
Navigate to header
what’s next?
search your screen history
search your screen history
— find anything you’ve seen
API reference
API reference
— REST API endpoints and parameters
troubleshooting
troubleshooting
— fix common issues
join our discord
join our discord
— get help from the community
download screenpipe →
download screenpipe →
Was this page helpful?
Yes
Yes
No
No
quickstart
quickstart
use cases
use cases
github
github
x
x...
|
NULL
|
|
51031
|
1099
|
29
|
2026-04-18T10:39:43.038982+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-18/1776 /Users/lukas/.screenpipe/data/data/2026-04-18/1776508783038_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 . -rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store
drwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09
drwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11
drwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12
drwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13
drwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14
drwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15
drwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16
drwxr-xr-x 252 lukas staff 8064 17 Apr 21:06 2026-04-17
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-17
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ ll
total 1373568
drwxr-xr-x 252 lukas staff 8064 17 Apr 21:06 .
drwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..
-rw-r--r-- 1 lukas staff 199318 17 Apr 21:04 1776449072292_m1.jpg
-rw-r--r-- 1 lukas staff 161727 17 Apr 21:04 1776449072392_m2.jpg
-rw-r--r-- 1 lukas staff 275595 17 Apr 21:05 1776449102977_m1.jpg
-rw-r--r-- 1 lukas staff 161843 17 Apr 21:05 1776449103126_m2.jpg
-rw-r--r-- 1 lukas staff 161707 17 Apr 21:05 1776449115894_m2.jpg
-rw-r--r-- 1 lukas staff 275808 17 Apr 21:05 1776449116000_m1.jpg
-rw-r--r-- 1 lukas staff 127822 17 Apr 21:05 1776449117231_m1.jpg
-rw-r--r-- 1 lukas staff 149529 17 Apr 21:05 1776449126408_m1.jpg
-rw-r--r-- 1 lukas staff 267074 17 Apr 21:05 1776449129340_m1.jpg
-rw-r--r-- 1 lukas staff 236620 17 Apr 21:05 1776449134291_m1.jpg
-rw-r--r-- 1 lukas staff 163014 17 Apr 21:05 1776449134403_m2.jpg
-rw-r--r-- 1 lukas staff 232479 17 Apr 21:05 1776449135411_m1.jpg
-rw-r--r-- 1 lukas staff 162882 17 Apr 21:05 1776449140257_m2.jpg
-rw-r--r-- 1 lukas staff 262782 17 Apr 21:05 1776449140392_m1.jpg
-rw-r--r-- 1 lukas staff 274674 17 Apr 21:05 1776449141484_m1.jpg
-rw-r--r-- 1 lukas staff 267740 17 Apr 21:05 1776449149487_m1.jpg
-rw-r--r-- 1 lukas staff 161911 17 Apr 21:05 1776449149493_m2.jpg
-rw-r--r-- 1 lukas staff 267807 17 Apr 21:05 1776449150939_m1.jpg
-rw-r--r-- 1 lukas staff 165566 17 Apr 21:05 1776449152599_m2.jpg
-rw-r--r-- 1 lukas staff 272433 17 Apr 21:05 1776449152602_m1.jpg
-rw-r--r-- 1 lukas staff 269228 17 Apr 21:06 1776449168292_m1.jpg
-rw-r--r-- 1 lukas staff 162930 17 Apr 21:06 1776449168393_m2.jpg
-rw-r--r-- 1 lukas staff 267027 17 Apr 21:06 1776449175046_m1.jpg
-rw-r--r-- 1 lukas staff 162922 17 Apr 21:06 1776449178917_m2.jpg
-rw-r--r-- 1 lukas staff 271791 17 Apr 21:06 1776449181107_m1.jpg
-rw-r--r-- 1 lukas staff 1010791 17 Apr 09:07 compact_monitor_1_1776406033543.mp4
-rw-r--r-- 1 lukas staff 1641627 17 Apr 09:12 compact_monitor_1_1776406339160.mp4
-rw-r--r-- 1 lukas staff 282103 17 Apr 09:17 compact_monitor_1_1776406650753.mp4
-rw-r--r-- 1 lukas staff 533856 17 Apr 09:22 compact_monitor_1_1776406961354.mp4
-rw-r--r-- 1 lukas staff 372860 17 Apr 09:27 compact_monitor_1_1776407272449.mp4
-rw-r--r-- 1 lukas staff 269617 17 Apr 09:33 compact_monitor_1_1776407585831.mp4
-rw-r--r-- 1 lukas staff 289824 17 Apr 09:38 compact_monitor_1_1776407896440.mp4
-rw-r--r-- 1 lukas staff 244134 17 Apr 09:43 compact_monitor_1_1776408206183.mp4
-rw-r--r-- 1 lukas staff 239140 17 Apr 09:48 compact_monitor_1_1776408516395.mp4
-rw-r--r-- 1 lukas staff 361011 17 Apr 09:53 compact_monitor_1_1776408824270.mp4
-rw-r--r-- 1 lukas staff 3365373 17 Apr 09:59 compact_monitor_1_1776409136717.mp4
-rw-r--r-- 1 lukas staff 2601020 17 Apr 10:04 compact_monitor_1_1776409450395.mp4
-rw-r--r-- 1 lukas staff 3497066 17 Apr 10:09 compact_monitor_1_1776409759172.mp4
-rw-r--r-- 1 lukas staff 1507571 17 Apr 10:14 compact_monitor_1_1776410067944.mp4
-rw-r--r-- 1 lukas staff 943396 17 Apr 10:19 compact_monitor_1_1776410372484.mp4
-rw-r--r-- 1 lukas staff 1225040 17 Apr 10:24 compact_monitor_1_1776410674629.mp4
-rw-r--r-- 1 lukas staff 2224229 17 Apr 10:29 compact_monitor_1_1776410981487.mp4
-rw-r--r-- 1 lukas staff 398291 17 Apr 10:34 compact_monitor_1_1776411298373.mp4
-rw-r--r-- 1 lukas staff 4376235 17 Apr 10:40 compact_monitor_1_1776411601686.mp4
-rw-r--r-- 1 lukas staff 5007720 17 Apr 10:45 compact_monitor_1_1776411923026.mp4
-rw-r--r-- 1 lukas staff 2281319 17 Apr 10:50 compact_monitor_1_1776412242015.mp4
-rw-r--r-- 1 lukas staff 3182872 17 Apr 10:56 compact_monitor_1_1776412560658.mp4
-rw-r--r-- 1 lukas staff 3896056 17 Apr 11:01 compact_monitor_1_1776412881181.mp4
-rw-r--r-- 1 lukas staff 6279582 17 Apr 11:06 compact_monitor_1_1776413192507.mp4
-rw-r--r-- 1 lukas staff 6492126 17 Apr 11:12 compact_monitor_1_1776413508291.mp4
-rw-r--r-- 1 lukas staff 6045038 17 Apr 11:17 compact_monitor_1_1776413848971.mp4
-rw-r--r-- 1 lukas staff 4968033 17 Apr 11:23 compact_monitor_1_1776414180658.mp4
-rw-r--r-- 1 lukas staff 7109088 17 Apr 11:28 compact_monitor_1_1776414513921.mp4
-rw-r--r-- 1 lukas staff 9099339 17 Apr 11:34 compact_monitor_1_1776414839842.mp4
-rw-r--r-- 1 lukas staff 926165 17 Apr 11:34 compact_monitor_1_1776414858793.mp4
-rw-r--r-- 1 lukas staff 9246778 17 Apr 11:39 compact_monitor_1_1776415182593.mp4
-rw-r--r-- 1 lukas staff 8361876 17 Apr 11:45 compact_monitor_1_1776415505403.mp4
-rw-r--r-- 1 lukas staff 7215549 17 Apr 11:50 compact_monitor_1_1776415841776.mp4
-rw-r--r-- 1 lukas staff 6234445 17 Apr 11:56 compact_monitor_1_1776416174658.mp4
-rw-r--r-- 1 lukas staff 11694078 17 Apr 12:01 compact_monitor_1_1776416497484.mp4
-rw-r--r-- 1 lukas staff 7033085 17 Apr 12:07 compact_monitor_1_1776416834587.mp4
-rw-r--r-- 1 lukas staff 4309161 17 Apr 12:12 compact_monitor_1_1776417157754.mp4
-rw-r--r-- 1 lukas staff 3782878 17 Apr 12:18 compact_monitor_1_1776417481425.mp4
-rw-r--r-- 1 lukas staff 5597264 17 Apr 12:23 compact_monitor_1_1776417802134.mp4
-rw-r--r-- 1 lukas staff 5667747 17 Apr 12:28 compact_monitor_1_1776418119908.mp4
-rw-r--r-- 1 lukas staff 8840842 17 Apr 12:34 compact_monitor_1_1776418443506.mp4
-rw-r--r-- 1 lukas staff 5442395 17 Apr 12:39 compact_monitor_1_1776418761701.mp4
-rw-r--r-- 1 lukas staff 4054014 17 Apr 12:44 compact_monitor_1_1776419074083.mp4
-rw-r--r-- 1 lukas staff 3734539 17 Apr 12:49 compact_monitor_1_1776419388949.mp4
-rw-r--r-- 1 lukas staff 3137915 17 Apr 12:55 compact_monitor_1_1776419701686.mp4
-rw-r--r-- 1 lukas staff 3064654 17 Apr 13:00 compact_monitor_1_1776420015547.mp4
-rw-r--r-- 1 lukas staff 1189833 17 Apr 13:05 compact_monitor_1_1776420321592.mp4
-rw-r--r-- 1 lukas staff 1862832 17 Apr 13:10 compact_monitor_1_1776420633887.mp4
-rw-r--r-- 1 lukas staff 520517 17 Apr 13:15 compact_monitor_1_1776420947144.mp4
-rw-r--r-- 1 lukas staff 790509 17 Apr 13:20 compact_monitor_1_1776421253865.mp4
-rw-r--r-- 1 lukas staff 1155599 17 Apr 13:26 compact_monitor_1_1776421566995.mp4
-rw-r--r-- 1 lukas staff 626836 17 Apr 13:31 compact_monitor_1_1776421884013.mp4
-rw-r--r-- 1 lukas staff 2709758 17 Apr 13:36 compact_monitor_1_1776422194788.mp4
-rw-r--r-- 1 lukas staff 894214 17 Apr 13:41 compact_monitor_1_1776422513565.mp4
-rw-r--r-- 1 lukas staff 1298826 17 Apr 13:47 compact_monitor_1_1776422829105.mp4
-rw-r--r-- 1 lukas staff 3454896 17 Apr 13:52 compact_monitor_1_1776423143916.mp4
-rw-r--r-- 1 lukas staff 1369217 17 Apr 13:57 compact_monitor_1_1776423466196.mp4
-rw-r--r-- 1 lukas staff 1677163 17 Apr 14:03 compact_monitor_1_1776423783420.mp4
-rw-r--r-- 1 lukas staff 556702 17 Apr 14:08 compact_monitor_1_1776424109344.mp4
-rw-r--r-- 1 lukas staff 1001886 17 Apr 14:13 compact_monitor_1_1776424416957.mp4
-rw-r--r-- 1 lukas staff 1485547 17 Apr 14:18 compact_monitor_1_1776424730536.mp4
-rw-r--r-- 1 lukas staff 935536 17 Apr 14:24 compact_monitor_1_1776425050631.mp4
-rw-r--r-- 1 lukas staff 1119642 17 Apr 14:29 compact_monitor_1_1776425372446.mp4
-rw-r--r-- 1 lukas staff 430883 17 Apr 14:34 compact_monitor_1_1776425690857.mp4
-rw-r--r-- 1 lukas staff 427035 17 Apr 14:40 compact_monitor_1_1776426003278.mp4
-rw-r--r-- 1 lukas staff 654605 17 Apr 14:45 compact_monitor_1_1776426312497.mp4
-rw-r--r-- 1 lukas staff 440539 17 Apr 14:50 compact_monitor_1_1776426625506.mp4
-rw-r--r-- 1 lukas staff 439802 17 Apr 14:55 compact_monitor_1_1776426939895.mp4
-rw-r--r-- 1 lukas staff 557755 17 Apr 15:01 compact_monitor_1_1776427261945.mp4
-rw-r--r-- 1 lukas staff 1071442 17 Apr 15:06 compact_monitor_1_1776427571985.mp4
-rw-r--r-- 1 lukas staff 2606361 17 Apr 15:11 compact_monitor_1_1776427882803.mp4
-rw-r--r-- 1 lukas staff 951201 17 Apr 15:16 compact_monitor_1_1776428192090.mp4
-rw-r--r-- 1 lukas staff 322306 17 Apr 15:21 compact_monitor_1_1776428505150.mp4
-rw-r--r-- 1 lukas staff 331163 17 Apr 15:26 compact_monitor_1_1776428811953.mp4
-rw-r--r-- 1 lukas staff 737469 17 Apr 15:32 compact_monitor_1_1776429127526.mp4
-rw-r--r-- 1 lukas staff 352621 17 Apr 15:37 compact_monitor_1_1776429442374.mp4
-rw-r--r-- 1 lukas staff 444203 17 Apr 15:42 compact_monitor_1_1776429752217.mp4
-rw-r--r-- 1 lukas staff 1407505 17 Apr 15:47 compact_monitor_1_1776430066920.mp4
-rw-r--r-- 1 lukas staff 360974 17 Apr 15:53 compact_monitor_1_1776430376918.mp4
-rw-r--r-- 1 lukas staff 321565 17 Apr 15:58 compact_monitor_1_1776430691588.mp4
-rw-r--r-- 1 lukas staff 317048 17 Apr 16:03 compact_monitor_1_1776431003504.mp4
-rw-r--r-- 1 lukas staff 321894 17 Apr 16:08 compact_monitor_1_1776431317637.mp4
-rw-r--r-- 1 lukas staff 333513 17 Apr 16:13 compact_monitor_1_1776431629041.mp4
-rw-r--r-- 1 lukas staff 326264 17 Apr 16:19 compact_monitor_1_1776431942238.mp4
-rw-r--r-- 1 lukas staff 366336 17 Apr 16:24 compact_monitor_1_1776432254490.mp4
-rw-r--r-- 1 lukas staff 327825 17 Apr 16:29 compact_monitor_1_1776432574989.mp4
-rw-r--r-- 1 lukas staff 1048363 17 Apr 16:34 compact_monitor_1_1776432882794.mp4
-rw-r--r-- 1 lukas staff 1668969 17 Apr 16:39 compact_monitor_1_1776433188842.mp4
-rw-r--r-- 1 lukas staff 1283899 17 Apr 16:44 compact_monitor_1_1776433493858.mp4
-rw-r--r-- 1 lukas staff 314118 17 Apr 16:50 compact_monitor_1_1776433800642.mp4
-rw-r--r-- 1 lukas staff 547478 17 Apr 16:55 compact_monitor_1_1776434111371.mp4
-rw-r--r-- 1 lukas staff 868654 17 Apr 17:00 compact_monitor_1_1776434420728.mp4
-rw-r--r-- 1 lukas staff 885215 17 Apr 17:05 compact_monitor_1_1776434723901.mp4
-rw-r--r-- 1 lukas staff 508905 17 Apr 17:10 compact_monitor_1_1776435038035.mp4
-rw-r--r-- 1 lukas staff 591766 17 Apr 17:16 compact_monitor_1_1776435363044.mp4
-rw-r--r-- 1 lukas staff 2031034 17 Apr 17:21 compact_monitor_1_1776435683729.mp4
-rw-r--r-- 1 lukas staff 2136043 17 Apr 17:26 compact_monitor_1_1776436005076.mp4
-rw-r--r-- 1 lukas staff 578716 17 Apr 17:32 compact_monitor_1_1776436319163.mp4
-rw-r--r-- 1 lukas staff 1308705 17 Apr 17:37 compact_monitor_1_1776436630439.mp4
-rw-r--r-- 1 lukas staff 958771 17 Apr 17:42 compact_monitor_1_1776436939049.mp4
-rw-r--r-- 1 lukas staff 797771 17 Apr 17:47 compact_monitor_1_1776437247467.mp4
-rw-r--r-- 1 lukas staff 1230186 17 Apr 17:52 compact_monitor_1_1776437554897.mp4
-rw-r--r-- 1 lukas staff 862632 17 Apr 17:57 compact_monitor_1_1776437862465.mp4
-rw-r--r-- 1 lukas staff 757441 17 Apr 18:02 compact_monitor_1_1776438171931.mp4
-rw-r--r-- 1 lukas staff 686680 17 Apr 18:08 compact_monitor_1_1776438479816.mp4
-rw-r--r-- 1 lukas staff 1078524 17 Apr 18:13 compact_monitor_1_1776438783339.mp4
-rw-r--r-- 1 lukas staff 496616 17 Apr 18:18 compact_monitor_1_1776439090720.mp4
-rw-r--r-- 1 lukas staff 774571 17 Apr 18:23 compact_monitor_1_1776439396975.mp4
-rw-r--r-- 1 lukas staff 1160291 17 Apr 18:28 compact_monitor_1_1776439703924.mp4
-rw-r--r-- 1 lukas staff 632541 17 Apr 18:34 compact_monitor_1_1776440053428.mp4
-rw-r--r-- 1 lukas staff 3291212 17 Apr 21:05 compact_monitor_1_1776449135667.mp4
-rw-r--r-- 1 lukas staff 768306 17 Apr 09:07 compact_monitor_2_1776406035126.mp4
-rw-r--r-- 1 lukas staff 9277508 17 Apr 09:12 compact_monitor_2_1776406343152.mp4
-rw-r--r-- 1 lukas staff 627114 17 Apr 09:12 compact_monitor_2_1776406349962.mp4
-rw-r--r-- 1 lukas staff 11129246 17 Apr 09:17 compact_monitor_2_1776406653780.mp4
-rw-r--r-- 1 lukas staff 8352174 17 Apr 09:22 compact_monitor_2_1776406964880.mp4
-rw-r--r-- 1 lukas staff 8551960 17 Apr 09:28 compact_monitor_2_1776407277493.mp4
-rw-r--r-- 1 lukas staff 679244 17 Apr 09:28 compact_monitor_2_1776407283693.mp4
-rw-r--r-- 1 lukas staff 12641011 17 Apr 09:33 compact_monitor_2_1776407588804.mp4
-rw-r--r-- 1 lukas staff 9384615 17 Apr 09:38 compact_monitor_2_1776407900099.mp4
-rw-r--r-- 1 lukas staff 4024767 17 Apr 09:43 compact_monitor_2_1776408207652.mp4
-rw-r--r-- 1 lukas staff 2627851 17 Apr 09:48 compact_monitor_2_1776408517311.mp4
-rw-r--r-- 1 lukas staff 4877190 17 Apr 09:53 compact_monitor_2_1776408826734.mp4
-rw-r--r-- 1 lukas staff 3807909 17 Apr 09:59 compact_monitor_2_1776409142638.mp4
-rw-r--r-- 1 lukas staff 4217716 17 Apr 10:04 compact_monitor_2_1776409454184.mp4
-rw-r--r-- 1 lukas staff 1717578 17 Apr 10:09 compact_monitor_2_1776409763153.mp4
-rw-r--r-- 1 lukas staff 1067064 17 Apr 10:14 compact_monitor_2_1776410070480.mp4
-rw-r--r-- 1 lukas staff 442425 17 Apr 10:19 compact_monitor_2_1776410373664.mp4
-rw-r--r-- 1 lukas staff 444497 17 Apr 10:24 compact_monitor_2_1776410676126.mp4
-rw-r--r-- 1 lukas staff 3670025 17 Apr 10:29 compact_monitor_2_1776410986705.mp4
-rw-r--r-- 1 lukas staff 448939 17 Apr 10:35 compact_monitor_2_1776411299875.mp4
-rw-r--r-- 1 lukas staff 4490377 17 Apr 10:40 compact_monitor_2_1776411611306.mp4
-rw-r--r-- 1 lukas staff 7437798 17 Apr 10:45 compact_monitor_2_1776411929615.mp4
-rw-r--r-- 1 lukas staff 6915447 17 Apr 10:50 compact_monitor_2_1776412245368.mp4
-rw-r--r-- 1 lukas staff 7988703 17 Apr 10:56 compact_monitor_2_1776412568330.mp4
-rw-r--r-- 1 lukas staff 5512416 17 Apr 11:01 compact_monitor_2_1776412886253.mp4
-rw-r--r-- 1 lukas staff 3107875 17 Apr 11:06 compact_monitor_2_1776413199096.mp4
-rw-r--r-- 1 lukas staff 4158550 17 Apr 11:12 compact_monitor_2_1776413529707.mp4
-rw-r--r-- 1 lukas staff 4756064 17 Apr 11:17 compact_monitor_2_1776413863997.mp4
-rw-r--r-- 1 lukas staff 5281060 17 Apr 11:23 compact_monitor_2_1776414194026.mp4
-rw-r--r-- 1 lukas staff 2605046 17 Apr 11:28 compact_monitor_2_1776414528521.mp4
-rw-r--r-- 1 lukas staff 5473302 17 Apr 11:34 compact_monitor_2_1776414861255.mp4
-rw-r--r-- 1 lukas staff 2791759 17 Apr 11:40 compact_monitor_2_1776415194836.mp4
-rw-r--r-- 1 lukas staff 5494699 17 Apr 11:45 compact_monitor_2_1776415523929.mp4
-rw-r--r-- 1 lukas staff 4025150 17 Apr 11:51 compact_monitor_2_1776415859261.mp4
-rw-r--r-- 1 lukas staff 2583684 17 Apr 11:56 compact_monitor_2_1776416187267.mp4
-rw-r--r-- 1 lukas staff 5240195 17 Apr 12:02 compact_monitor_2_1776416514967.mp4
-rw-r--r-- 1 lukas staff 3629687 17 Apr 12:07 compact_monitor_2_1776416846005.mp4
-rw-r--r-- 1 lukas staff 5021721 17 Apr 12:12 compact_monitor_2_1776417172355.mp4
-rw-r--r-- 1 lukas staff 2986447 17 Apr 12:18 compact_monitor_2_1776417492277.mp4
-rw-r--r-- 1 lukas staff 3976942 17 Apr 12:23 compact_monitor_2_1776417810578.mp4
-rw-r--r-- 1 lukas staff 4294715 17 Apr 12:29 compact_monitor_2_1776418132304.mp4
-rw-r--r-- 1 lukas staff 4698998 17 Apr 12:34 compact_monitor_2_1776418452374.mp4
-rw-r--r-- 1 lukas staff 3160886 17 Apr 12:39 compact_monitor_2_1776418768555.mp4
-rw-r--r-- 1 lukas staff 1776908 17 Apr 12:44 compact_monitor_2_1776419082274.mp4
-rw-r--r-- 1 lukas staff 1500725 17 Apr 12:49 compact_monitor_2_1776419394506.mp4
-rw-r--r-- 1 lukas staff 1279602 17 Apr 12:55 compact_monitor_2_1776419709571.mp4
-rw-r--r-- 1 lukas staff 2017894 17 Apr 13:00 compact_monitor_2_1776420018859.mp4
-rw-r--r-- 1 lukas staff 5639690 17 Apr 13:05 compact_monitor_2_1776420324337.mp4
-rw-r--r-- 1 lukas staff 4587635 17 Apr 13:10 compact_monitor_2_1776420636421.mp4
-rw-r--r-- 1 lukas staff 2001162 17 Apr 13:15 compact_monitor_2_1776420949555.mp4
-rw-r--r-- 1 lukas staff 3658362 17 Apr 13:21 compact_monitor_2_1776421256306.mp4
-rw-r--r-- 1 lukas staff 7755716 17 Apr 13:26 compact_monitor_2_1776421570292.mp4
-rw-r--r-- 1 lukas staff 3362766 17 Apr 13:31 compact_monitor_2_1776421886698.mp4
-rw-r--r-- 1 lukas staff 6893513 17 Apr 13:36 compact_monitor_2_1776422197625.mp4
-rw-r--r-- 1 lukas staff 4788146 17 Apr 13:42 compact_monitor_2_1776422516390.mp4
-rw-r--r-- 1 lukas staff 4840848 17 Apr 13:47 compact_monitor_2_1776422832136.mp4
-rw-r--r-- 1 lukas staff 9094075 17 Apr 13:52 compact_monitor_2_1776423148671.mp4
-rw-r--r-- 1 lukas staff 10072846 17 Apr 13:57 compact_monitor_2_1776423469970.mp4
-rw-r--r-- 1 lukas staff 13504297 17 Apr 14:03 compact_monitor_2_1776423787536.mp4
-rw-r--r-- 1 lukas staff 1622612 17 Apr 14:08 compact_monitor_2_1776424110832.mp4
-rw-r--r-- 1 lukas staff 5427700 17 Apr 14:13 compact_monitor_2_1776424419206.mp4
-rw-r--r-- 1 lukas staff 1746789 17 Apr 14:19 compact_monitor_2_1776424736034.mp4
-rw-r--r-- 1 lukas staff 4232204 17 Apr 14:24 compact_monitor_2_1776425054084.mp4
-rw-r--r-- 1 lukas staff 4457408 17 Apr 14:29 compact_monitor_2_1776425375574.mp4
-rw-r--r-- 1 lukas staff 174979 17 Apr 14:34 compact_monitor_2_1776425692307.mp4
-rw-r--r-- 1 lukas staff 169969 17 Apr 14:40 compact_monitor_2_1776426005170.mp4
-rw-r--r-- 1 lukas staff 2723106 17 Apr 14:45 compact_monitor_2_1776426315173.mp4
-rw-r--r-- 1 lukas staff 3313658 17 Apr 14:50 compact_monitor_2_1776426627449.mp4
-rw-r--r-- 1 lukas staff 4720437 17 Apr 14:55 compact_monitor_2_1776426943213.mp4
-rw-r--r-- 1 lukas staff 3589313 17 Apr 15:01 compact_monitor_2_1776427263991.mp4
-rw-r--r-- 1 lukas staff 6295236 17 Apr 15:06 compact_monitor_2_1776427573875.mp4
-rw-r--r-- 1 lukas staff 3390902 17 Apr 15:11 compact_monitor_2_1776427885283.mp4
-rw-r--r-- 1 lukas staff 1637607 17 Apr 15:16 compact_monitor_2_1776428194704.mp4
-rw-r--r-- 1 lukas staff 1355327 17 Apr 15:21 compact_monitor_2_1776428506246.mp4
-rw-r--r-- 1 lukas staff 4897048 17 Apr 15:27 compact_monitor_2_1776428815157.mp4
-rw-r--r-- 1 lukas staff 4930900 17 Apr 15:32 compact_monitor_2_1776429130905.mp4
-rw-r--r-- 1 lukas staff 2581578 17 Apr 15:37 compact_monitor_2_1776429444142.mp4
-rw-r--r-- 1 lukas staff 4764105 17 Apr 15:42 compact_monitor_2_1776429755437.mp4
-rw-r--r-- 1 lukas staff 4039902 17 Apr 15:47 compact_monitor_2_1776430069174.mp4
-rw-r--r-- 1 lukas staff 4735734 17 Apr 15:53 compact_monitor_2_1776430380212.mp4
-rw-r--r-- 1 lukas staff 2195410 17 Apr 15:58 compact_monitor_2_1776430693483.mp4
-rw-r--r-- 1 lukas staff 1857322 17 Apr 16:03 compact_monitor_2_1776431005386.mp4
-rw-r--r-- 1 lukas staff 3412100 17 Apr 16:08 compact_monitor_2_1776431319373.mp4
-rw-r--r-- 1 lukas staff 6928537 17 Apr 16:13 compact_monitor_2_1776431631778.mp4
-rw-r--r-- 1 lukas staff 4990793 17 Apr 16:19 compact_monitor_2_1776431944571.mp4
-rw-r--r-- 1 lukas staff 8242278 17 Apr 16:24 compact_monitor_2_1776432258818.mp4
-rw-r--r-- 1 lukas staff 451999 17 Apr 16:24 compact_monitor_2_1776432269036.mp4
-rw-r--r-- 1 lukas staff 2978452 17 Apr 16:29 compact_monitor_2_1776432577467.mp4
-rw-r--r-- 1 lukas staff 1248291 17 Apr 16:34 compact_monitor_2_1776432884349.mp4
-rw-r--r-- 1 lukas staff 2963525 17 Apr 16:39 compact_monitor_2_1776433190284.mp4
-rw-r--r-- 1 lukas staff 1958858 17 Apr 16:44 compact_monitor_2_1776433495477.mp4
-rw-r--r-- 1 lukas staff 1656966 17 Apr 16:50 compact_monitor_2_1776433802347.mp4
-rw-r--r-- 1 lukas staff 2813856 17 Apr 16:55 compact_monitor_2_1776434112909.mp4
-rw-r--r-- 1 lukas staff 510112 17 Apr 17:00 compact_monitor_2_1776434422384.mp4
-rw-r--r-- 1 lukas staff 4354386 17 Apr 17:05 compact_monitor_2_1776434725886.mp4
-rw-r--r-- 1 lukas staff 9798615 17 Apr 17:10 compact_monitor_2_1776435041115.mp4
-rw-r--r-- 1 lukas staff 4503179 17 Apr 17:16 compact_monitor_2_1776435368020.mp4
-rw-r--r-- 1 lukas staff 857002 17 Apr 17:16 compact_monitor_2_1776435376040.mp4
-rw-r--r-- 1 lukas staff 8587996 17 Apr 17:21 compact_monitor_2_1776435687051.mp4
-rw-r--r-- 1 lukas staff 5052247 17 Apr 17:26 compact_monitor_2_1776436009787.mp4
-rw-r--r-- 1 lukas staff 2947924 17 Apr 17:32 compact_monitor_2_1776436320877.mp4
-rw-r--r-- 1 lukas staff 689465 17 Apr 17:37 compact_monitor_2_1776436632536.mp4
-rw-r--r-- 1 lukas staff 1353469 17 Apr 17:42 compact_monitor_2_1776436940788.mp4
-rw-r--r-- 1 lukas staff 870893 17 Apr 17:47 compact_monitor_2_1776437249077.mp4
-rw-r--r-- 1 lukas staff 2653839 17 Apr 17:52 compact_monitor_2_1776437556659.mp4
-rw-r--r-- 1 lukas staff 4310138 17 Apr 17:57 compact_monitor_2_1776437864727.mp4
-rw-r--r-- 1 lukas staff 3683875 17 Apr 18:02 compact_monitor_2_1776438173313.mp4
-rw-r--r-- 1 lukas staff 1916129 17 Apr 18:08 compact_monitor_2_1776438481043.mp4
-rw-r--r-- 1 lukas staff 2349626 17 Apr 18:13 compact_monitor_2_1776438785553.mp4
-rw-r--r-- 1 lukas staff 641202 17 Apr 18:18 compact_monitor_2_1776439092011.mp4
-rw-r--r-- 1 lukas staff 3006319 17 Apr 18:23 compact_monitor_2_1776439398485.mp4
-rw-r--r-- 1 lukas staff 1675776 17 Apr 18:28 compact_monitor_2_1776439705765.mp4
-rw-r--r-- 1 lukas staff 4465225 17 Apr 18:34 compact_monitor_2_1776440055922.mp4
-rw-r--r-- 1 lukas staff 2351472 17 Apr 21:05 compact_monitor_2_1776449140917.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ rsync -av --ignore-existing \
~/.screenpipe/data/data/2026-04-14/ \
/Volumes/Test/screenpipe/data/2026-04-14/
building file list ... done
./
compact_monitor_1_1776236348162.mp4
compact_monitor_1_1776236355103.mp4
compact_monitor_2_1776236357169.mp4
compact_monitor_2_1776236373794.mp4
sent 41217485 bytes received 114 bytes 4338694.63 bytes/sec
total size is 1085072596 speedup is 26.33
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ cd ..
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-14
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ll
total 2120256
drwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 .
drwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..
-rw-r--r--@ 1 lukas staff 581687 14 Apr 09:34 compact_monitor_1_1776148466581.mp4
-rw-r--r--@ 1 lukas staff 702153 14 Apr 09:39 compact_monitor_1_1776148768082.mp4
-rw-r--r--@ 1 lukas staff 251978 14 Apr 09:44 compact_monitor_1_1776149071467.mp4
-rw-r--r-- 1 lukas staff 1717429 14 Apr 09:49 compact_monitor_1_1776149373136.mp4
-rw-r--r-- 1 lukas staff 3477530 14 Apr 09:54 compact_monitor_1_1776149679747.mp4
-rw-r--r-- 1 lukas staff 4579266 14 Apr 09:59 compact_monitor_1_1776149991618.mp4
-rw-r--r-- 1 lukas staff 2305892 14 Apr 10:05 compact_monitor_1_1776150305479.mp4
-rw-r--r-- 1 lukas staff 2464098 14 Apr 10:10 compact_monitor_1_1776150611148.mp4
-rw-r--r-- 1 lukas staff 2640699 14 Apr 10:15 compact_monitor_1_1776150917977.mp4
-rw-r--r-- 1 lukas staff 2938324 14 Apr 10:20 compact_monitor_1_1776151225175.mp4
-rw-r--r-- 1 lukas staff 5734426 14 Apr 10:25 compact_monitor_1_1776151533655.mp4
-rw-r--r-- 1 lukas staff 711441 14 Apr 10:30 compact_monitor_1_1776151841776.mp4
-rw-r--r-- 1 lukas staff 373214 14 Apr 10:35 compact_monitor_1_1776152149591.mp4
-rw-r--r-- 1 lukas staff 259200 14 Apr 10:40 compact_monitor_1_1776152456802.mp4
-rw-r--r-- 1 lukas staff 563549 14 Apr 10:46 compact_monitor_1_1776152770846.mp4
-rw-r--r-- 1 lukas staff 1085034 14 Apr 10:51 compact_monitor_1_1776153081304.mp4
-rw-r--r-- 1 lukas staff 5856145 14 Apr 10:56 compact_monitor_1_1776153389824.mp4
-rw-r--r-- 1 lukas staff 3729206 14 Apr 11:01 compact_monitor_1_1776153702196.mp4
-rw-r--r-- 1 lukas staff 1381857 14 Apr 11:06 compact_monitor_1_1776154011626.mp4
-rw-r--r-- 1 lukas staff 590718 14 Apr 11:12 compact_monitor_1_1776154319547.mp4
-rw-r--r-- 1 lukas staff 1306438 14 Apr 11:17 compact_monitor_1_1776154623893.mp4
-rw-r--r-- 1 lukas staff 216930 14 Apr 11:22 compact_monitor_1_1776154930014.mp4
-rw-r--r-- 1 lukas staff 473698 14 Apr 11:27 compact_monitor_1_1776155238144.mp4
-rw-r--r-- 1 lukas staff 3051314 14 Apr 11:32 compact_monitor_1_1776155547239.mp4
-rw-r--r-- 1 lukas staff 253380 14 Apr 11:37 compact_monitor_1_1776155850943.mp4
-rw-r--r-- 1 lukas staff 258154 14 Apr 11:42 compact_monitor_1_1776156154229.mp4
-rw-r--r-- 1 lukas staff 962893 14 Apr 11:47 compact_monitor_1_1776156458244.mp4
-rw-r--r-- 1 lukas staff 1806149 14 Apr 11:52 compact_monitor_1_1776156762972.mp4
-rw-r--r-- 1 lukas staff 2280711 14 Apr 11:57 compact_monitor_1_1776157067935.mp4
-rw-r--r-- 1 lukas staff 1779777 14 Apr 12:03 compact_monitor_1_1776157380235.mp4
-rw-r--r-- 1 lukas staff 792745 14 Apr 12:08 compact_monitor_1_1776157700511.mp4
-rw-r--r-- 1 lukas staff 290618 14 Apr 12:13 compact_monitor_1_1776158016840.mp4
-rw-r--r-- 1 lukas staff 572761 14 Apr 12:18 compact_monitor_1_1776158333836.mp4
-rw-r--r-- 1 lukas staff 200419 14 Apr 12:24 compact_monitor_1_1776158651565.mp4
-rw-r--r-- 1 lukas staff 190795 14 Apr 12:29 compact_monitor_1_1776158966333.mp4
-rw-r--r-- 1 lukas staff 2126277 14 Apr 12:34 compact_monitor_1_1776159274939.mp4
-rw-r--r-- 1 lukas staff 3747860 14 Apr 12:39 compact_monitor_1_1776159588710.mp4
-rw-r--r-- 1 lukas staff 2152422 14 Apr 12:45 compact_monitor_1_1776159900733.mp4
-rw-r--r-- 1 lukas staff 709258 14 Apr 12:50 compact_monitor_1_1776160204634.mp4
-rw-r--r-- 1 lukas staff 1158847 14 Apr 12:55 compact_monitor_1_1776160508015.mp4
-rw-r--r-- 1 lukas staff 1813578 14 Apr 13:00 compact_monitor_1_1776160811806.mp4
-rw-r--r-- 1 lukas staff 684607 14 Apr 13:05 compact_monitor_1_1776161119981.mp4
-rw-r--r-- 1 lukas staff 636562 14 Apr 13:10 compact_monitor_1_1776161424648.mp4
-rw-r--r-- 1 lukas staff 323432 14 Apr 13:15 compact_monitor_1_1776161728448.mp4
-rw-r--r-- 1 lukas staff 294055 14 Apr 13:20 compact_monitor_1_1776162032394.mp4
-rw-r--r-- 1 lukas staff 296941 14 Apr 13:25 compact_monitor_1_1776162336175.mp4
-rw-r--r-- 1 lukas staff 292219 14 Apr 13:30 compact_monitor_1_1776162640619.mp4
-rw-r--r-- 1 lukas staff 293726 14 Apr 13:35 compact_monitor_1_1776162943050.mp4
-rw-r--r-- 1 lukas staff 832989 14 Apr 13:40 compact_monitor_1_1776163246420.mp4
-rw-r--r-- 1 lukas staff 1068134 14 Apr 13:45 compact_monitor_1_1776163549145.mp4
-rw-r--r-- 1 lukas staff 501189 14 Apr 13:50 compact_monitor_1_1776163853383.mp4
-rw-r--r-- 1 lukas staff 930299 14 Apr 13:55 compact_monitor_1_1776164155311.mp4
-rw-r--r-- 1 lukas staff 2515358 14 Apr 14:01 compact_monitor_1_1776164459131.mp4
-rw-r--r-- 1 lukas staff 1286863 14 Apr 14:06 compact_monitor_1_1776164766940.mp4
-rw-r--r-- 1 lukas staff 1472795 14 Apr 14:15 compact_monitor_1_1776165318512.mp4
-rw-r--r-- 1 lukas staff 439699 14 Apr 14:20 compact_monitor_1_1776165627501.mp4
-rw-r--r-- 1 lukas staff 519424 14 Apr 14:25 compact_monitor_1_1776165931952.mp4
-rw-r--r-- 1 lukas staff 2267443 14 Apr 14:30 compact_monitor_1_1776166235408.mp4
-rw-r--r-- 1 lukas staff 1637916 14 Apr 14:35 compact_monitor_1_1776166551721.mp4
-rw-r--r-- 1 lukas staff 1111434 14 Apr 14:41 compact_monitor_1_1776166862836.mp4
-rw-r--r-- 1 lukas staff 1546177 14 Apr 14:46 compact_monitor_1_1776167176709.mp4
-rw-r--r-- 1 lukas staff 466769 14 Apr 14:51 compact_monitor_1_1776167484535.mp4
-rw-r--r-- 1 lukas staff 993316 14 Apr 14:56 compact_monitor_1_1776167793776.mp4
-rw-r--r-- 1 lukas staff 2902714 14 Apr 15:01 compact_monitor_1_1776168105399.mp4
-rw-r--r-- 1 lukas staff 1279133 14 Apr 15:06 compact_monitor_1_1776168413169.mp4
-rw-r--r-- 1 lukas staff 1132592 14 Apr 15:12 compact_monitor_1_1776168722629.mp4
-rw-r--r-- 1 lukas staff 355416 14 Apr 15:17 compact_monitor_1_1776169031962.mp4
-rw-r--r-- 1 lukas staff 345697 14 Apr 15:22 compact_monitor_1_1776169337693.mp4
-rw-r--r-- 1 lukas staff 3063911 14 Apr 15:27 compact_monitor_1_1776169641353.mp4
-rw-r--r-- 1 lukas staff 5369163 14 Apr 15:32 compact_monitor_1_1776169957193.mp4
-rw-r--r-- 1 lukas staff 3605997 14 Apr 15:38 compact_monitor_1_1776170274586.mp4
-rw-r--r-- 1 lukas staff 1662201 14 Apr 15:43 compact_monitor_1_1776170596259.mp4
-rw-r--r-- 1 lukas staff 2518520 14 Apr 15:48 compact_monitor_1_1776170900299.mp4
-rw-r--r-- 1 lukas staff 2298616 14 Apr 15:53 compact_monitor_1_1776171206621.mp4
-rw-r--r-- 1 lukas staff 252208 14 Apr 15:58 compact_monitor_1_1776171511042.mp4
-rw-r--r-- 1 lukas staff 547163 14 Apr 16:03 compact_monitor_1_1776171816609.mp4
-rw-r--r-- 1 lukas staff 3548604 14 Apr 16:08 compact_monitor_1_1776172119791.mp4
-rw-r--r-- 1 lukas staff 1006390 14 Apr 16:13 compact_monitor_1_1776172427942.mp4
-rw-r--r-- 1 lukas staff 1168310 14 Apr 16:18 compact_monitor_1_1776172735350.mp4
-rw-r--r-- 1 lukas staff 2138214 14 Apr 16:24 compact_monitor_1_1776173046731.mp4
-rw-r--r-- 1 lukas staff 2138875 14 Apr 16:29 compact_monitor_1_1776173354299.mp4
-rw-r--r-- 1 lukas staff 336470 14 Apr 16:34 compact_monitor_1_1776173662610.mp4
-rw-r--r-- 1 lukas staff 330494 14 Apr 16:39 compact_monitor_1_1776173971011.mp4
-rw-r--r-- 1 lukas staff 574889 14 Apr 16:44 compact_monitor_1_1776174275028.mp4
-rw-r--r-- 1 lukas staff 450335 14 Apr 16:49 compact_monitor_1_1776174580719.mp4
-rw-r--r-- 1 lukas staff 452365 14 Apr 16:54 compact_monitor_1_1776174888498.mp4
-rw-r--r-- 1 lukas staff 499947 14 Apr 16:59 compact_monitor_1_1776175195769.mp4
-rw-r--r-- 1 lukas staff 501324 14 Apr 17:05 compact_monitor_1_1776175516084.mp4
-rw-r--r-- 1 lukas staff 1187862 14 Apr 17:10 compact_monitor_1_1776175831658.mp4
-rw-r--r-- 1 lukas staff 4276500 14 Apr 17:15 compact_monitor_1_1776176143265.mp4
-rw-r--r-- 1 lukas staff 3712128 14 Apr 17:21 compact_monitor_1_1776176471641.mp4
-rw-r--r-- 1 lukas staff 3520036 14 Apr 17:26 compact_monitor_1_1776176786477.mp4
-rw-r--r-- 1 lukas staff 4125306 14 Apr 17:31 compact_monitor_1_1776177099043.mp4
-rw-r--r-- 1 lukas staff 3547886 14 Apr 17:37 compact_monitor_1_1776177433201.mp4
-rw-r--r-- 1 lukas staff 2400891 14 Apr 17:42 compact_monitor_1_1776177752872.mp4
-rw-r--r-- 1 lukas staff 4689207 14 Apr 17:47 compact_monitor_1_1776178058207.mp4
-rw-r--r-- 1 lukas staff 1801277 14 Apr 17:53 compact_monitor_1_1776178379517.mp4
-rw-r--r-- 1 lukas staff 3259926 14 Apr 17:58 compact_monitor_1_1776178686281.mp4
-rw-r--r-- 1 lukas staff 1470635 14 Apr 18:03 compact_monitor_1_1776178992046.mp4
-rw-r--r-- 1 lukas staff 3102429 14 Apr 18:08 compact_monitor_1_1776179297527.mp4
-rw-r--r-- 1 lukas staff 223940 14 Apr 18:13 compact_monitor_1_1776179607218.mp4
-rw-r--r-- 1 lukas staff 871065 14 Apr 18:13 compact_monitor_1_1776179613012.mp4
-rw-r--r-- 1 lukas staff 1029083 14 Apr 18:18 compact_monitor_1_1776179929971.mp4
-rw-r--r-- 1 lukas staff 1117436 14 Apr 18:24 compact_monitor_1_1776180248849.mp4
-rw-r--r-- 1 lukas staff 987269 14 Apr 18:29 compact_monitor_1_1776180569996.mp4
-rw-r--r-- 1 lukas staff 896704 14 Apr 18:34 compact_monitor_1_1776180888049.mp4
-rw-r--r-- 1 lukas staff 1945946 14 Apr 18:40 compact_monitor_1_1776181202583.mp4
-rw-r--r-- 1 lukas staff 862072 14 Apr 18:45 compact_monitor_1_1776181526071.mp4
-rw-r--r-- 1 lukas staff 813756 14 Apr 18:50 compact_monitor_1_1776181848713.mp4
-rw-r--r-- 1 lukas staff 813226 14 Apr 18:56 compact_monitor_1_1776182167765.mp4
-rw-r--r-- 1 lukas staff 792289 14 Apr 19:01 compact_monitor_1_1776182486906.mp4
-rw-r--r-- 1 lukas staff 900197 14 Apr 19:06 compact_monitor_1_1776182803477.mp4
-rw-r--r-- 1 lukas staff 903090 14 Apr 19:12 compact_monitor_1_1776183124102.mp4
-rw-r--r-- 1 lukas staff 821885 14 Apr 19:17 compact_monitor_1_1776183446647.mp4
-rw-r--r-- 1 lukas staff 827224 14 Apr 19:22 compact_monitor_1_1776183765602.mp4
-rw-r--r-- 1 lukas staff 844977 14 Apr 19:28 compact_monitor_1_1776184085319.mp4
-rw-r--r-- 1 lukas staff 4160651 15 Apr 09:59 compact_monitor_1_1776236348162.mp4
-rw-r--r-- 1 lukas staff 2257702 15 Apr 09:59 compact_monitor_1_1776236355103.mp4
-rw-r--r-- 1 lukas staff 803789 14 Apr 09:34 compact_monitor_2_1776148467123.mp4
-rw-r--r-- 1 lukas staff 846598 14 Apr 09:39 compact_monitor_2_1776148769344.mp4
-rw-r--r-- 1 lukas staff 380187 14 Apr 09:44 compact_monitor_2_1776149072222.mp4
-rw-r--r-- 1 lukas staff 4330357 14 Apr 09:49 compact_monitor_2_1776149375411.mp4
-rw-r--r-- 1 lukas staff 5979630 14 Apr 09:54 compact_monitor_2_1776149684838.mp4
-rw-r--r-- 1 lukas staff 5685863 14 Apr 10:00 compact_monitor_2_1776149997069.mp4
-rw-r--r-- 1 lukas staff 1817789 14 Apr 10:05 compact_monitor_2_1776150308175.mp4
-rw-r--r-- 1 lukas staff 3734598 14 Apr 10:10 compact_monitor_2_1776150613826.mp4
-rw-r--r-- 1 lukas staff 7824075 14 Apr 10:15 compact_monitor_2_1776150920663.mp4
-rw-r--r-- 1 lukas staff 6299436 14 Apr 10:20 compact_monitor_2_1776151228707.mp4
-rw-r--r-- 1 lukas staff 3269154 14 Apr 10:25 compact_monitor_2_1776151537695.mp4
-rw-r--r-- 1 lukas staff 9004762 14 Apr 10:30 compact_monitor_2_1776151844100.mp4
-rw-r--r-- 1 lukas staff 4710671 14 Apr 10:35 compact_monitor_2_1776152152089.mp4
-rw-r--r-- 1 lukas staff 11173604 14 Apr 10:41 compact_monitor_2_1776152458959.mp4
-rw-r--r-- 1 lukas staff 6761014 14 Apr 10:46 compact_monitor_2_1776152773411.mp4
-rw-r--r-- 1 lukas staff 3510200 14 Apr 10:51 compact_monitor_2_1776153084189.mp4
-rw-r--r-- 1 lukas staff 5292708 14 Apr 10:56 compact_monitor_2_1776153395785.mp4
-rw-r--r-- 1 lukas staff 5487046 14 Apr 11:01 compact_monitor_2_1776153706319.mp4
-rw-r--r-- 1 lukas staff 5305685 14 Apr 11:06 compact_monitor_2_1776154014738.mp4
-rw-r--r-- 1 lukas staff 1963074 14 Apr 11:12 compact_monitor_2_1776154320980.mp4
-rw-r--r-- 1 lukas staff 2513039 14 Apr 11:17 compact_monitor_2_1776154625932.mp4
-rw-r--r-- 1 lukas staff 2532455 14 Apr 11:22 compact_monitor_2_1776154932083.mp4
-rw-r--r-- 1 lukas staff 5825408 14 Apr 11:27 compact_monitor_2_1776155240989.mp4
-rw-r--r-- 1 lukas staff 2066410 14 Apr 11:32 compact_monitor_2_1776155549265.mp4
-rw-r--r-- 1 lukas staff 3082476 14 Apr 11:37 compact_monitor_2_1776155851806.mp4
-rw-r--r-- 1 lukas staff 1587810 14 Apr 11:42 compact_monitor_2_1776156155857.mp4
-rw-r--r-- 1 lukas staff 2346718 14 Apr 11:47 compact_monitor_2_1776156460205.mp4
-rw-r--r-- 1 lukas staff 1579555 14 Apr 11:52 compact_monitor_2_1776156764898.mp4
-rw-r--r-- 1 lukas staff 5481864 14 Apr 11:57 compact_monitor_2_1776157072094.mp4
-rw-r--r-- 1 lukas staff 6527601 14 Apr 12:03 compact_monitor_2_1776157385210.mp4
-rw-r--r-- 1 lukas staff 9023055 14 Apr 12:08 compact_monitor_2_1776157705883.mp4
-rw-r--r-- 1 lukas staff 7566360 14 Apr 12:13 compact_monitor_2_1776158020136.mp4
-rw-r--r-- 1 lukas staff 8801302 14 Apr 12:19 compact_monitor_2_1776158336585.mp4
-rw-r--r-- 1 lukas staff 4139540 14 Apr 12:24 compact_monitor_2_1776158655295.mp4
-rw-r--r-- 1 lukas staff 2987994 14 Apr 12:29 compact_monitor_2_1776158968629.mp4
-rw-r--r-- 1 lukas staff 6323688 14 Apr 12:34 compact_monitor_2_1776159279327.mp4
-rw-r--r-- 1 lukas staff 2684920 14 Apr 12:40 compact_monitor_2_1776159594527.mp4
-rw-r--r-- 1 lukas staff 1646460 14 Apr 12:45 compact_monitor_2_1776159902504.mp4
-rw-r--r-- 1 lukas staff 1767063 14 Apr 12:50 compact_monitor_2_1776160206071.mp4
-rw-r--r-- 1 lukas staff 1910044 14 Apr 12:55 compact_monitor_2_1776160509646.mp4
-rw-r--r-- 1 lukas staff 5101631 14 Apr 13:00 compact_monitor_2_1776160814860.mp4
-rw-r--r-- 1 lukas staff 2487221 14 Apr 13:05 compact_monitor_2_1776161121862.mp4
-rw-r--r-- 1 lukas staff 1452868 14 Apr 13:10 compact_monitor_2_1776161425872.mp4
-rw-r--r-- 1 lukas staff 2963557 14 Apr 13:15 compact_monitor_2_1776161729470.mp4
-rw-r--r-- 1 lukas staff 984939 14 Apr 13:20 compact_monitor_2_1776162033592.mp4
-rw-r--r-- 1 lukas staff 3411829 14 Apr 13:25 compact_monitor_2_1776162337569.mp4
-rw-r--r-- 1 lukas staff 622723 14 Apr 13:30 compact_monitor_2_1776162641477.mp4
-rw-r--r-- 1 lukas staff 2472562 14 Apr 13:35 compact_monitor_2_1776162943983.mp4
-rw-r--r-- 1 lukas staff 1139489 14 Apr 13:40 compact_monitor_2_1776163247509.mp4
-rw-r--r-- 1 lukas staff 862846 14 Apr 13:45 compact_monitor_2_1776163550848.mp4
-rw-r--r-- 1 lukas staff 274959 14 Apr 13:50 compact_monitor_2_1776163854468.mp4
-rw-r--r-- 1 lukas staff 2036659 14 Apr 13:55 compact_monitor_2_1776164156817.mp4
-rw-r--r-- 1 lukas staff 6134905 14 Apr 14:01 compact_monitor_2_1776164461879.mp4
-rw-r--r-- 1 lukas staff 9022378 14 Apr 14:06 compact_monitor_2_1776164770881.mp4
-rw-r--r-- 1 lukas staff 4566763 14 Apr 14:15 compact_monitor_2_1776165320959.mp4
-rw-r--r-- 1 lukas staff 462447 14 Apr 14:20 compact_monitor_2_1776165629627.mp4
-rw-r--r-- 1 lukas staff 709149 14 Apr 14:25 compact_monitor_2_1776165933147.mp4
-rw-r--r-- 1 lukas staff 4478027 14 Apr 14:30 compact_monitor_2_1776166241146.mp4
-rw-r--r-- 1 lukas staff 7488847 14 Apr 14:36 compact_monitor_2_1776166555947.mp4
-rw-r--r-- 1 lukas staff 7883274 14 Apr 14:41 compact_monitor_2_1776166866538.mp4
-rw-r--r-- 1 lukas staff 2869256 14 Apr 14:46 compact_monitor_2_1776167179562.mp4
-rw-r--r-- 1 lukas staff 3068440 14 Apr 14:51 compact_monitor_2_1776167487518.mp4
-rw-r--r-- 1 lukas staff 1816545 14 Apr 14:56 compact_monitor_2_1776167799896.mp4
-rw-r--r-- 1 lukas staff 3180474 14 Apr 15:01 compact_monitor_2_1776168109470.mp4
-rw-r--r-- 1 lukas staff 3774140 14 Apr 15:07 compact_monitor_2_1776168415670.mp4
-rw-r--r-- 1 lukas staff 4536363 14 Apr 15:12 compact_monitor_2_1776168725137.mp4
-rw-r--r-- 1 lukas staff 2387221 14 Apr 15:17 compact_monitor_2_1776169033283.mp4
-rw-r--r-- 1 lukas staff 2605350 14 Apr 15:22 compact_monitor_2_1776169338888.mp4
-rw-r--r-- 1 lukas staff 6906038 14 Apr 15:27 compact_monitor_2_1776169645977.mp4
-rw-r--r-- 1 lukas staff 5738495 14 Apr 15:32 compact_monitor_2_1776169965047.mp4
-rw-r--r-- 1 lukas staff 5595644 14 Apr 15:38 compact_monitor_2_1776170281359.mp4
-rw-r--r-- 1 lukas staff 584749 14 Apr 15:43 compact_monitor_2_1776170598047.mp4
-rw-r--r-- 1 lukas staff 2633541 14 Apr 15:48 compact_monitor_2_1776170903735.mp4
-rw-r--r-- 1 lukas staff 770182 14 Apr 15:53 compact_monitor_2_1776171208825.mp4
-rw-r--r-- 1 lukas staff 1658362 14 Apr 15:58 compact_monitor_2_1776171512473.mp4
-rw-r--r-- 1 lukas staff 295793 14 Apr 16:03 compact_monitor_2_1776171817959.mp4
-rw-r--r-- 1 lukas staff 3540965 14 Apr 16:08 compact_monitor_2_1776172123631.mp4
-rw-r--r-- 1 lukas staff 3589660 14 Apr 16:13 compact_monitor_2_1776172430586.mp4
-rw-r--r-- 1 lukas staff 4735044 14 Apr 16:19 compact_monitor_2_1776172739210.mp4
-rw-r--r-- 1 lukas staff 4951644 14 Apr 16:24 compact_monitor_2_1776173049122.mp4
-rw-r--r-- 1 lukas staff 5939102 14 Apr 16:29 compact_monitor_2_1776173357170.mp4
-rw-r--r-- 1 lukas staff 2549744 14 Apr 16:34 compact_monitor_2_1776173665142.mp4
-rw-r--r-- 1 lukas staff 996149 14 Apr 16:39 compact_monitor_2_1776173972456.mp4
-rw-r--r-- 1 lukas staff 2663346 14 Apr 16:44 compact_monitor_2_1776174276676.mp4
-rw-r--r-- 1 lukas staff 1776844 14 Apr 16:49 compact_monitor_2_1776174582351.mp4
-rw-r--r-- 1 lukas staff 1669202 14 Apr 16:54 compact_monitor_2_1776174889930.mp4
-rw-r--r-- 1 lukas staff 5414828 14 Apr 17:00 compact_monitor_2_1776175198918.mp4
-rw-r--r-- 1 lukas staff 5727100 14 Apr 17:05 compact_monitor_2_1776175518133.mp4
-rw-r--r-- 1 lukas staff 6080220 14 Apr 17:10 compact_monitor_2_1776175835473.mp4
-rw-r--r-- 1 lukas staff 3631681 14 Apr 17:16 compact_monitor_2_1776176159421.mp4
-rw-r--r-- 1 lukas staff 1861818 14 Apr 17:21 compact_monitor_2_1776176479999.mp4
-rw-r--r-- 1 lukas staff 1471229 14 Apr 17:26 compact_monitor_2_1776176794129.mp4
-rw-r--r-- 1 lukas staff 1792667 14 Apr 17:32 compact_monitor_2_1776177119122.mp4
-rw-r--r-- 1 lukas staff 2398088 14 Apr 17:37 compact_monitor_2_1776177447361.mp4
-rw-r--r-- 1 lukas staff 1873376 14 Apr 17:42 compact_monitor_2_1776177755837.mp4
-rw-r--r-- 1 lukas staff 3686281 14 Apr 17:47 compact_monitor_2_1776178069540.mp4
-rw-r--r-- 1 lukas staff 1842517 14 Apr 17:53 compact_monitor_2_1776178382342.mp4
-rw-r--r-- 1 lukas staff 2595005 14 Apr 17:58 compact_monitor_2_1776178688999.mp4
-rw-r--r-- 1 lukas staff 3352578 14 Apr 18:03 compact_monitor_2_1776178994368.mp4
-rw-r--r-- 1 lukas staff 7474140 14 Apr 18:08 compact_monitor_2_1776179301874.mp4
-rw-r--r-- 1 lukas staff 18300640 14 Apr 18:13 compact_monitor_2_1776179614376.mp4
-rw-r--r-- 1 lukas staff 8302944 14 Apr 18:13 compact_monitor_2_1776179625270.mp4
-rw-r--r-- 1 lukas staff 27338956 14 Apr 18:19 compact_monitor_2_1776179934590.mp4
-rw-r--r-- 1 lukas staff 1061768 14 Apr 18:19 compact_monitor_2_1776179947276.mp4
-rw-r--r-- 1 lukas staff 24282145 14 Apr 18:24 compact_monitor_2_1776180254284.mp4
-rw-r--r-- 1 lukas staff 5647384 14 Apr 18:24 compact_monitor_2_1776180266890.mp4
-rw-r--r-- 1 lukas staff 32748524 14 Apr 18:29 compact_monitor_2_1776180574284.mp4
-rw-r--r-- 1 lukas staff 25769571 14 Apr 18:35 compact_monitor_2_1776180892046.mp4
-rw-r--r-- 1 lukas staff 41983533 14 Apr 18:40 compact_monitor_2_1776181207025.mp4
-rw-r--r-- 1 lukas staff 3365850 14 Apr 18:40 compact_monitor_2_1776181223864.mp4
-rw-r--r-- 1 lukas staff 40919053 14 Apr 18:45 compact_monitor_2_1776181530742.mp4
-rw-r--r-- 1 lukas staff 3870375 14 Apr 18:45 compact_monitor_2_1776181546619.mp4
-rw-r--r-- 1 lukas staff 36175005 14 Apr 18:51 compact_monitor_2_1776181853124.mp4
-rw-r--r-- 1 lukas staff 36717883 14 Apr 18:56 compact_monitor_2_1776182171990.mp4
-rw-r--r-- 1 lukas staff 27140350 14 Apr 19:01 compact_monitor_2_1776182491150.mp4
-rw-r--r-- 1 lukas staff 20914618 14 Apr 19:06 compact_monitor_2_1776182808796.mp4
-rw-r--r-- 1 lukas staff 4716229 14 Apr 19:07 compact_monitor_2_1776182820060.mp4
-rw-r--r-- 1 lukas staff 24788277 14 Apr 19:12 compact_monitor_2_1776183129006.mp4
-rw-r--r-- 1 lukas staff 7974655 14 Apr 19:12 compact_monitor_2_1776183141483.mp4
-rw-r--r-- 1 lukas staff 22872307 14 Apr 19:17 compact_monitor_2_1776183451042.mp4
-rw-r--r-- 1 lukas staff 3283631 14 Apr 19:17 compact_monitor_2_1776183462827.mp4
-rw-r--r-- 1 lukas staff 32308259 14 Apr 19:23 compact_monitor_2_1776183769519.mp4
-rw-r--r-- 1 lukas staff 2847482 14 Apr 19:23 compact_monitor_2_1776183783534.mp4
-rw-r--r-- 1 lukas staff 36823186 14 Apr 19:28 compact_monitor_2_1776184089558.mp4
-rw-r--r-- 1 lukas staff 5825352 14 Apr 19:28 compact_monitor_2_1776184104421.mp4
-rw-r--r-- 1 lukas staff 30437061 15 Apr 09:59 compact_monitor_2_1776236357169.mp4
-rw-r--r-- 1 lukas staff 4350302 15 Apr 09:59 compact_monitor_2_1776236373794.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 11:58:00] ========================================
[2026-04-18 11:58:00] Screenpipe sync starting for: 2026-04-14
[2026-04-18 11:58:00] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 11:58:04] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync
Data dir: OK (245 files, 1.0G)
[+00m04s] ▶ Copying data folder for 2026-04-14
rsync 2026-04-14/ → NAS ✗ 531 / 245 files
[2026-04-18 11:58:09] Archive DB size: 3.0G
[2026-04-18 11:58:09] Total time: 0m9s
[2026-04-18 11:58:09] Sync complete for 2026-04-14
[2026-04-18 11:58:09] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 11:59:41] ========================================
[2026-04-18 11:59:41] Screenpipe sync starting for: 2026-04-14
[2026-04-18 11:59:41] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 11:59:45] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync
Data dir: OK (245 files, 1.0G)
[+00m04s] ▶ Copying data folder for 2026-04-14
rsync 2026-04-14/ → NAS ✓ 2m07s (245 files, 1.0G)
[2026-04-18 12:01:52] Archive DB size: 3.0G
[2026-04-18 12:01:52] Total time: 2m11s
[2026-04-18 12:01:52] Sync complete for 2026-04-14
[2026-04-18 12:01:52] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 12:03:13] ========================================
[2026-04-18 12:03:13] Screenpipe sync starting for: 2026-04-14
[2026-04-18 12:03:13] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/screenpipe
Archive DB: will be created
Data dir: OK (245 files, 1.0G)
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)
Parse error near line 3: unknown database nas
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames
error here ---^
Parse error near line 4: unknown database nas
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements
error here ---^
Parse error near line 5: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events
error here ---^
Parse error near line 6: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text
error here ---^
Parse error near line 7: unknown database nas
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks
error here ---^
Parse error near line 8: unknown database nas
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings
error here ---^
Runtime error near line 9: no such database: nas
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ls /Volumes/screenpipe/
ls: /Volumes/screenpipe/: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ cd /Volumes
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 96
drwxr-xr-x 6 root wheel 192 18 Apr 11:17 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
lrwxr-xr-x 1 root wheel 1 16 Apr 15:43 Macintosh HD -> /
drwx------ 1 lukas staff 16384 11 Apr 15:46 Test
drwx------ 1 lukas staff 16384 13 Mar 10:17 Work
drwx------ 1 lukas staff 16384 17 Apr 21:29 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls -la /Volumes/screenpipe/
total 0
ls: /Volumes/screenpipe/: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ mount | grep screenpipe
//Adm1n@DXP4800PLUS-B5F8/screenpipe on /Volumes/screenpipe (smbfs, nodev, nosuid, mounted by lukas)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ umount /Volumes/screenpipe
umount: unmount(/Volumes/screenpipe): Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 12:06:45] ========================================
[2026-04-18 12:06:45] Screenpipe sync starting for: 2026-04-14
[2026-04-18 12:06:45] ==============...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 252 lukas staff 8064 17 Apr 21:06 2026-04-17\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-17\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ ll\ntotal 1373568\ndrwxr-xr-x 252 lukas staff 8064 17 Apr 21:06 .\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..\n-rw-r--r-- 1 lukas staff 199318 17 Apr 21:04 1776449072292_m1.jpg\n-rw-r--r-- 1 lukas staff 161727 17 Apr 21:04 1776449072392_m2.jpg\n-rw-r--r-- 1 lukas staff 275595 17 Apr 21:05 1776449102977_m1.jpg\n-rw-r--r-- 1 lukas staff 161843 17 Apr 21:05 1776449103126_m2.jpg\n-rw-r--r-- 1 lukas staff 161707 17 Apr 21:05 1776449115894_m2.jpg\n-rw-r--r-- 1 lukas staff 275808 17 Apr 21:05 1776449116000_m1.jpg\n-rw-r--r-- 1 lukas staff 127822 17 Apr 21:05 1776449117231_m1.jpg\n-rw-r--r-- 1 lukas staff 149529 17 Apr 21:05 1776449126408_m1.jpg\n-rw-r--r-- 1 lukas staff 267074 17 Apr 21:05 1776449129340_m1.jpg\n-rw-r--r-- 1 lukas staff 236620 17 Apr 21:05 1776449134291_m1.jpg\n-rw-r--r-- 1 lukas staff 163014 17 Apr 21:05 1776449134403_m2.jpg\n-rw-r--r-- 1 lukas staff 232479 17 Apr 21:05 1776449135411_m1.jpg\n-rw-r--r-- 1 lukas staff 162882 17 Apr 21:05 1776449140257_m2.jpg\n-rw-r--r-- 1 lukas staff 262782 17 Apr 21:05 1776449140392_m1.jpg\n-rw-r--r-- 1 lukas staff 274674 17 Apr 21:05 1776449141484_m1.jpg\n-rw-r--r-- 1 lukas staff 267740 17 Apr 21:05 1776449149487_m1.jpg\n-rw-r--r-- 1 lukas staff 161911 17 Apr 21:05 1776449149493_m2.jpg\n-rw-r--r-- 1 lukas staff 267807 17 Apr 21:05 1776449150939_m1.jpg\n-rw-r--r-- 1 lukas staff 165566 17 Apr 21:05 1776449152599_m2.jpg\n-rw-r--r-- 1 lukas staff 272433 17 Apr 21:05 1776449152602_m1.jpg\n-rw-r--r-- 1 lukas staff 269228 17 Apr 21:06 1776449168292_m1.jpg\n-rw-r--r-- 1 lukas staff 162930 17 Apr 21:06 1776449168393_m2.jpg\n-rw-r--r-- 1 lukas staff 267027 17 Apr 21:06 1776449175046_m1.jpg\n-rw-r--r-- 1 lukas staff 162922 17 Apr 21:06 1776449178917_m2.jpg\n-rw-r--r-- 1 lukas staff 271791 17 Apr 21:06 1776449181107_m1.jpg\n-rw-r--r-- 1 lukas staff 1010791 17 Apr 09:07 compact_monitor_1_1776406033543.mp4\n-rw-r--r-- 1 lukas staff 1641627 17 Apr 09:12 compact_monitor_1_1776406339160.mp4\n-rw-r--r-- 1 lukas staff 282103 17 Apr 09:17 compact_monitor_1_1776406650753.mp4\n-rw-r--r-- 1 lukas staff 533856 17 Apr 09:22 compact_monitor_1_1776406961354.mp4\n-rw-r--r-- 1 lukas staff 372860 17 Apr 09:27 compact_monitor_1_1776407272449.mp4\n-rw-r--r-- 1 lukas staff 269617 17 Apr 09:33 compact_monitor_1_1776407585831.mp4\n-rw-r--r-- 1 lukas staff 289824 17 Apr 09:38 compact_monitor_1_1776407896440.mp4\n-rw-r--r-- 1 lukas staff 244134 17 Apr 09:43 compact_monitor_1_1776408206183.mp4\n-rw-r--r-- 1 lukas staff 239140 17 Apr 09:48 compact_monitor_1_1776408516395.mp4\n-rw-r--r-- 1 lukas staff 361011 17 Apr 09:53 compact_monitor_1_1776408824270.mp4\n-rw-r--r-- 1 lukas staff 3365373 17 Apr 09:59 compact_monitor_1_1776409136717.mp4\n-rw-r--r-- 1 lukas staff 2601020 17 Apr 10:04 compact_monitor_1_1776409450395.mp4\n-rw-r--r-- 1 lukas staff 3497066 17 Apr 10:09 compact_monitor_1_1776409759172.mp4\n-rw-r--r-- 1 lukas staff 1507571 17 Apr 10:14 compact_monitor_1_1776410067944.mp4\n-rw-r--r-- 1 lukas staff 943396 17 Apr 10:19 compact_monitor_1_1776410372484.mp4\n-rw-r--r-- 1 lukas staff 1225040 17 Apr 10:24 compact_monitor_1_1776410674629.mp4\n-rw-r--r-- 1 lukas staff 2224229 17 Apr 10:29 compact_monitor_1_1776410981487.mp4\n-rw-r--r-- 1 lukas staff 398291 17 Apr 10:34 compact_monitor_1_1776411298373.mp4\n-rw-r--r-- 1 lukas staff 4376235 17 Apr 10:40 compact_monitor_1_1776411601686.mp4\n-rw-r--r-- 1 lukas staff 5007720 17 Apr 10:45 compact_monitor_1_1776411923026.mp4\n-rw-r--r-- 1 lukas staff 2281319 17 Apr 10:50 compact_monitor_1_1776412242015.mp4\n-rw-r--r-- 1 lukas staff 3182872 17 Apr 10:56 compact_monitor_1_1776412560658.mp4\n-rw-r--r-- 1 lukas staff 3896056 17 Apr 11:01 compact_monitor_1_1776412881181.mp4\n-rw-r--r-- 1 lukas staff 6279582 17 Apr 11:06 compact_monitor_1_1776413192507.mp4\n-rw-r--r-- 1 lukas staff 6492126 17 Apr 11:12 compact_monitor_1_1776413508291.mp4\n-rw-r--r-- 1 lukas staff 6045038 17 Apr 11:17 compact_monitor_1_1776413848971.mp4\n-rw-r--r-- 1 lukas staff 4968033 17 Apr 11:23 compact_monitor_1_1776414180658.mp4\n-rw-r--r-- 1 lukas staff 7109088 17 Apr 11:28 compact_monitor_1_1776414513921.mp4\n-rw-r--r-- 1 lukas staff 9099339 17 Apr 11:34 compact_monitor_1_1776414839842.mp4\n-rw-r--r-- 1 lukas staff 926165 17 Apr 11:34 compact_monitor_1_1776414858793.mp4\n-rw-r--r-- 1 lukas staff 9246778 17 Apr 11:39 compact_monitor_1_1776415182593.mp4\n-rw-r--r-- 1 lukas staff 8361876 17 Apr 11:45 compact_monitor_1_1776415505403.mp4\n-rw-r--r-- 1 lukas staff 7215549 17 Apr 11:50 compact_monitor_1_1776415841776.mp4\n-rw-r--r-- 1 lukas staff 6234445 17 Apr 11:56 compact_monitor_1_1776416174658.mp4\n-rw-r--r-- 1 lukas staff 11694078 17 Apr 12:01 compact_monitor_1_1776416497484.mp4\n-rw-r--r-- 1 lukas staff 7033085 17 Apr 12:07 compact_monitor_1_1776416834587.mp4\n-rw-r--r-- 1 lukas staff 4309161 17 Apr 12:12 compact_monitor_1_1776417157754.mp4\n-rw-r--r-- 1 lukas staff 3782878 17 Apr 12:18 compact_monitor_1_1776417481425.mp4\n-rw-r--r-- 1 lukas staff 5597264 17 Apr 12:23 compact_monitor_1_1776417802134.mp4\n-rw-r--r-- 1 lukas staff 5667747 17 Apr 12:28 compact_monitor_1_1776418119908.mp4\n-rw-r--r-- 1 lukas staff 8840842 17 Apr 12:34 compact_monitor_1_1776418443506.mp4\n-rw-r--r-- 1 lukas staff 5442395 17 Apr 12:39 compact_monitor_1_1776418761701.mp4\n-rw-r--r-- 1 lukas staff 4054014 17 Apr 12:44 compact_monitor_1_1776419074083.mp4\n-rw-r--r-- 1 lukas staff 3734539 17 Apr 12:49 compact_monitor_1_1776419388949.mp4\n-rw-r--r-- 1 lukas staff 3137915 17 Apr 12:55 compact_monitor_1_1776419701686.mp4\n-rw-r--r-- 1 lukas staff 3064654 17 Apr 13:00 compact_monitor_1_1776420015547.mp4\n-rw-r--r-- 1 lukas staff 1189833 17 Apr 13:05 compact_monitor_1_1776420321592.mp4\n-rw-r--r-- 1 lukas staff 1862832 17 Apr 13:10 compact_monitor_1_1776420633887.mp4\n-rw-r--r-- 1 lukas staff 520517 17 Apr 13:15 compact_monitor_1_1776420947144.mp4\n-rw-r--r-- 1 lukas staff 790509 17 Apr 13:20 compact_monitor_1_1776421253865.mp4\n-rw-r--r-- 1 lukas staff 1155599 17 Apr 13:26 compact_monitor_1_1776421566995.mp4\n-rw-r--r-- 1 lukas staff 626836 17 Apr 13:31 compact_monitor_1_1776421884013.mp4\n-rw-r--r-- 1 lukas staff 2709758 17 Apr 13:36 compact_monitor_1_1776422194788.mp4\n-rw-r--r-- 1 lukas staff 894214 17 Apr 13:41 compact_monitor_1_1776422513565.mp4\n-rw-r--r-- 1 lukas staff 1298826 17 Apr 13:47 compact_monitor_1_1776422829105.mp4\n-rw-r--r-- 1 lukas staff 3454896 17 Apr 13:52 compact_monitor_1_1776423143916.mp4\n-rw-r--r-- 1 lukas staff 1369217 17 Apr 13:57 compact_monitor_1_1776423466196.mp4\n-rw-r--r-- 1 lukas staff 1677163 17 Apr 14:03 compact_monitor_1_1776423783420.mp4\n-rw-r--r-- 1 lukas staff 556702 17 Apr 14:08 compact_monitor_1_1776424109344.mp4\n-rw-r--r-- 1 lukas staff 1001886 17 Apr 14:13 compact_monitor_1_1776424416957.mp4\n-rw-r--r-- 1 lukas staff 1485547 17 Apr 14:18 compact_monitor_1_1776424730536.mp4\n-rw-r--r-- 1 lukas staff 935536 17 Apr 14:24 compact_monitor_1_1776425050631.mp4\n-rw-r--r-- 1 lukas staff 1119642 17 Apr 14:29 compact_monitor_1_1776425372446.mp4\n-rw-r--r-- 1 lukas staff 430883 17 Apr 14:34 compact_monitor_1_1776425690857.mp4\n-rw-r--r-- 1 lukas staff 427035 17 Apr 14:40 compact_monitor_1_1776426003278.mp4\n-rw-r--r-- 1 lukas staff 654605 17 Apr 14:45 compact_monitor_1_1776426312497.mp4\n-rw-r--r-- 1 lukas staff 440539 17 Apr 14:50 compact_monitor_1_1776426625506.mp4\n-rw-r--r-- 1 lukas staff 439802 17 Apr 14:55 compact_monitor_1_1776426939895.mp4\n-rw-r--r-- 1 lukas staff 557755 17 Apr 15:01 compact_monitor_1_1776427261945.mp4\n-rw-r--r-- 1 lukas staff 1071442 17 Apr 15:06 compact_monitor_1_1776427571985.mp4\n-rw-r--r-- 1 lukas staff 2606361 17 Apr 15:11 compact_monitor_1_1776427882803.mp4\n-rw-r--r-- 1 lukas staff 951201 17 Apr 15:16 compact_monitor_1_1776428192090.mp4\n-rw-r--r-- 1 lukas staff 322306 17 Apr 15:21 compact_monitor_1_1776428505150.mp4\n-rw-r--r-- 1 lukas staff 331163 17 Apr 15:26 compact_monitor_1_1776428811953.mp4\n-rw-r--r-- 1 lukas staff 737469 17 Apr 15:32 compact_monitor_1_1776429127526.mp4\n-rw-r--r-- 1 lukas staff 352621 17 Apr 15:37 compact_monitor_1_1776429442374.mp4\n-rw-r--r-- 1 lukas staff 444203 17 Apr 15:42 compact_monitor_1_1776429752217.mp4\n-rw-r--r-- 1 lukas staff 1407505 17 Apr 15:47 compact_monitor_1_1776430066920.mp4\n-rw-r--r-- 1 lukas staff 360974 17 Apr 15:53 compact_monitor_1_1776430376918.mp4\n-rw-r--r-- 1 lukas staff 321565 17 Apr 15:58 compact_monitor_1_1776430691588.mp4\n-rw-r--r-- 1 lukas staff 317048 17 Apr 16:03 compact_monitor_1_1776431003504.mp4\n-rw-r--r-- 1 lukas staff 321894 17 Apr 16:08 compact_monitor_1_1776431317637.mp4\n-rw-r--r-- 1 lukas staff 333513 17 Apr 16:13 compact_monitor_1_1776431629041.mp4\n-rw-r--r-- 1 lukas staff 326264 17 Apr 16:19 compact_monitor_1_1776431942238.mp4\n-rw-r--r-- 1 lukas staff 366336 17 Apr 16:24 compact_monitor_1_1776432254490.mp4\n-rw-r--r-- 1 lukas staff 327825 17 Apr 16:29 compact_monitor_1_1776432574989.mp4\n-rw-r--r-- 1 lukas staff 1048363 17 Apr 16:34 compact_monitor_1_1776432882794.mp4\n-rw-r--r-- 1 lukas staff 1668969 17 Apr 16:39 compact_monitor_1_1776433188842.mp4\n-rw-r--r-- 1 lukas staff 1283899 17 Apr 16:44 compact_monitor_1_1776433493858.mp4\n-rw-r--r-- 1 lukas staff 314118 17 Apr 16:50 compact_monitor_1_1776433800642.mp4\n-rw-r--r-- 1 lukas staff 547478 17 Apr 16:55 compact_monitor_1_1776434111371.mp4\n-rw-r--r-- 1 lukas staff 868654 17 Apr 17:00 compact_monitor_1_1776434420728.mp4\n-rw-r--r-- 1 lukas staff 885215 17 Apr 17:05 compact_monitor_1_1776434723901.mp4\n-rw-r--r-- 1 lukas staff 508905 17 Apr 17:10 compact_monitor_1_1776435038035.mp4\n-rw-r--r-- 1 lukas staff 591766 17 Apr 17:16 compact_monitor_1_1776435363044.mp4\n-rw-r--r-- 1 lukas staff 2031034 17 Apr 17:21 compact_monitor_1_1776435683729.mp4\n-rw-r--r-- 1 lukas staff 2136043 17 Apr 17:26 compact_monitor_1_1776436005076.mp4\n-rw-r--r-- 1 lukas staff 578716 17 Apr 17:32 compact_monitor_1_1776436319163.mp4\n-rw-r--r-- 1 lukas staff 1308705 17 Apr 17:37 compact_monitor_1_1776436630439.mp4\n-rw-r--r-- 1 lukas staff 958771 17 Apr 17:42 compact_monitor_1_1776436939049.mp4\n-rw-r--r-- 1 lukas staff 797771 17 Apr 17:47 compact_monitor_1_1776437247467.mp4\n-rw-r--r-- 1 lukas staff 1230186 17 Apr 17:52 compact_monitor_1_1776437554897.mp4\n-rw-r--r-- 1 lukas staff 862632 17 Apr 17:57 compact_monitor_1_1776437862465.mp4\n-rw-r--r-- 1 lukas staff 757441 17 Apr 18:02 compact_monitor_1_1776438171931.mp4\n-rw-r--r-- 1 lukas staff 686680 17 Apr 18:08 compact_monitor_1_1776438479816.mp4\n-rw-r--r-- 1 lukas staff 1078524 17 Apr 18:13 compact_monitor_1_1776438783339.mp4\n-rw-r--r-- 1 lukas staff 496616 17 Apr 18:18 compact_monitor_1_1776439090720.mp4\n-rw-r--r-- 1 lukas staff 774571 17 Apr 18:23 compact_monitor_1_1776439396975.mp4\n-rw-r--r-- 1 lukas staff 1160291 17 Apr 18:28 compact_monitor_1_1776439703924.mp4\n-rw-r--r-- 1 lukas staff 632541 17 Apr 18:34 compact_monitor_1_1776440053428.mp4\n-rw-r--r-- 1 lukas staff 3291212 17 Apr 21:05 compact_monitor_1_1776449135667.mp4\n-rw-r--r-- 1 lukas staff 768306 17 Apr 09:07 compact_monitor_2_1776406035126.mp4\n-rw-r--r-- 1 lukas staff 9277508 17 Apr 09:12 compact_monitor_2_1776406343152.mp4\n-rw-r--r-- 1 lukas staff 627114 17 Apr 09:12 compact_monitor_2_1776406349962.mp4\n-rw-r--r-- 1 lukas staff 11129246 17 Apr 09:17 compact_monitor_2_1776406653780.mp4\n-rw-r--r-- 1 lukas staff 8352174 17 Apr 09:22 compact_monitor_2_1776406964880.mp4\n-rw-r--r-- 1 lukas staff 8551960 17 Apr 09:28 compact_monitor_2_1776407277493.mp4\n-rw-r--r-- 1 lukas staff 679244 17 Apr 09:28 compact_monitor_2_1776407283693.mp4\n-rw-r--r-- 1 lukas staff 12641011 17 Apr 09:33 compact_monitor_2_1776407588804.mp4\n-rw-r--r-- 1 lukas staff 9384615 17 Apr 09:38 compact_monitor_2_1776407900099.mp4\n-rw-r--r-- 1 lukas staff 4024767 17 Apr 09:43 compact_monitor_2_1776408207652.mp4\n-rw-r--r-- 1 lukas staff 2627851 17 Apr 09:48 compact_monitor_2_1776408517311.mp4\n-rw-r--r-- 1 lukas staff 4877190 17 Apr 09:53 compact_monitor_2_1776408826734.mp4\n-rw-r--r-- 1 lukas staff 3807909 17 Apr 09:59 compact_monitor_2_1776409142638.mp4\n-rw-r--r-- 1 lukas staff 4217716 17 Apr 10:04 compact_monitor_2_1776409454184.mp4\n-rw-r--r-- 1 lukas staff 1717578 17 Apr 10:09 compact_monitor_2_1776409763153.mp4\n-rw-r--r-- 1 lukas staff 1067064 17 Apr 10:14 compact_monitor_2_1776410070480.mp4\n-rw-r--r-- 1 lukas staff 442425 17 Apr 10:19 compact_monitor_2_1776410373664.mp4\n-rw-r--r-- 1 lukas staff 444497 17 Apr 10:24 compact_monitor_2_1776410676126.mp4\n-rw-r--r-- 1 lukas staff 3670025 17 Apr 10:29 compact_monitor_2_1776410986705.mp4\n-rw-r--r-- 1 lukas staff 448939 17 Apr 10:35 compact_monitor_2_1776411299875.mp4\n-rw-r--r-- 1 lukas staff 4490377 17 Apr 10:40 compact_monitor_2_1776411611306.mp4\n-rw-r--r-- 1 lukas staff 7437798 17 Apr 10:45 compact_monitor_2_1776411929615.mp4\n-rw-r--r-- 1 lukas staff 6915447 17 Apr 10:50 compact_monitor_2_1776412245368.mp4\n-rw-r--r-- 1 lukas staff 7988703 17 Apr 10:56 compact_monitor_2_1776412568330.mp4\n-rw-r--r-- 1 lukas staff 5512416 17 Apr 11:01 compact_monitor_2_1776412886253.mp4\n-rw-r--r-- 1 lukas staff 3107875 17 Apr 11:06 compact_monitor_2_1776413199096.mp4\n-rw-r--r-- 1 lukas staff 4158550 17 Apr 11:12 compact_monitor_2_1776413529707.mp4\n-rw-r--r-- 1 lukas staff 4756064 17 Apr 11:17 compact_monitor_2_1776413863997.mp4\n-rw-r--r-- 1 lukas staff 5281060 17 Apr 11:23 compact_monitor_2_1776414194026.mp4\n-rw-r--r-- 1 lukas staff 2605046 17 Apr 11:28 compact_monitor_2_1776414528521.mp4\n-rw-r--r-- 1 lukas staff 5473302 17 Apr 11:34 compact_monitor_2_1776414861255.mp4\n-rw-r--r-- 1 lukas staff 2791759 17 Apr 11:40 compact_monitor_2_1776415194836.mp4\n-rw-r--r-- 1 lukas staff 5494699 17 Apr 11:45 compact_monitor_2_1776415523929.mp4\n-rw-r--r-- 1 lukas staff 4025150 17 Apr 11:51 compact_monitor_2_1776415859261.mp4\n-rw-r--r-- 1 lukas staff 2583684 17 Apr 11:56 compact_monitor_2_1776416187267.mp4\n-rw-r--r-- 1 lukas staff 5240195 17 Apr 12:02 compact_monitor_2_1776416514967.mp4\n-rw-r--r-- 1 lukas staff 3629687 17 Apr 12:07 compact_monitor_2_1776416846005.mp4\n-rw-r--r-- 1 lukas staff 5021721 17 Apr 12:12 compact_monitor_2_1776417172355.mp4\n-rw-r--r-- 1 lukas staff 2986447 17 Apr 12:18 compact_monitor_2_1776417492277.mp4\n-rw-r--r-- 1 lukas staff 3976942 17 Apr 12:23 compact_monitor_2_1776417810578.mp4\n-rw-r--r-- 1 lukas staff 4294715 17 Apr 12:29 compact_monitor_2_1776418132304.mp4\n-rw-r--r-- 1 lukas staff 4698998 17 Apr 12:34 compact_monitor_2_1776418452374.mp4\n-rw-r--r-- 1 lukas staff 3160886 17 Apr 12:39 compact_monitor_2_1776418768555.mp4\n-rw-r--r-- 1 lukas staff 1776908 17 Apr 12:44 compact_monitor_2_1776419082274.mp4\n-rw-r--r-- 1 lukas staff 1500725 17 Apr 12:49 compact_monitor_2_1776419394506.mp4\n-rw-r--r-- 1 lukas staff 1279602 17 Apr 12:55 compact_monitor_2_1776419709571.mp4\n-rw-r--r-- 1 lukas staff 2017894 17 Apr 13:00 compact_monitor_2_1776420018859.mp4\n-rw-r--r-- 1 lukas staff 5639690 17 Apr 13:05 compact_monitor_2_1776420324337.mp4\n-rw-r--r-- 1 lukas staff 4587635 17 Apr 13:10 compact_monitor_2_1776420636421.mp4\n-rw-r--r-- 1 lukas staff 2001162 17 Apr 13:15 compact_monitor_2_1776420949555.mp4\n-rw-r--r-- 1 lukas staff 3658362 17 Apr 13:21 compact_monitor_2_1776421256306.mp4\n-rw-r--r-- 1 lukas staff 7755716 17 Apr 13:26 compact_monitor_2_1776421570292.mp4\n-rw-r--r-- 1 lukas staff 3362766 17 Apr 13:31 compact_monitor_2_1776421886698.mp4\n-rw-r--r-- 1 lukas staff 6893513 17 Apr 13:36 compact_monitor_2_1776422197625.mp4\n-rw-r--r-- 1 lukas staff 4788146 17 Apr 13:42 compact_monitor_2_1776422516390.mp4\n-rw-r--r-- 1 lukas staff 4840848 17 Apr 13:47 compact_monitor_2_1776422832136.mp4\n-rw-r--r-- 1 lukas staff 9094075 17 Apr 13:52 compact_monitor_2_1776423148671.mp4\n-rw-r--r-- 1 lukas staff 10072846 17 Apr 13:57 compact_monitor_2_1776423469970.mp4\n-rw-r--r-- 1 lukas staff 13504297 17 Apr 14:03 compact_monitor_2_1776423787536.mp4\n-rw-r--r-- 1 lukas staff 1622612 17 Apr 14:08 compact_monitor_2_1776424110832.mp4\n-rw-r--r-- 1 lukas staff 5427700 17 Apr 14:13 compact_monitor_2_1776424419206.mp4\n-rw-r--r-- 1 lukas staff 1746789 17 Apr 14:19 compact_monitor_2_1776424736034.mp4\n-rw-r--r-- 1 lukas staff 4232204 17 Apr 14:24 compact_monitor_2_1776425054084.mp4\n-rw-r--r-- 1 lukas staff 4457408 17 Apr 14:29 compact_monitor_2_1776425375574.mp4\n-rw-r--r-- 1 lukas staff 174979 17 Apr 14:34 compact_monitor_2_1776425692307.mp4\n-rw-r--r-- 1 lukas staff 169969 17 Apr 14:40 compact_monitor_2_1776426005170.mp4\n-rw-r--r-- 1 lukas staff 2723106 17 Apr 14:45 compact_monitor_2_1776426315173.mp4\n-rw-r--r-- 1 lukas staff 3313658 17 Apr 14:50 compact_monitor_2_1776426627449.mp4\n-rw-r--r-- 1 lukas staff 4720437 17 Apr 14:55 compact_monitor_2_1776426943213.mp4\n-rw-r--r-- 1 lukas staff 3589313 17 Apr 15:01 compact_monitor_2_1776427263991.mp4\n-rw-r--r-- 1 lukas staff 6295236 17 Apr 15:06 compact_monitor_2_1776427573875.mp4\n-rw-r--r-- 1 lukas staff 3390902 17 Apr 15:11 compact_monitor_2_1776427885283.mp4\n-rw-r--r-- 1 lukas staff 1637607 17 Apr 15:16 compact_monitor_2_1776428194704.mp4\n-rw-r--r-- 1 lukas staff 1355327 17 Apr 15:21 compact_monitor_2_1776428506246.mp4\n-rw-r--r-- 1 lukas staff 4897048 17 Apr 15:27 compact_monitor_2_1776428815157.mp4\n-rw-r--r-- 1 lukas staff 4930900 17 Apr 15:32 compact_monitor_2_1776429130905.mp4\n-rw-r--r-- 1 lukas staff 2581578 17 Apr 15:37 compact_monitor_2_1776429444142.mp4\n-rw-r--r-- 1 lukas staff 4764105 17 Apr 15:42 compact_monitor_2_1776429755437.mp4\n-rw-r--r-- 1 lukas staff 4039902 17 Apr 15:47 compact_monitor_2_1776430069174.mp4\n-rw-r--r-- 1 lukas staff 4735734 17 Apr 15:53 compact_monitor_2_1776430380212.mp4\n-rw-r--r-- 1 lukas staff 2195410 17 Apr 15:58 compact_monitor_2_1776430693483.mp4\n-rw-r--r-- 1 lukas staff 1857322 17 Apr 16:03 compact_monitor_2_1776431005386.mp4\n-rw-r--r-- 1 lukas staff 3412100 17 Apr 16:08 compact_monitor_2_1776431319373.mp4\n-rw-r--r-- 1 lukas staff 6928537 17 Apr 16:13 compact_monitor_2_1776431631778.mp4\n-rw-r--r-- 1 lukas staff 4990793 17 Apr 16:19 compact_monitor_2_1776431944571.mp4\n-rw-r--r-- 1 lukas staff 8242278 17 Apr 16:24 compact_monitor_2_1776432258818.mp4\n-rw-r--r-- 1 lukas staff 451999 17 Apr 16:24 compact_monitor_2_1776432269036.mp4\n-rw-r--r-- 1 lukas staff 2978452 17 Apr 16:29 compact_monitor_2_1776432577467.mp4\n-rw-r--r-- 1 lukas staff 1248291 17 Apr 16:34 compact_monitor_2_1776432884349.mp4\n-rw-r--r-- 1 lukas staff 2963525 17 Apr 16:39 compact_monitor_2_1776433190284.mp4\n-rw-r--r-- 1 lukas staff 1958858 17 Apr 16:44 compact_monitor_2_1776433495477.mp4\n-rw-r--r-- 1 lukas staff 1656966 17 Apr 16:50 compact_monitor_2_1776433802347.mp4\n-rw-r--r-- 1 lukas staff 2813856 17 Apr 16:55 compact_monitor_2_1776434112909.mp4\n-rw-r--r-- 1 lukas staff 510112 17 Apr 17:00 compact_monitor_2_1776434422384.mp4\n-rw-r--r-- 1 lukas staff 4354386 17 Apr 17:05 compact_monitor_2_1776434725886.mp4\n-rw-r--r-- 1 lukas staff 9798615 17 Apr 17:10 compact_monitor_2_1776435041115.mp4\n-rw-r--r-- 1 lukas staff 4503179 17 Apr 17:16 compact_monitor_2_1776435368020.mp4\n-rw-r--r-- 1 lukas staff 857002 17 Apr 17:16 compact_monitor_2_1776435376040.mp4\n-rw-r--r-- 1 lukas staff 8587996 17 Apr 17:21 compact_monitor_2_1776435687051.mp4\n-rw-r--r-- 1 lukas staff 5052247 17 Apr 17:26 compact_monitor_2_1776436009787.mp4\n-rw-r--r-- 1 lukas staff 2947924 17 Apr 17:32 compact_monitor_2_1776436320877.mp4\n-rw-r--r-- 1 lukas staff 689465 17 Apr 17:37 compact_monitor_2_1776436632536.mp4\n-rw-r--r-- 1 lukas staff 1353469 17 Apr 17:42 compact_monitor_2_1776436940788.mp4\n-rw-r--r-- 1 lukas staff 870893 17 Apr 17:47 compact_monitor_2_1776437249077.mp4\n-rw-r--r-- 1 lukas staff 2653839 17 Apr 17:52 compact_monitor_2_1776437556659.mp4\n-rw-r--r-- 1 lukas staff 4310138 17 Apr 17:57 compact_monitor_2_1776437864727.mp4\n-rw-r--r-- 1 lukas staff 3683875 17 Apr 18:02 compact_monitor_2_1776438173313.mp4\n-rw-r--r-- 1 lukas staff 1916129 17 Apr 18:08 compact_monitor_2_1776438481043.mp4\n-rw-r--r-- 1 lukas staff 2349626 17 Apr 18:13 compact_monitor_2_1776438785553.mp4\n-rw-r--r-- 1 lukas staff 641202 17 Apr 18:18 compact_monitor_2_1776439092011.mp4\n-rw-r--r-- 1 lukas staff 3006319 17 Apr 18:23 compact_monitor_2_1776439398485.mp4\n-rw-r--r-- 1 lukas staff 1675776 17 Apr 18:28 compact_monitor_2_1776439705765.mp4\n-rw-r--r-- 1 lukas staff 4465225 17 Apr 18:34 compact_monitor_2_1776440055922.mp4\n-rw-r--r-- 1 lukas staff 2351472 17 Apr 21:05 compact_monitor_2_1776449140917.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ rsync -av --ignore-existing \\\n ~/.screenpipe/data/data/2026-04-14/ \\\n /Volumes/Test/screenpipe/data/2026-04-14/\nbuilding file list ... done\n./\ncompact_monitor_1_1776236348162.mp4\ncompact_monitor_1_1776236355103.mp4\ncompact_monitor_2_1776236357169.mp4\ncompact_monitor_2_1776236373794.mp4\n\nsent 41217485 bytes received 114 bytes 4338694.63 bytes/sec\ntotal size is 1085072596 speedup is 26.33\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-14\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ll\ntotal 2120256\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 .\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..\n-rw-r--r--@ 1 lukas staff 581687 14 Apr 09:34 compact_monitor_1_1776148466581.mp4\n-rw-r--r--@ 1 lukas staff 702153 14 Apr 09:39 compact_monitor_1_1776148768082.mp4\n-rw-r--r--@ 1 lukas staff 251978 14 Apr 09:44 compact_monitor_1_1776149071467.mp4\n-rw-r--r-- 1 lukas staff 1717429 14 Apr 09:49 compact_monitor_1_1776149373136.mp4\n-rw-r--r-- 1 lukas staff 3477530 14 Apr 09:54 compact_monitor_1_1776149679747.mp4\n-rw-r--r-- 1 lukas staff 4579266 14 Apr 09:59 compact_monitor_1_1776149991618.mp4\n-rw-r--r-- 1 lukas staff 2305892 14 Apr 10:05 compact_monitor_1_1776150305479.mp4\n-rw-r--r-- 1 lukas staff 2464098 14 Apr 10:10 compact_monitor_1_1776150611148.mp4\n-rw-r--r-- 1 lukas staff 2640699 14 Apr 10:15 compact_monitor_1_1776150917977.mp4\n-rw-r--r-- 1 lukas staff 2938324 14 Apr 10:20 compact_monitor_1_1776151225175.mp4\n-rw-r--r-- 1 lukas staff 5734426 14 Apr 10:25 compact_monitor_1_1776151533655.mp4\n-rw-r--r-- 1 lukas staff 711441 14 Apr 10:30 compact_monitor_1_1776151841776.mp4\n-rw-r--r-- 1 lukas staff 373214 14 Apr 10:35 compact_monitor_1_1776152149591.mp4\n-rw-r--r-- 1 lukas staff 259200 14 Apr 10:40 compact_monitor_1_1776152456802.mp4\n-rw-r--r-- 1 lukas staff 563549 14 Apr 10:46 compact_monitor_1_1776152770846.mp4\n-rw-r--r-- 1 lukas staff 1085034 14 Apr 10:51 compact_monitor_1_1776153081304.mp4\n-rw-r--r-- 1 lukas staff 5856145 14 Apr 10:56 compact_monitor_1_1776153389824.mp4\n-rw-r--r-- 1 lukas staff 3729206 14 Apr 11:01 compact_monitor_1_1776153702196.mp4\n-rw-r--r-- 1 lukas staff 1381857 14 Apr 11:06 compact_monitor_1_1776154011626.mp4\n-rw-r--r-- 1 lukas staff 590718 14 Apr 11:12 compact_monitor_1_1776154319547.mp4\n-rw-r--r-- 1 lukas staff 1306438 14 Apr 11:17 compact_monitor_1_1776154623893.mp4\n-rw-r--r-- 1 lukas staff 216930 14 Apr 11:22 compact_monitor_1_1776154930014.mp4\n-rw-r--r-- 1 lukas staff 473698 14 Apr 11:27 compact_monitor_1_1776155238144.mp4\n-rw-r--r-- 1 lukas staff 3051314 14 Apr 11:32 compact_monitor_1_1776155547239.mp4\n-rw-r--r-- 1 lukas staff 253380 14 Apr 11:37 compact_monitor_1_1776155850943.mp4\n-rw-r--r-- 1 lukas staff 258154 14 Apr 11:42 compact_monitor_1_1776156154229.mp4\n-rw-r--r-- 1 lukas staff 962893 14 Apr 11:47 compact_monitor_1_1776156458244.mp4\n-rw-r--r-- 1 lukas staff 1806149 14 Apr 11:52 compact_monitor_1_1776156762972.mp4\n-rw-r--r-- 1 lukas staff 2280711 14 Apr 11:57 compact_monitor_1_1776157067935.mp4\n-rw-r--r-- 1 lukas staff 1779777 14 Apr 12:03 compact_monitor_1_1776157380235.mp4\n-rw-r--r-- 1 lukas staff 792745 14 Apr 12:08 compact_monitor_1_1776157700511.mp4\n-rw-r--r-- 1 lukas staff 290618 14 Apr 12:13 compact_monitor_1_1776158016840.mp4\n-rw-r--r-- 1 lukas staff 572761 14 Apr 12:18 compact_monitor_1_1776158333836.mp4\n-rw-r--r-- 1 lukas staff 200419 14 Apr 12:24 compact_monitor_1_1776158651565.mp4\n-rw-r--r-- 1 lukas staff 190795 14 Apr 12:29 compact_monitor_1_1776158966333.mp4\n-rw-r--r-- 1 lukas staff 2126277 14 Apr 12:34 compact_monitor_1_1776159274939.mp4\n-rw-r--r-- 1 lukas staff 3747860 14 Apr 12:39 compact_monitor_1_1776159588710.mp4\n-rw-r--r-- 1 lukas staff 2152422 14 Apr 12:45 compact_monitor_1_1776159900733.mp4\n-rw-r--r-- 1 lukas staff 709258 14 Apr 12:50 compact_monitor_1_1776160204634.mp4\n-rw-r--r-- 1 lukas staff 1158847 14 Apr 12:55 compact_monitor_1_1776160508015.mp4\n-rw-r--r-- 1 lukas staff 1813578 14 Apr 13:00 compact_monitor_1_1776160811806.mp4\n-rw-r--r-- 1 lukas staff 684607 14 Apr 13:05 compact_monitor_1_1776161119981.mp4\n-rw-r--r-- 1 lukas staff 636562 14 Apr 13:10 compact_monitor_1_1776161424648.mp4\n-rw-r--r-- 1 lukas staff 323432 14 Apr 13:15 compact_monitor_1_1776161728448.mp4\n-rw-r--r-- 1 lukas staff 294055 14 Apr 13:20 compact_monitor_1_1776162032394.mp4\n-rw-r--r-- 1 lukas staff 296941 14 Apr 13:25 compact_monitor_1_1776162336175.mp4\n-rw-r--r-- 1 lukas staff 292219 14 Apr 13:30 compact_monitor_1_1776162640619.mp4\n-rw-r--r-- 1 lukas staff 293726 14 Apr 13:35 compact_monitor_1_1776162943050.mp4\n-rw-r--r-- 1 lukas staff 832989 14 Apr 13:40 compact_monitor_1_1776163246420.mp4\n-rw-r--r-- 1 lukas staff 1068134 14 Apr 13:45 compact_monitor_1_1776163549145.mp4\n-rw-r--r-- 1 lukas staff 501189 14 Apr 13:50 compact_monitor_1_1776163853383.mp4\n-rw-r--r-- 1 lukas staff 930299 14 Apr 13:55 compact_monitor_1_1776164155311.mp4\n-rw-r--r-- 1 lukas staff 2515358 14 Apr 14:01 compact_monitor_1_1776164459131.mp4\n-rw-r--r-- 1 lukas staff 1286863 14 Apr 14:06 compact_monitor_1_1776164766940.mp4\n-rw-r--r-- 1 lukas staff 1472795 14 Apr 14:15 compact_monitor_1_1776165318512.mp4\n-rw-r--r-- 1 lukas staff 439699 14 Apr 14:20 compact_monitor_1_1776165627501.mp4\n-rw-r--r-- 1 lukas staff 519424 14 Apr 14:25 compact_monitor_1_1776165931952.mp4\n-rw-r--r-- 1 lukas staff 2267443 14 Apr 14:30 compact_monitor_1_1776166235408.mp4\n-rw-r--r-- 1 lukas staff 1637916 14 Apr 14:35 compact_monitor_1_1776166551721.mp4\n-rw-r--r-- 1 lukas staff 1111434 14 Apr 14:41 compact_monitor_1_1776166862836.mp4\n-rw-r--r-- 1 lukas staff 1546177 14 Apr 14:46 compact_monitor_1_1776167176709.mp4\n-rw-r--r-- 1 lukas staff 466769 14 Apr 14:51 compact_monitor_1_1776167484535.mp4\n-rw-r--r-- 1 lukas staff 993316 14 Apr 14:56 compact_monitor_1_1776167793776.mp4\n-rw-r--r-- 1 lukas staff 2902714 14 Apr 15:01 compact_monitor_1_1776168105399.mp4\n-rw-r--r-- 1 lukas staff 1279133 14 Apr 15:06 compact_monitor_1_1776168413169.mp4\n-rw-r--r-- 1 lukas staff 1132592 14 Apr 15:12 compact_monitor_1_1776168722629.mp4\n-rw-r--r-- 1 lukas staff 355416 14 Apr 15:17 compact_monitor_1_1776169031962.mp4\n-rw-r--r-- 1 lukas staff 345697 14 Apr 15:22 compact_monitor_1_1776169337693.mp4\n-rw-r--r-- 1 lukas staff 3063911 14 Apr 15:27 compact_monitor_1_1776169641353.mp4\n-rw-r--r-- 1 lukas staff 5369163 14 Apr 15:32 compact_monitor_1_1776169957193.mp4\n-rw-r--r-- 1 lukas staff 3605997 14 Apr 15:38 compact_monitor_1_1776170274586.mp4\n-rw-r--r-- 1 lukas staff 1662201 14 Apr 15:43 compact_monitor_1_1776170596259.mp4\n-rw-r--r-- 1 lukas staff 2518520 14 Apr 15:48 compact_monitor_1_1776170900299.mp4\n-rw-r--r-- 1 lukas staff 2298616 14 Apr 15:53 compact_monitor_1_1776171206621.mp4\n-rw-r--r-- 1 lukas staff 252208 14 Apr 15:58 compact_monitor_1_1776171511042.mp4\n-rw-r--r-- 1 lukas staff 547163 14 Apr 16:03 compact_monitor_1_1776171816609.mp4\n-rw-r--r-- 1 lukas staff 3548604 14 Apr 16:08 compact_monitor_1_1776172119791.mp4\n-rw-r--r-- 1 lukas staff 1006390 14 Apr 16:13 compact_monitor_1_1776172427942.mp4\n-rw-r--r-- 1 lukas staff 1168310 14 Apr 16:18 compact_monitor_1_1776172735350.mp4\n-rw-r--r-- 1 lukas staff 2138214 14 Apr 16:24 compact_monitor_1_1776173046731.mp4\n-rw-r--r-- 1 lukas staff 2138875 14 Apr 16:29 compact_monitor_1_1776173354299.mp4\n-rw-r--r-- 1 lukas staff 336470 14 Apr 16:34 compact_monitor_1_1776173662610.mp4\n-rw-r--r-- 1 lukas staff 330494 14 Apr 16:39 compact_monitor_1_1776173971011.mp4\n-rw-r--r-- 1 lukas staff 574889 14 Apr 16:44 compact_monitor_1_1776174275028.mp4\n-rw-r--r-- 1 lukas staff 450335 14 Apr 16:49 compact_monitor_1_1776174580719.mp4\n-rw-r--r-- 1 lukas staff 452365 14 Apr 16:54 compact_monitor_1_1776174888498.mp4\n-rw-r--r-- 1 lukas staff 499947 14 Apr 16:59 compact_monitor_1_1776175195769.mp4\n-rw-r--r-- 1 lukas staff 501324 14 Apr 17:05 compact_monitor_1_1776175516084.mp4\n-rw-r--r-- 1 lukas staff 1187862 14 Apr 17:10 compact_monitor_1_1776175831658.mp4\n-rw-r--r-- 1 lukas staff 4276500 14 Apr 17:15 compact_monitor_1_1776176143265.mp4\n-rw-r--r-- 1 lukas staff 3712128 14 Apr 17:21 compact_monitor_1_1776176471641.mp4\n-rw-r--r-- 1 lukas staff 3520036 14 Apr 17:26 compact_monitor_1_1776176786477.mp4\n-rw-r--r-- 1 lukas staff 4125306 14 Apr 17:31 compact_monitor_1_1776177099043.mp4\n-rw-r--r-- 1 lukas staff 3547886 14 Apr 17:37 compact_monitor_1_1776177433201.mp4\n-rw-r--r-- 1 lukas staff 2400891 14 Apr 17:42 compact_monitor_1_1776177752872.mp4\n-rw-r--r-- 1 lukas staff 4689207 14 Apr 17:47 compact_monitor_1_1776178058207.mp4\n-rw-r--r-- 1 lukas staff 1801277 14 Apr 17:53 compact_monitor_1_1776178379517.mp4\n-rw-r--r-- 1 lukas staff 3259926 14 Apr 17:58 compact_monitor_1_1776178686281.mp4\n-rw-r--r-- 1 lukas staff 1470635 14 Apr 18:03 compact_monitor_1_1776178992046.mp4\n-rw-r--r-- 1 lukas staff 3102429 14 Apr 18:08 compact_monitor_1_1776179297527.mp4\n-rw-r--r-- 1 lukas staff 223940 14 Apr 18:13 compact_monitor_1_1776179607218.mp4\n-rw-r--r-- 1 lukas staff 871065 14 Apr 18:13 compact_monitor_1_1776179613012.mp4\n-rw-r--r-- 1 lukas staff 1029083 14 Apr 18:18 compact_monitor_1_1776179929971.mp4\n-rw-r--r-- 1 lukas staff 1117436 14 Apr 18:24 compact_monitor_1_1776180248849.mp4\n-rw-r--r-- 1 lukas staff 987269 14 Apr 18:29 compact_monitor_1_1776180569996.mp4\n-rw-r--r-- 1 lukas staff 896704 14 Apr 18:34 compact_monitor_1_1776180888049.mp4\n-rw-r--r-- 1 lukas staff 1945946 14 Apr 18:40 compact_monitor_1_1776181202583.mp4\n-rw-r--r-- 1 lukas staff 862072 14 Apr 18:45 compact_monitor_1_1776181526071.mp4\n-rw-r--r-- 1 lukas staff 813756 14 Apr 18:50 compact_monitor_1_1776181848713.mp4\n-rw-r--r-- 1 lukas staff 813226 14 Apr 18:56 compact_monitor_1_1776182167765.mp4\n-rw-r--r-- 1 lukas staff 792289 14 Apr 19:01 compact_monitor_1_1776182486906.mp4\n-rw-r--r-- 1 lukas staff 900197 14 Apr 19:06 compact_monitor_1_1776182803477.mp4\n-rw-r--r-- 1 lukas staff 903090 14 Apr 19:12 compact_monitor_1_1776183124102.mp4\n-rw-r--r-- 1 lukas staff 821885 14 Apr 19:17 compact_monitor_1_1776183446647.mp4\n-rw-r--r-- 1 lukas staff 827224 14 Apr 19:22 compact_monitor_1_1776183765602.mp4\n-rw-r--r-- 1 lukas staff 844977 14 Apr 19:28 compact_monitor_1_1776184085319.mp4\n-rw-r--r-- 1 lukas staff 4160651 15 Apr 09:59 compact_monitor_1_1776236348162.mp4\n-rw-r--r-- 1 lukas staff 2257702 15 Apr 09:59 compact_monitor_1_1776236355103.mp4\n-rw-r--r-- 1 lukas staff 803789 14 Apr 09:34 compact_monitor_2_1776148467123.mp4\n-rw-r--r-- 1 lukas staff 846598 14 Apr 09:39 compact_monitor_2_1776148769344.mp4\n-rw-r--r-- 1 lukas staff 380187 14 Apr 09:44 compact_monitor_2_1776149072222.mp4\n-rw-r--r-- 1 lukas staff 4330357 14 Apr 09:49 compact_monitor_2_1776149375411.mp4\n-rw-r--r-- 1 lukas staff 5979630 14 Apr 09:54 compact_monitor_2_1776149684838.mp4\n-rw-r--r-- 1 lukas staff 5685863 14 Apr 10:00 compact_monitor_2_1776149997069.mp4\n-rw-r--r-- 1 lukas staff 1817789 14 Apr 10:05 compact_monitor_2_1776150308175.mp4\n-rw-r--r-- 1 lukas staff 3734598 14 Apr 10:10 compact_monitor_2_1776150613826.mp4\n-rw-r--r-- 1 lukas staff 7824075 14 Apr 10:15 compact_monitor_2_1776150920663.mp4\n-rw-r--r-- 1 lukas staff 6299436 14 Apr 10:20 compact_monitor_2_1776151228707.mp4\n-rw-r--r-- 1 lukas staff 3269154 14 Apr 10:25 compact_monitor_2_1776151537695.mp4\n-rw-r--r-- 1 lukas staff 9004762 14 Apr 10:30 compact_monitor_2_1776151844100.mp4\n-rw-r--r-- 1 lukas staff 4710671 14 Apr 10:35 compact_monitor_2_1776152152089.mp4\n-rw-r--r-- 1 lukas staff 11173604 14 Apr 10:41 compact_monitor_2_1776152458959.mp4\n-rw-r--r-- 1 lukas staff 6761014 14 Apr 10:46 compact_monitor_2_1776152773411.mp4\n-rw-r--r-- 1 lukas staff 3510200 14 Apr 10:51 compact_monitor_2_1776153084189.mp4\n-rw-r--r-- 1 lukas staff 5292708 14 Apr 10:56 compact_monitor_2_1776153395785.mp4\n-rw-r--r-- 1 lukas staff 5487046 14 Apr 11:01 compact_monitor_2_1776153706319.mp4\n-rw-r--r-- 1 lukas staff 5305685 14 Apr 11:06 compact_monitor_2_1776154014738.mp4\n-rw-r--r-- 1 lukas staff 1963074 14 Apr 11:12 compact_monitor_2_1776154320980.mp4\n-rw-r--r-- 1 lukas staff 2513039 14 Apr 11:17 compact_monitor_2_1776154625932.mp4\n-rw-r--r-- 1 lukas staff 2532455 14 Apr 11:22 compact_monitor_2_1776154932083.mp4\n-rw-r--r-- 1 lukas staff 5825408 14 Apr 11:27 compact_monitor_2_1776155240989.mp4\n-rw-r--r-- 1 lukas staff 2066410 14 Apr 11:32 compact_monitor_2_1776155549265.mp4\n-rw-r--r-- 1 lukas staff 3082476 14 Apr 11:37 compact_monitor_2_1776155851806.mp4\n-rw-r--r-- 1 lukas staff 1587810 14 Apr 11:42 compact_monitor_2_1776156155857.mp4\n-rw-r--r-- 1 lukas staff 2346718 14 Apr 11:47 compact_monitor_2_1776156460205.mp4\n-rw-r--r-- 1 lukas staff 1579555 14 Apr 11:52 compact_monitor_2_1776156764898.mp4\n-rw-r--r-- 1 lukas staff 5481864 14 Apr 11:57 compact_monitor_2_1776157072094.mp4\n-rw-r--r-- 1 lukas staff 6527601 14 Apr 12:03 compact_monitor_2_1776157385210.mp4\n-rw-r--r-- 1 lukas staff 9023055 14 Apr 12:08 compact_monitor_2_1776157705883.mp4\n-rw-r--r-- 1 lukas staff 7566360 14 Apr 12:13 compact_monitor_2_1776158020136.mp4\n-rw-r--r-- 1 lukas staff 8801302 14 Apr 12:19 compact_monitor_2_1776158336585.mp4\n-rw-r--r-- 1 lukas staff 4139540 14 Apr 12:24 compact_monitor_2_1776158655295.mp4\n-rw-r--r-- 1 lukas staff 2987994 14 Apr 12:29 compact_monitor_2_1776158968629.mp4\n-rw-r--r-- 1 lukas staff 6323688 14 Apr 12:34 compact_monitor_2_1776159279327.mp4\n-rw-r--r-- 1 lukas staff 2684920 14 Apr 12:40 compact_monitor_2_1776159594527.mp4\n-rw-r--r-- 1 lukas staff 1646460 14 Apr 12:45 compact_monitor_2_1776159902504.mp4\n-rw-r--r-- 1 lukas staff 1767063 14 Apr 12:50 compact_monitor_2_1776160206071.mp4\n-rw-r--r-- 1 lukas staff 1910044 14 Apr 12:55 compact_monitor_2_1776160509646.mp4\n-rw-r--r-- 1 lukas staff 5101631 14 Apr 13:00 compact_monitor_2_1776160814860.mp4\n-rw-r--r-- 1 lukas staff 2487221 14 Apr 13:05 compact_monitor_2_1776161121862.mp4\n-rw-r--r-- 1 lukas staff 1452868 14 Apr 13:10 compact_monitor_2_1776161425872.mp4\n-rw-r--r-- 1 lukas staff 2963557 14 Apr 13:15 compact_monitor_2_1776161729470.mp4\n-rw-r--r-- 1 lukas staff 984939 14 Apr 13:20 compact_monitor_2_1776162033592.mp4\n-rw-r--r-- 1 lukas staff 3411829 14 Apr 13:25 compact_monitor_2_1776162337569.mp4\n-rw-r--r-- 1 lukas staff 622723 14 Apr 13:30 compact_monitor_2_1776162641477.mp4\n-rw-r--r-- 1 lukas staff 2472562 14 Apr 13:35 compact_monitor_2_1776162943983.mp4\n-rw-r--r-- 1 lukas staff 1139489 14 Apr 13:40 compact_monitor_2_1776163247509.mp4\n-rw-r--r-- 1 lukas staff 862846 14 Apr 13:45 compact_monitor_2_1776163550848.mp4\n-rw-r--r-- 1 lukas staff 274959 14 Apr 13:50 compact_monitor_2_1776163854468.mp4\n-rw-r--r-- 1 lukas staff 2036659 14 Apr 13:55 compact_monitor_2_1776164156817.mp4\n-rw-r--r-- 1 lukas staff 6134905 14 Apr 14:01 compact_monitor_2_1776164461879.mp4\n-rw-r--r-- 1 lukas staff 9022378 14 Apr 14:06 compact_monitor_2_1776164770881.mp4\n-rw-r--r-- 1 lukas staff 4566763 14 Apr 14:15 compact_monitor_2_1776165320959.mp4\n-rw-r--r-- 1 lukas staff 462447 14 Apr 14:20 compact_monitor_2_1776165629627.mp4\n-rw-r--r-- 1 lukas staff 709149 14 Apr 14:25 compact_monitor_2_1776165933147.mp4\n-rw-r--r-- 1 lukas staff 4478027 14 Apr 14:30 compact_monitor_2_1776166241146.mp4\n-rw-r--r-- 1 lukas staff 7488847 14 Apr 14:36 compact_monitor_2_1776166555947.mp4\n-rw-r--r-- 1 lukas staff 7883274 14 Apr 14:41 compact_monitor_2_1776166866538.mp4\n-rw-r--r-- 1 lukas staff 2869256 14 Apr 14:46 compact_monitor_2_1776167179562.mp4\n-rw-r--r-- 1 lukas staff 3068440 14 Apr 14:51 compact_monitor_2_1776167487518.mp4\n-rw-r--r-- 1 lukas staff 1816545 14 Apr 14:56 compact_monitor_2_1776167799896.mp4\n-rw-r--r-- 1 lukas staff 3180474 14 Apr 15:01 compact_monitor_2_1776168109470.mp4\n-rw-r--r-- 1 lukas staff 3774140 14 Apr 15:07 compact_monitor_2_1776168415670.mp4\n-rw-r--r-- 1 lukas staff 4536363 14 Apr 15:12 compact_monitor_2_1776168725137.mp4\n-rw-r--r-- 1 lukas staff 2387221 14 Apr 15:17 compact_monitor_2_1776169033283.mp4\n-rw-r--r-- 1 lukas staff 2605350 14 Apr 15:22 compact_monitor_2_1776169338888.mp4\n-rw-r--r-- 1 lukas staff 6906038 14 Apr 15:27 compact_monitor_2_1776169645977.mp4\n-rw-r--r-- 1 lukas staff 5738495 14 Apr 15:32 compact_monitor_2_1776169965047.mp4\n-rw-r--r-- 1 lukas staff 5595644 14 Apr 15:38 compact_monitor_2_1776170281359.mp4\n-rw-r--r-- 1 lukas staff 584749 14 Apr 15:43 compact_monitor_2_1776170598047.mp4\n-rw-r--r-- 1 lukas staff 2633541 14 Apr 15:48 compact_monitor_2_1776170903735.mp4\n-rw-r--r-- 1 lukas staff 770182 14 Apr 15:53 compact_monitor_2_1776171208825.mp4\n-rw-r--r-- 1 lukas staff 1658362 14 Apr 15:58 compact_monitor_2_1776171512473.mp4\n-rw-r--r-- 1 lukas staff 295793 14 Apr 16:03 compact_monitor_2_1776171817959.mp4\n-rw-r--r-- 1 lukas staff 3540965 14 Apr 16:08 compact_monitor_2_1776172123631.mp4\n-rw-r--r-- 1 lukas staff 3589660 14 Apr 16:13 compact_monitor_2_1776172430586.mp4\n-rw-r--r-- 1 lukas staff 4735044 14 Apr 16:19 compact_monitor_2_1776172739210.mp4\n-rw-r--r-- 1 lukas staff 4951644 14 Apr 16:24 compact_monitor_2_1776173049122.mp4\n-rw-r--r-- 1 lukas staff 5939102 14 Apr 16:29 compact_monitor_2_1776173357170.mp4\n-rw-r--r-- 1 lukas staff 2549744 14 Apr 16:34 compact_monitor_2_1776173665142.mp4\n-rw-r--r-- 1 lukas staff 996149 14 Apr 16:39 compact_monitor_2_1776173972456.mp4\n-rw-r--r-- 1 lukas staff 2663346 14 Apr 16:44 compact_monitor_2_1776174276676.mp4\n-rw-r--r-- 1 lukas staff 1776844 14 Apr 16:49 compact_monitor_2_1776174582351.mp4\n-rw-r--r-- 1 lukas staff 1669202 14 Apr 16:54 compact_monitor_2_1776174889930.mp4\n-rw-r--r-- 1 lukas staff 5414828 14 Apr 17:00 compact_monitor_2_1776175198918.mp4\n-rw-r--r-- 1 lukas staff 5727100 14 Apr 17:05 compact_monitor_2_1776175518133.mp4\n-rw-r--r-- 1 lukas staff 6080220 14 Apr 17:10 compact_monitor_2_1776175835473.mp4\n-rw-r--r-- 1 lukas staff 3631681 14 Apr 17:16 compact_monitor_2_1776176159421.mp4\n-rw-r--r-- 1 lukas staff 1861818 14 Apr 17:21 compact_monitor_2_1776176479999.mp4\n-rw-r--r-- 1 lukas staff 1471229 14 Apr 17:26 compact_monitor_2_1776176794129.mp4\n-rw-r--r-- 1 lukas staff 1792667 14 Apr 17:32 compact_monitor_2_1776177119122.mp4\n-rw-r--r-- 1 lukas staff 2398088 14 Apr 17:37 compact_monitor_2_1776177447361.mp4\n-rw-r--r-- 1 lukas staff 1873376 14 Apr 17:42 compact_monitor_2_1776177755837.mp4\n-rw-r--r-- 1 lukas staff 3686281 14 Apr 17:47 compact_monitor_2_1776178069540.mp4\n-rw-r--r-- 1 lukas staff 1842517 14 Apr 17:53 compact_monitor_2_1776178382342.mp4\n-rw-r--r-- 1 lukas staff 2595005 14 Apr 17:58 compact_monitor_2_1776178688999.mp4\n-rw-r--r-- 1 lukas staff 3352578 14 Apr 18:03 compact_monitor_2_1776178994368.mp4\n-rw-r--r-- 1 lukas staff 7474140 14 Apr 18:08 compact_monitor_2_1776179301874.mp4\n-rw-r--r-- 1 lukas staff 18300640 14 Apr 18:13 compact_monitor_2_1776179614376.mp4\n-rw-r--r-- 1 lukas staff 8302944 14 Apr 18:13 compact_monitor_2_1776179625270.mp4\n-rw-r--r-- 1 lukas staff 27338956 14 Apr 18:19 compact_monitor_2_1776179934590.mp4\n-rw-r--r-- 1 lukas staff 1061768 14 Apr 18:19 compact_monitor_2_1776179947276.mp4\n-rw-r--r-- 1 lukas staff 24282145 14 Apr 18:24 compact_monitor_2_1776180254284.mp4\n-rw-r--r-- 1 lukas staff 5647384 14 Apr 18:24 compact_monitor_2_1776180266890.mp4\n-rw-r--r-- 1 lukas staff 32748524 14 Apr 18:29 compact_monitor_2_1776180574284.mp4\n-rw-r--r-- 1 lukas staff 25769571 14 Apr 18:35 compact_monitor_2_1776180892046.mp4\n-rw-r--r-- 1 lukas staff 41983533 14 Apr 18:40 compact_monitor_2_1776181207025.mp4\n-rw-r--r-- 1 lukas staff 3365850 14 Apr 18:40 compact_monitor_2_1776181223864.mp4\n-rw-r--r-- 1 lukas staff 40919053 14 Apr 18:45 compact_monitor_2_1776181530742.mp4\n-rw-r--r-- 1 lukas staff 3870375 14 Apr 18:45 compact_monitor_2_1776181546619.mp4\n-rw-r--r-- 1 lukas staff 36175005 14 Apr 18:51 compact_monitor_2_1776181853124.mp4\n-rw-r--r-- 1 lukas staff 36717883 14 Apr 18:56 compact_monitor_2_1776182171990.mp4\n-rw-r--r-- 1 lukas staff 27140350 14 Apr 19:01 compact_monitor_2_1776182491150.mp4\n-rw-r--r-- 1 lukas staff 20914618 14 Apr 19:06 compact_monitor_2_1776182808796.mp4\n-rw-r--r-- 1 lukas staff 4716229 14 Apr 19:07 compact_monitor_2_1776182820060.mp4\n-rw-r--r-- 1 lukas staff 24788277 14 Apr 19:12 compact_monitor_2_1776183129006.mp4\n-rw-r--r-- 1 lukas staff 7974655 14 Apr 19:12 compact_monitor_2_1776183141483.mp4\n-rw-r--r-- 1 lukas staff 22872307 14 Apr 19:17 compact_monitor_2_1776183451042.mp4\n-rw-r--r-- 1 lukas staff 3283631 14 Apr 19:17 compact_monitor_2_1776183462827.mp4\n-rw-r--r-- 1 lukas staff 32308259 14 Apr 19:23 compact_monitor_2_1776183769519.mp4\n-rw-r--r-- 1 lukas staff 2847482 14 Apr 19:23 compact_monitor_2_1776183783534.mp4\n-rw-r--r-- 1 lukas staff 36823186 14 Apr 19:28 compact_monitor_2_1776184089558.mp4\n-rw-r--r-- 1 lukas staff 5825352 14 Apr 19:28 compact_monitor_2_1776184104421.mp4\n-rw-r--r-- 1 lukas staff 30437061 15 Apr 09:59 compact_monitor_2_1776236357169.mp4\n-rw-r--r-- 1 lukas staff 4350302 15 Apr 09:59 compact_monitor_2_1776236373794.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 11:58:00] ========================================\n[2026-04-18 11:58:00] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 11:58:00] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 11:58:04] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✗ 531 / 245 files\n\n[2026-04-18 11:58:09] Archive DB size: 3.0G\n[2026-04-18 11:58:09] Total time: 0m9s\n[2026-04-18 11:58:09] Sync complete for 2026-04-14\n[2026-04-18 11:58:09] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 11:59:41] ========================================\n[2026-04-18 11:59:41] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 11:59:41] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 11:59:45] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✓ 2m07s (245 files, 1.0G)\n\n[2026-04-18 12:01:52] Archive DB size: 3.0G\n[2026-04-18 12:01:52] Total time: 2m11s\n[2026-04-18 12:01:52] Sync complete for 2026-04-14\n[2026-04-18 12:01:52] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:03:13] ========================================\n[2026-04-18 12:03:13] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:03:13] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: will be created\n Data dir: OK (245 files, 1.0G)\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)\nParse error near line 3: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames \n error here ---^\nParse error near line 4: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements \n error here ---^\nParse error near line 5: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events \n error here ---^\nParse error near line 6: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text \n error here ---^\nParse error near line 7: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks\n error here ---^\nParse error near line 8: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings \n error here ---^\nRuntime error near line 9: no such database: nas\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ls /Volumes/screenpipe/\nls: /Volumes/screenpipe/: Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ cd /Volumes \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll\ntotal 96\ndrwxr-xr-x 6 root wheel 192 18 Apr 11:17 .\ndrwxr-xr-x 20 root wheel 640 4 Aug 2024 ..\nlrwxr-xr-x 1 root wheel 1 16 Apr 15:43 Macintosh HD -> /\ndrwx------ 1 lukas staff 16384 11 Apr 15:46 Test\ndrwx------ 1 lukas staff 16384 13 Mar 10:17 Work\ndrwx------ 1 lukas staff 16384 17 Apr 21:29 screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls -la /Volumes/screenpipe/\ntotal 0\nls: /Volumes/screenpipe/: Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ mount | grep screenpipe\n//Adm1n@DXP4800PLUS-B5F8/screenpipe on /Volumes/screenpipe (smbfs, nodev, nosuid, mounted by lukas)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ umount /Volumes/screenpipe\numount: unmount(/Volumes/screenpipe): Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:06:45] ========================================\n[2026-04-18 12:06:45] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:06:45] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: will be created\n Data dir: OK (245 files, 1.0G)\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)\nParse error near line 3: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames \n error here ---^\nParse error near line 4: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements \n error here ---^\nParse error near line 5: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events \n error here ---^\nParse error near line 6: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text \n error here ---^\nParse error near line 7: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks\n error here ---^\nParse error near line 8: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings \n error here ---^\nRuntime error near line 9: no such database: nas\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:06:51] ========================================\n[2026-04-18 12:06:51] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:06:51] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:06:55] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m05s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✓ 0m04s (245 files, 1.0G)\n\n[2026-04-18 12:07:00] Archive DB size: 3.0G\n[2026-04-18 12:07:00] Total time: 0m9s\n[2026-04-18 12:07:00] Sync complete for 2026-04-14\n[2026-04-18 12:07:00] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15\n[2026-04-18 12:07:03] ========================================\n[2026-04-18 12:07:03] Screenpipe sync starting for: 2026-04-15\n[2026-04-18 12:07:03] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:07:07] Date 2026-04-15 already has 12874 frames in archive — skipping DB sync\n Data dir: OK (241 files, 2.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-15\n rsync 2026-04-15/ → NAS ✓ 3m22s (241 files, 2.0G)\n\n[2026-04-18 12:10:30] Archive DB size: 3.0G\n[2026-04-18 12:10:30] Total time: 3m27s\n[2026-04-18 12:10:30] Sync complete for 2026-04-15\n[2026-04-18 12:10:30] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-16\n[2026-04-18 12:16:30] ========================================\n[2026-04-18 12:16:30] Screenpipe sync starting for: 2026-04-16\n[2026-04-18 12:16:30] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:16:33] Date 2026-04-16 already has 9270 frames in archive — skipping DB sync\n Data dir: OK (232 files, 799M)\n\n[+00m03s] ▶ Copying data folder for 2026-04-16\n rsync 2026-04-16/ → NAS ✓ 1m46s (232 files, 799M)\n\n[2026-04-18 12:18:20] Archive DB size: 3.0G\n[2026-04-18 12:18:20] Total time: 1m50s\n[2026-04-18 12:18:20] Sync complete for 2026-04-16\n[2026-04-18 12:18:20] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-17\n[2026-04-18 12:18:38] ========================================\n[2026-04-18 12:18:38] Screenpipe sync starting for: 2026-04-17\n[2026-04-18 12:18:38] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:18:42] Date 2026-04-17 already has 10040 frames in archive — skipping DB sync\n Data dir: OK (250 files, 671M)\n\n[+00m04s] ▶ Copying data folder for 2026-04-17\n rsync 2026-04-17/ → NAS ✓ 1m44s (250 files, 671M)\n\n[2026-04-18 12:20:26] Archive DB size: 3.0G\n[2026-04-18 12:20:26] Total time: 1m48s\n[2026-04-18 12:20:26] Sync complete for 2026-04-17\n[2026-04-18 12:20:26] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sqlite3 ~/.screenpipe/db.sqlite \\\n \"SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '%fts%';\"\nui_events_fts\nui_events_fts_data\nui_events_fts_idx\nui_events_fts_docsize\nui_events_fts_config\nelements_fts\nelements_fts_data\nelements_fts_idx\nelements_fts_docsize\nelements_fts_config\naudio_transcriptions_fts\naudio_transcriptions_fts_data\naudio_transcriptions_fts_idx\naudio_transcriptions_fts_docsize\naudio_transcriptions_fts_config\nmemories_fts\nmemories_fts_data\nmemories_fts_idx\nmemories_fts_docsize\nmemories_fts_config\nframes_fts\nframes_fts_data\nframes_fts_idx\nframes_fts_content\nframes_fts_docsize\nframes_fts_config\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sqlite3 ~/.screenpipe/db.sqlite \\\n \"SELECT name, sql FROM sqlite_master WHERE type='table' AND name='ui_events_fts';\"\nui_events_fts|CREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content,\n app_name,\n window_title,\n element_name,\n content='ui_events',\n content_rowid='id',\n tokenize='unicode61'\n)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls\nconfig.json\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-wal\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-12.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-16.0.log\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpipes\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-13.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-17.0.log\ndb.sqlite\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-09.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-14.0.log\u0000\u0000\u0000\u0000\tscreenpipe_sync.sh\ndb.sqlite-shm\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-11.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-15.0.log\u0000\u0000\u0000\u0000\tsync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ alias sp-start\nsp-start='npx screenpipe@latest record --disable-audio &'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ source ~/.zprofile\n\nPoetry could not find a pyproject.toml file in /Users/lukas/.screenpipe or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ alias sp-start \nsp-start='npx screenpipe@latest record --disable-audio --ignored-windows \"Boosteroid\"'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls ~/.screenpipe/data/\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpending-transcriptions\u0000\tscreenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll \ntotal 7614824\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 .\ndrwx------+ 91 lukas staff 2912 18 Apr 12:53 ..\n-rw-r--r--@ 1 lukas staff 8196 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 358 16 Apr 16:49 config.json\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 data\n-rw-r--r--@ 1 lukas staff 3897454592 17 Apr 21:19 db.sqlite\n-rw-r--r--@ 1 lukas staff 32768 18 Apr 13:13 db.sqlite-shm\n-rw-r--r--@ 1 lukas staff 0 17 Apr 21:19 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 15 Apr 14:53 pipes\n-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log\n-rw-r--r-- 1 lukas staff 95425 11 Apr 23:14 screenpipe.2026-04-11.0.log\n-rw-r--r-- 1 lukas staff 72332 12 Apr 23:55 screenpipe.2026-04-12.0.log\n-rw-r--r-- 1 lukas staff 71555 13 Apr 19:50 screenpipe.2026-04-13.0.log\n-rw-r--r-- 1 lukas staff 162389 14 Apr 19:31 screenpipe.2026-04-14.0.log\n-rw-r--r-- 1 lukas staff 175763 15 Apr 18:55 screenpipe.2026-04-15.0.log\n-rw-r--r-- 1 lukas staff 196994 16 Apr 20:33 screenpipe.2026-04-16.0.log\n-rw-r--r-- 1 lukas staff 208424 17 Apr 21:06 screenpipe.2026-04-17.0.log\n-rwxr-xr-x@ 1 lukas staff 14323 18 Apr 12:06 screenpipe_sync.sh\n-rw-r--r--@ 1 lukas staff 12669 18 Apr 12:20 sync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cd data\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 16\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 .\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 data\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd pending-transcriptions \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/pending-transcriptions $ ll\ntotal 0\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 .\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/pending-transcriptions $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ data\nzsh: command not found: data\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 16\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 .\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 data\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd data \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll\ntotal 40\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 .\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 252 lukas staff 8064 17 Apr 21:06 2026-04-17\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-09 \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-09 $ ll\ntotal 79400\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 .\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..\n-rw-r--r-- 1 lukas staff 2558635 9 Apr 20:04 compact_monitor_1_1775754248190.mp4\n-rw-r--r-- 1 lukas staff 5272347 9 Apr 20:09 compact_monitor_1_1775754549504.mp4\n-rw-r--r-- 1 lukas staff 951943 9 Apr 20:15 compact_monitor_1_1775754928127.mp4\n-rw-r--r-- 1 lukas staff 780343 9 Apr 20:20 compact_monitor_1_1775755253065.mp4\n-rw-r--r-- 1 lukas staff 3129755 9 Apr 20:26 compact_monitor_1_1775755561408.mp4\n-rw-r--r-- 1 lukas staff 2369134 9 Apr 20:29 compact_monitor_1_1775755764874.mp4\n-rw-r--r-- 1 lukas staff 2879527 9 Apr 20:32 compact_monitor_1_1775755951928.mp4\n-rw-r--r-- 1 lukas staff 5597115 9 Apr 20:47 compact_monitor_1_1775756847339.mp4\n-rw-r--r-- 1 lukas staff 3460978 9 Apr 21:15 compact_monitor_1_1775758509024.mp4\n-rw-r--r-- 1 lukas staff 1876809 9 Apr 21:15 compact_monitor_1_1775758515203.mp4\n-rw-r--r-- 1 lukas staff 2813430 9 Apr 21:25 compact_monitor_1_1775759143411.mp4\n-rw-r--r-- 1 lukas staff 8937177 11 Apr 14:53 compact_monitor_1_1775908431491.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-09 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll\ntotal 40\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 .\ndrwxr-xr-x 14 lukas staff 448 18 Apr 13:36 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 229 lukas staff 7328 18 Apr 13:35 2026-04-17\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:36 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ll\ntotal 5696\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:36 .\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 ..\n-rw-r--r-- 1 lukas staff 215433 18 Apr 13:33 1776508419390_m1.jpg\n-rw-r--r-- 1 lukas staff 107206 18 Apr 13:33 1776508419555_m2.jpg\n-rw-r--r-- 1 lukas staff 155997 18 Apr 13:33 1776508422128_m1.jpg\n-rw-r--r-- 1 lukas staff 244304 18 Apr 13:33 1776508428450_m1.jpg\n-rw-r--r-- 1 lukas staff 107203 18 Apr 13:33 1776508428554_m2.jpg\n-rw-r--r-- 1 lukas staff 107202 18 Apr 13:33 1776508429142_m2.jpg\n-rw-r--r-- 1 lukas staff 208296 18 Apr 13:34 1776508453522_m1.jpg\n-rw-r--r-- 1 lukas staff 107122 18 Apr 13:34 1776508453670_m2.jpg\n-rw-r--r-- 1 lukas staff 130447 18 Apr 13:34 1776508456271_m1.jpg\n-rw-r--r-- 1 lukas staff 200633 18 Apr 13:34 1776508465399_m1.jpg\n-rw-r--r-- 1 lukas staff 201006 18 Apr 13:34 1776508479214_m1.jpg\n-rw-r--r-- 1 lukas staff 107315 18 Apr 13:34 1776508479222_m2.jpg\n-rw-r--r-- 1 lukas staff 217542 18 Apr 13:35 1776508510109_m1.jpg\n-rw-r--r-- 1 lukas staff 107558 18 Apr 13:35 1776508520117_m2.jpg\n-rw-r--r-- 1 lukas staff 217529 18 Apr 13:35 1776508540416_m1.jpg\n-rw-r--r-- 1 lukas staff 107438 18 Apr 13:35 1776508550498_m2.jpg\n-rw-r--r-- 1 lukas staff 217565 18 Apr 13:36 1776508570741_m1.jpg\n-rw-r--r-- 1 lukas staff 107323 18 Apr 13:36 1776508580887_m2.jpg\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ curl -s http://localhost:3030/health | jq '{audio_status, last_audio: .last_audio_timestamp}'\n{\n \"audio_status\": \"ok\",\n \"last_audio\": \"2026-04-18T13:36:57+03:00\"\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ls ~/.screenpipe/data/\nSystem Audio (output)_2026-04-18_10-34-25.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-36-39.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-34-24.mp4\nSystem Audio (output)_2026-04-18_10-34-49.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-37-02.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-34-56.mp4\nSystem Audio (output)_2026-04-18_10-35-11.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-37-24.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-35-26.mp4\nSystem Audio (output)_2026-04-18_10-35-33.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-35-56.mp4\nSystem Audio (output)_2026-04-18_10-35-55.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpending-transcriptions\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-36-26.mp4\nSystem Audio (output)_2026-04-18_10-36-17.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.db\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-36-56.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ll\ntotal 13080\ndrwxr-xr-x 44 lukas staff 1408 18 Apr 13:37 .\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 ..\n-rw-r--r-- 1 lukas staff 215433 18 Apr 13:33 1776508419390_m1.jpg\n-rw-r--r-- 1 lukas staff 107206 18 Apr 13:33 1776508419555_m2.jpg\n-rw-r--r-- 1 lukas staff 155997 18 Apr 13:33 1776508422128_m1.jpg\n-rw-r--r-- 1 lukas staff 244304 18 Apr 13:33 1776508428450_m1.jpg\n-rw-r--r-- 1 lukas staff 107203 18 Apr 13:33 1776508428554_m2.jpg\n-rw-r--r-- 1 lukas staff 107202 18 Apr 13:33 1776508429142_m2.jpg\n-rw-r--r-- 1 lukas staff 208296 18 Apr 13:34 1776508453522_m1.jpg\n-rw-r--r-- 1 lukas staff 107122 18 Apr 13:34 1776508453670_m2.jpg\n-rw-r--r-- 1 lukas staff 130447 18 Apr 13:34 1776508456271_m1.jpg\n-rw-r--r-- 1 lukas staff 200633 18 Apr 13:34 1776508465399_m1.jpg\n-rw-r--r-- 1 lukas staff 201006 18 Apr 13:34 1776508479214_m1.jpg\n-rw-r--r-- 1 lukas staff 107315 18 Apr 13:34 1776508479222_m2.jpg\n-rw-r--r-- 1 lukas staff 217542 18 Apr 13:35 1776508510109_m1.jpg\n-rw-r--r-- 1 lukas staff 107558 18 Apr 13:35 1776508520117_m2.jpg\n-rw-r--r-- 1 lukas staff 217529 18 Apr 13:35 1776508540416_m1.jpg\n-rw-r--r-- 1 lukas staff 107438 18 Apr 13:35 1776508550498_m2.jpg\n-rw-r--r-- 1 lukas staff 217565 18 Apr 13:36 1776508570741_m1.jpg\n-rw-r--r-- 1 lukas staff 107323 18 Apr 13:36 1776508580887_m2.jpg\n-rw-r--r-- 1 lukas staff 223931 18 Apr 13:36 1776508601010_m1.jpg\n-rw-r--r-- 1 lukas staff 110527 18 Apr 13:36 1776508601828_m2.jpg\n-rw-r--r-- 1 lukas staff 220887 18 Apr 13:36 1776508601839_m1.jpg\n-rw-r--r-- 1 lukas staff 110573 18 Apr 13:36 1776508604812_m2.jpg\n-rw-r--r-- 1 lukas staff 219398 18 Apr 13:37 1776508632417_m1.jpg\n-rw-r--r-- 1 lukas staff 83219 18 Apr 13:37 1776508635039_m2.jpg\n-rw-r--r-- 1 lukas staff 219514 18 Apr 13:37 1776508638212_m1.jpg\n-rw-r--r-- 1 lukas staff 87339 18 Apr 13:37 1776508638212_m2.jpg\n-rw-r--r-- 1 lukas staff 221109 18 Apr 13:37 1776508639686_m1.jpg\n-rw-r--r-- 1 lukas staff 84740 18 Apr 13:37 1776508639725_m2.jpg\n-rw-r--r-- 1 lukas staff 224486 18 Apr 13:37 1776508640520_m1.jpg\n-rw-r--r-- 1 lukas staff 84838 18 Apr 13:37 1776508640592_m2.jpg\n-rw-r--r-- 1 lukas staff 84841 18 Apr 13:37 1776508647855_m2.jpg\n-rw-r--r-- 1 lukas staff 217131 18 Apr 13:37 1776508647864_m1.jpg\n-rw-r--r-- 1 lukas staff 223897 18 Apr 13:37 1776508651398_m1.jpg\n-rw-r--r-- 1 lukas staff 85463 18 Apr 13:37 1776508651398_m2.jpg\n-rw-r--r-- 1 lukas staff 219804 18 Apr 13:37 1776508653328_m1.jpg\n-rw-r--r-- 1 lukas staff 97034 18 Apr 13:37 1776508653420_m2.jpg\n-rw-r--r-- 1 lukas staff 82829 18 Apr 13:37 1776508659506_m2.jpg\n-rw-r--r-- 1 lukas staff 91337 18 Apr 13:37 1776508665504_m2.jpg\n-rw-r--r-- 1 lukas staff 219393 18 Apr 13:37 1776508665924_m1.jpg\n-rw-r--r-- 1 lukas staff 221275 18 Apr 13:37 1776508666761_m1.jpg\n-rw-r--r-- 1 lukas staff 88185 18 Apr 13:37 1776508666868_m2.jpg\n-rw-r--r-- 1 lukas staff 218919 18 Apr 13:37 1776508668460_m1.jpg\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll \ntotal 40\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 .\ndrwxr-xr-x 22 lukas staff 704 18 Apr 13:37 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 229 lukas staff 7328 18 Apr 13:35 2026-04-17\ndrwxr-xr-x 44 lukas staff 1408 18 Apr 13:37 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 1776\ndrwxr-xr-x 23 lukas staff 736 18 Apr 13:38 .\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:34 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:34 System Audio (output)_2026-04-18_10-34-25.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-02.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-37-46.mp4\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 data\ndrwxr-xr-x 2 lukas staff 64 18 Apr 13:36 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\n-rw-r--r-- 1 lukas staff 173278 18 Apr 13:34 soundcore AeroClip (input)_2026-04-18_10-34-24.mp4\n-rw-r--r-- 1 lukas staff 134890 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-34-56.mp4\n-rw-r--r-- 1 lukas staff 172333 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-35-26.mp4\n-rw-r--r-- 1 lukas staff 151441 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-35-56.mp4\n-rw-r--r-- 1 lukas staff 71265 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-36-26.mp4\n-rw-r--r-- 1 lukas staff 22227 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-36-56.mp4\n-rw-r--r-- 1 lukas staff 78730 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-37-26.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $","depth":4,"value":"-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 252 lukas staff 8064 17 Apr 21:06 2026-04-17\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-17\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ ll\ntotal 1373568\ndrwxr-xr-x 252 lukas staff 8064 17 Apr 21:06 .\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..\n-rw-r--r-- 1 lukas staff 199318 17 Apr 21:04 1776449072292_m1.jpg\n-rw-r--r-- 1 lukas staff 161727 17 Apr 21:04 1776449072392_m2.jpg\n-rw-r--r-- 1 lukas staff 275595 17 Apr 21:05 1776449102977_m1.jpg\n-rw-r--r-- 1 lukas staff 161843 17 Apr 21:05 1776449103126_m2.jpg\n-rw-r--r-- 1 lukas staff 161707 17 Apr 21:05 1776449115894_m2.jpg\n-rw-r--r-- 1 lukas staff 275808 17 Apr 21:05 1776449116000_m1.jpg\n-rw-r--r-- 1 lukas staff 127822 17 Apr 21:05 1776449117231_m1.jpg\n-rw-r--r-- 1 lukas staff 149529 17 Apr 21:05 1776449126408_m1.jpg\n-rw-r--r-- 1 lukas staff 267074 17 Apr 21:05 1776449129340_m1.jpg\n-rw-r--r-- 1 lukas staff 236620 17 Apr 21:05 1776449134291_m1.jpg\n-rw-r--r-- 1 lukas staff 163014 17 Apr 21:05 1776449134403_m2.jpg\n-rw-r--r-- 1 lukas staff 232479 17 Apr 21:05 1776449135411_m1.jpg\n-rw-r--r-- 1 lukas staff 162882 17 Apr 21:05 1776449140257_m2.jpg\n-rw-r--r-- 1 lukas staff 262782 17 Apr 21:05 1776449140392_m1.jpg\n-rw-r--r-- 1 lukas staff 274674 17 Apr 21:05 1776449141484_m1.jpg\n-rw-r--r-- 1 lukas staff 267740 17 Apr 21:05 1776449149487_m1.jpg\n-rw-r--r-- 1 lukas staff 161911 17 Apr 21:05 1776449149493_m2.jpg\n-rw-r--r-- 1 lukas staff 267807 17 Apr 21:05 1776449150939_m1.jpg\n-rw-r--r-- 1 lukas staff 165566 17 Apr 21:05 1776449152599_m2.jpg\n-rw-r--r-- 1 lukas staff 272433 17 Apr 21:05 1776449152602_m1.jpg\n-rw-r--r-- 1 lukas staff 269228 17 Apr 21:06 1776449168292_m1.jpg\n-rw-r--r-- 1 lukas staff 162930 17 Apr 21:06 1776449168393_m2.jpg\n-rw-r--r-- 1 lukas staff 267027 17 Apr 21:06 1776449175046_m1.jpg\n-rw-r--r-- 1 lukas staff 162922 17 Apr 21:06 1776449178917_m2.jpg\n-rw-r--r-- 1 lukas staff 271791 17 Apr 21:06 1776449181107_m1.jpg\n-rw-r--r-- 1 lukas staff 1010791 17 Apr 09:07 compact_monitor_1_1776406033543.mp4\n-rw-r--r-- 1 lukas staff 1641627 17 Apr 09:12 compact_monitor_1_1776406339160.mp4\n-rw-r--r-- 1 lukas staff 282103 17 Apr 09:17 compact_monitor_1_1776406650753.mp4\n-rw-r--r-- 1 lukas staff 533856 17 Apr 09:22 compact_monitor_1_1776406961354.mp4\n-rw-r--r-- 1 lukas staff 372860 17 Apr 09:27 compact_monitor_1_1776407272449.mp4\n-rw-r--r-- 1 lukas staff 269617 17 Apr 09:33 compact_monitor_1_1776407585831.mp4\n-rw-r--r-- 1 lukas staff 289824 17 Apr 09:38 compact_monitor_1_1776407896440.mp4\n-rw-r--r-- 1 lukas staff 244134 17 Apr 09:43 compact_monitor_1_1776408206183.mp4\n-rw-r--r-- 1 lukas staff 239140 17 Apr 09:48 compact_monitor_1_1776408516395.mp4\n-rw-r--r-- 1 lukas staff 361011 17 Apr 09:53 compact_monitor_1_1776408824270.mp4\n-rw-r--r-- 1 lukas staff 3365373 17 Apr 09:59 compact_monitor_1_1776409136717.mp4\n-rw-r--r-- 1 lukas staff 2601020 17 Apr 10:04 compact_monitor_1_1776409450395.mp4\n-rw-r--r-- 1 lukas staff 3497066 17 Apr 10:09 compact_monitor_1_1776409759172.mp4\n-rw-r--r-- 1 lukas staff 1507571 17 Apr 10:14 compact_monitor_1_1776410067944.mp4\n-rw-r--r-- 1 lukas staff 943396 17 Apr 10:19 compact_monitor_1_1776410372484.mp4\n-rw-r--r-- 1 lukas staff 1225040 17 Apr 10:24 compact_monitor_1_1776410674629.mp4\n-rw-r--r-- 1 lukas staff 2224229 17 Apr 10:29 compact_monitor_1_1776410981487.mp4\n-rw-r--r-- 1 lukas staff 398291 17 Apr 10:34 compact_monitor_1_1776411298373.mp4\n-rw-r--r-- 1 lukas staff 4376235 17 Apr 10:40 compact_monitor_1_1776411601686.mp4\n-rw-r--r-- 1 lukas staff 5007720 17 Apr 10:45 compact_monitor_1_1776411923026.mp4\n-rw-r--r-- 1 lukas staff 2281319 17 Apr 10:50 compact_monitor_1_1776412242015.mp4\n-rw-r--r-- 1 lukas staff 3182872 17 Apr 10:56 compact_monitor_1_1776412560658.mp4\n-rw-r--r-- 1 lukas staff 3896056 17 Apr 11:01 compact_monitor_1_1776412881181.mp4\n-rw-r--r-- 1 lukas staff 6279582 17 Apr 11:06 compact_monitor_1_1776413192507.mp4\n-rw-r--r-- 1 lukas staff 6492126 17 Apr 11:12 compact_monitor_1_1776413508291.mp4\n-rw-r--r-- 1 lukas staff 6045038 17 Apr 11:17 compact_monitor_1_1776413848971.mp4\n-rw-r--r-- 1 lukas staff 4968033 17 Apr 11:23 compact_monitor_1_1776414180658.mp4\n-rw-r--r-- 1 lukas staff 7109088 17 Apr 11:28 compact_monitor_1_1776414513921.mp4\n-rw-r--r-- 1 lukas staff 9099339 17 Apr 11:34 compact_monitor_1_1776414839842.mp4\n-rw-r--r-- 1 lukas staff 926165 17 Apr 11:34 compact_monitor_1_1776414858793.mp4\n-rw-r--r-- 1 lukas staff 9246778 17 Apr 11:39 compact_monitor_1_1776415182593.mp4\n-rw-r--r-- 1 lukas staff 8361876 17 Apr 11:45 compact_monitor_1_1776415505403.mp4\n-rw-r--r-- 1 lukas staff 7215549 17 Apr 11:50 compact_monitor_1_1776415841776.mp4\n-rw-r--r-- 1 lukas staff 6234445 17 Apr 11:56 compact_monitor_1_1776416174658.mp4\n-rw-r--r-- 1 lukas staff 11694078 17 Apr 12:01 compact_monitor_1_1776416497484.mp4\n-rw-r--r-- 1 lukas staff 7033085 17 Apr 12:07 compact_monitor_1_1776416834587.mp4\n-rw-r--r-- 1 lukas staff 4309161 17 Apr 12:12 compact_monitor_1_1776417157754.mp4\n-rw-r--r-- 1 lukas staff 3782878 17 Apr 12:18 compact_monitor_1_1776417481425.mp4\n-rw-r--r-- 1 lukas staff 5597264 17 Apr 12:23 compact_monitor_1_1776417802134.mp4\n-rw-r--r-- 1 lukas staff 5667747 17 Apr 12:28 compact_monitor_1_1776418119908.mp4\n-rw-r--r-- 1 lukas staff 8840842 17 Apr 12:34 compact_monitor_1_1776418443506.mp4\n-rw-r--r-- 1 lukas staff 5442395 17 Apr 12:39 compact_monitor_1_1776418761701.mp4\n-rw-r--r-- 1 lukas staff 4054014 17 Apr 12:44 compact_monitor_1_1776419074083.mp4\n-rw-r--r-- 1 lukas staff 3734539 17 Apr 12:49 compact_monitor_1_1776419388949.mp4\n-rw-r--r-- 1 lukas staff 3137915 17 Apr 12:55 compact_monitor_1_1776419701686.mp4\n-rw-r--r-- 1 lukas staff 3064654 17 Apr 13:00 compact_monitor_1_1776420015547.mp4\n-rw-r--r-- 1 lukas staff 1189833 17 Apr 13:05 compact_monitor_1_1776420321592.mp4\n-rw-r--r-- 1 lukas staff 1862832 17 Apr 13:10 compact_monitor_1_1776420633887.mp4\n-rw-r--r-- 1 lukas staff 520517 17 Apr 13:15 compact_monitor_1_1776420947144.mp4\n-rw-r--r-- 1 lukas staff 790509 17 Apr 13:20 compact_monitor_1_1776421253865.mp4\n-rw-r--r-- 1 lukas staff 1155599 17 Apr 13:26 compact_monitor_1_1776421566995.mp4\n-rw-r--r-- 1 lukas staff 626836 17 Apr 13:31 compact_monitor_1_1776421884013.mp4\n-rw-r--r-- 1 lukas staff 2709758 17 Apr 13:36 compact_monitor_1_1776422194788.mp4\n-rw-r--r-- 1 lukas staff 894214 17 Apr 13:41 compact_monitor_1_1776422513565.mp4\n-rw-r--r-- 1 lukas staff 1298826 17 Apr 13:47 compact_monitor_1_1776422829105.mp4\n-rw-r--r-- 1 lukas staff 3454896 17 Apr 13:52 compact_monitor_1_1776423143916.mp4\n-rw-r--r-- 1 lukas staff 1369217 17 Apr 13:57 compact_monitor_1_1776423466196.mp4\n-rw-r--r-- 1 lukas staff 1677163 17 Apr 14:03 compact_monitor_1_1776423783420.mp4\n-rw-r--r-- 1 lukas staff 556702 17 Apr 14:08 compact_monitor_1_1776424109344.mp4\n-rw-r--r-- 1 lukas staff 1001886 17 Apr 14:13 compact_monitor_1_1776424416957.mp4\n-rw-r--r-- 1 lukas staff 1485547 17 Apr 14:18 compact_monitor_1_1776424730536.mp4\n-rw-r--r-- 1 lukas staff 935536 17 Apr 14:24 compact_monitor_1_1776425050631.mp4\n-rw-r--r-- 1 lukas staff 1119642 17 Apr 14:29 compact_monitor_1_1776425372446.mp4\n-rw-r--r-- 1 lukas staff 430883 17 Apr 14:34 compact_monitor_1_1776425690857.mp4\n-rw-r--r-- 1 lukas staff 427035 17 Apr 14:40 compact_monitor_1_1776426003278.mp4\n-rw-r--r-- 1 lukas staff 654605 17 Apr 14:45 compact_monitor_1_1776426312497.mp4\n-rw-r--r-- 1 lukas staff 440539 17 Apr 14:50 compact_monitor_1_1776426625506.mp4\n-rw-r--r-- 1 lukas staff 439802 17 Apr 14:55 compact_monitor_1_1776426939895.mp4\n-rw-r--r-- 1 lukas staff 557755 17 Apr 15:01 compact_monitor_1_1776427261945.mp4\n-rw-r--r-- 1 lukas staff 1071442 17 Apr 15:06 compact_monitor_1_1776427571985.mp4\n-rw-r--r-- 1 lukas staff 2606361 17 Apr 15:11 compact_monitor_1_1776427882803.mp4\n-rw-r--r-- 1 lukas staff 951201 17 Apr 15:16 compact_monitor_1_1776428192090.mp4\n-rw-r--r-- 1 lukas staff 322306 17 Apr 15:21 compact_monitor_1_1776428505150.mp4\n-rw-r--r-- 1 lukas staff 331163 17 Apr 15:26 compact_monitor_1_1776428811953.mp4\n-rw-r--r-- 1 lukas staff 737469 17 Apr 15:32 compact_monitor_1_1776429127526.mp4\n-rw-r--r-- 1 lukas staff 352621 17 Apr 15:37 compact_monitor_1_1776429442374.mp4\n-rw-r--r-- 1 lukas staff 444203 17 Apr 15:42 compact_monitor_1_1776429752217.mp4\n-rw-r--r-- 1 lukas staff 1407505 17 Apr 15:47 compact_monitor_1_1776430066920.mp4\n-rw-r--r-- 1 lukas staff 360974 17 Apr 15:53 compact_monitor_1_1776430376918.mp4\n-rw-r--r-- 1 lukas staff 321565 17 Apr 15:58 compact_monitor_1_1776430691588.mp4\n-rw-r--r-- 1 lukas staff 317048 17 Apr 16:03 compact_monitor_1_1776431003504.mp4\n-rw-r--r-- 1 lukas staff 321894 17 Apr 16:08 compact_monitor_1_1776431317637.mp4\n-rw-r--r-- 1 lukas staff 333513 17 Apr 16:13 compact_monitor_1_1776431629041.mp4\n-rw-r--r-- 1 lukas staff 326264 17 Apr 16:19 compact_monitor_1_1776431942238.mp4\n-rw-r--r-- 1 lukas staff 366336 17 Apr 16:24 compact_monitor_1_1776432254490.mp4\n-rw-r--r-- 1 lukas staff 327825 17 Apr 16:29 compact_monitor_1_1776432574989.mp4\n-rw-r--r-- 1 lukas staff 1048363 17 Apr 16:34 compact_monitor_1_1776432882794.mp4\n-rw-r--r-- 1 lukas staff 1668969 17 Apr 16:39 compact_monitor_1_1776433188842.mp4\n-rw-r--r-- 1 lukas staff 1283899 17 Apr 16:44 compact_monitor_1_1776433493858.mp4\n-rw-r--r-- 1 lukas staff 314118 17 Apr 16:50 compact_monitor_1_1776433800642.mp4\n-rw-r--r-- 1 lukas staff 547478 17 Apr 16:55 compact_monitor_1_1776434111371.mp4\n-rw-r--r-- 1 lukas staff 868654 17 Apr 17:00 compact_monitor_1_1776434420728.mp4\n-rw-r--r-- 1 lukas staff 885215 17 Apr 17:05 compact_monitor_1_1776434723901.mp4\n-rw-r--r-- 1 lukas staff 508905 17 Apr 17:10 compact_monitor_1_1776435038035.mp4\n-rw-r--r-- 1 lukas staff 591766 17 Apr 17:16 compact_monitor_1_1776435363044.mp4\n-rw-r--r-- 1 lukas staff 2031034 17 Apr 17:21 compact_monitor_1_1776435683729.mp4\n-rw-r--r-- 1 lukas staff 2136043 17 Apr 17:26 compact_monitor_1_1776436005076.mp4\n-rw-r--r-- 1 lukas staff 578716 17 Apr 17:32 compact_monitor_1_1776436319163.mp4\n-rw-r--r-- 1 lukas staff 1308705 17 Apr 17:37 compact_monitor_1_1776436630439.mp4\n-rw-r--r-- 1 lukas staff 958771 17 Apr 17:42 compact_monitor_1_1776436939049.mp4\n-rw-r--r-- 1 lukas staff 797771 17 Apr 17:47 compact_monitor_1_1776437247467.mp4\n-rw-r--r-- 1 lukas staff 1230186 17 Apr 17:52 compact_monitor_1_1776437554897.mp4\n-rw-r--r-- 1 lukas staff 862632 17 Apr 17:57 compact_monitor_1_1776437862465.mp4\n-rw-r--r-- 1 lukas staff 757441 17 Apr 18:02 compact_monitor_1_1776438171931.mp4\n-rw-r--r-- 1 lukas staff 686680 17 Apr 18:08 compact_monitor_1_1776438479816.mp4\n-rw-r--r-- 1 lukas staff 1078524 17 Apr 18:13 compact_monitor_1_1776438783339.mp4\n-rw-r--r-- 1 lukas staff 496616 17 Apr 18:18 compact_monitor_1_1776439090720.mp4\n-rw-r--r-- 1 lukas staff 774571 17 Apr 18:23 compact_monitor_1_1776439396975.mp4\n-rw-r--r-- 1 lukas staff 1160291 17 Apr 18:28 compact_monitor_1_1776439703924.mp4\n-rw-r--r-- 1 lukas staff 632541 17 Apr 18:34 compact_monitor_1_1776440053428.mp4\n-rw-r--r-- 1 lukas staff 3291212 17 Apr 21:05 compact_monitor_1_1776449135667.mp4\n-rw-r--r-- 1 lukas staff 768306 17 Apr 09:07 compact_monitor_2_1776406035126.mp4\n-rw-r--r-- 1 lukas staff 9277508 17 Apr 09:12 compact_monitor_2_1776406343152.mp4\n-rw-r--r-- 1 lukas staff 627114 17 Apr 09:12 compact_monitor_2_1776406349962.mp4\n-rw-r--r-- 1 lukas staff 11129246 17 Apr 09:17 compact_monitor_2_1776406653780.mp4\n-rw-r--r-- 1 lukas staff 8352174 17 Apr 09:22 compact_monitor_2_1776406964880.mp4\n-rw-r--r-- 1 lukas staff 8551960 17 Apr 09:28 compact_monitor_2_1776407277493.mp4\n-rw-r--r-- 1 lukas staff 679244 17 Apr 09:28 compact_monitor_2_1776407283693.mp4\n-rw-r--r-- 1 lukas staff 12641011 17 Apr 09:33 compact_monitor_2_1776407588804.mp4\n-rw-r--r-- 1 lukas staff 9384615 17 Apr 09:38 compact_monitor_2_1776407900099.mp4\n-rw-r--r-- 1 lukas staff 4024767 17 Apr 09:43 compact_monitor_2_1776408207652.mp4\n-rw-r--r-- 1 lukas staff 2627851 17 Apr 09:48 compact_monitor_2_1776408517311.mp4\n-rw-r--r-- 1 lukas staff 4877190 17 Apr 09:53 compact_monitor_2_1776408826734.mp4\n-rw-r--r-- 1 lukas staff 3807909 17 Apr 09:59 compact_monitor_2_1776409142638.mp4\n-rw-r--r-- 1 lukas staff 4217716 17 Apr 10:04 compact_monitor_2_1776409454184.mp4\n-rw-r--r-- 1 lukas staff 1717578 17 Apr 10:09 compact_monitor_2_1776409763153.mp4\n-rw-r--r-- 1 lukas staff 1067064 17 Apr 10:14 compact_monitor_2_1776410070480.mp4\n-rw-r--r-- 1 lukas staff 442425 17 Apr 10:19 compact_monitor_2_1776410373664.mp4\n-rw-r--r-- 1 lukas staff 444497 17 Apr 10:24 compact_monitor_2_1776410676126.mp4\n-rw-r--r-- 1 lukas staff 3670025 17 Apr 10:29 compact_monitor_2_1776410986705.mp4\n-rw-r--r-- 1 lukas staff 448939 17 Apr 10:35 compact_monitor_2_1776411299875.mp4\n-rw-r--r-- 1 lukas staff 4490377 17 Apr 10:40 compact_monitor_2_1776411611306.mp4\n-rw-r--r-- 1 lukas staff 7437798 17 Apr 10:45 compact_monitor_2_1776411929615.mp4\n-rw-r--r-- 1 lukas staff 6915447 17 Apr 10:50 compact_monitor_2_1776412245368.mp4\n-rw-r--r-- 1 lukas staff 7988703 17 Apr 10:56 compact_monitor_2_1776412568330.mp4\n-rw-r--r-- 1 lukas staff 5512416 17 Apr 11:01 compact_monitor_2_1776412886253.mp4\n-rw-r--r-- 1 lukas staff 3107875 17 Apr 11:06 compact_monitor_2_1776413199096.mp4\n-rw-r--r-- 1 lukas staff 4158550 17 Apr 11:12 compact_monitor_2_1776413529707.mp4\n-rw-r--r-- 1 lukas staff 4756064 17 Apr 11:17 compact_monitor_2_1776413863997.mp4\n-rw-r--r-- 1 lukas staff 5281060 17 Apr 11:23 compact_monitor_2_1776414194026.mp4\n-rw-r--r-- 1 lukas staff 2605046 17 Apr 11:28 compact_monitor_2_1776414528521.mp4\n-rw-r--r-- 1 lukas staff 5473302 17 Apr 11:34 compact_monitor_2_1776414861255.mp4\n-rw-r--r-- 1 lukas staff 2791759 17 Apr 11:40 compact_monitor_2_1776415194836.mp4\n-rw-r--r-- 1 lukas staff 5494699 17 Apr 11:45 compact_monitor_2_1776415523929.mp4\n-rw-r--r-- 1 lukas staff 4025150 17 Apr 11:51 compact_monitor_2_1776415859261.mp4\n-rw-r--r-- 1 lukas staff 2583684 17 Apr 11:56 compact_monitor_2_1776416187267.mp4\n-rw-r--r-- 1 lukas staff 5240195 17 Apr 12:02 compact_monitor_2_1776416514967.mp4\n-rw-r--r-- 1 lukas staff 3629687 17 Apr 12:07 compact_monitor_2_1776416846005.mp4\n-rw-r--r-- 1 lukas staff 5021721 17 Apr 12:12 compact_monitor_2_1776417172355.mp4\n-rw-r--r-- 1 lukas staff 2986447 17 Apr 12:18 compact_monitor_2_1776417492277.mp4\n-rw-r--r-- 1 lukas staff 3976942 17 Apr 12:23 compact_monitor_2_1776417810578.mp4\n-rw-r--r-- 1 lukas staff 4294715 17 Apr 12:29 compact_monitor_2_1776418132304.mp4\n-rw-r--r-- 1 lukas staff 4698998 17 Apr 12:34 compact_monitor_2_1776418452374.mp4\n-rw-r--r-- 1 lukas staff 3160886 17 Apr 12:39 compact_monitor_2_1776418768555.mp4\n-rw-r--r-- 1 lukas staff 1776908 17 Apr 12:44 compact_monitor_2_1776419082274.mp4\n-rw-r--r-- 1 lukas staff 1500725 17 Apr 12:49 compact_monitor_2_1776419394506.mp4\n-rw-r--r-- 1 lukas staff 1279602 17 Apr 12:55 compact_monitor_2_1776419709571.mp4\n-rw-r--r-- 1 lukas staff 2017894 17 Apr 13:00 compact_monitor_2_1776420018859.mp4\n-rw-r--r-- 1 lukas staff 5639690 17 Apr 13:05 compact_monitor_2_1776420324337.mp4\n-rw-r--r-- 1 lukas staff 4587635 17 Apr 13:10 compact_monitor_2_1776420636421.mp4\n-rw-r--r-- 1 lukas staff 2001162 17 Apr 13:15 compact_monitor_2_1776420949555.mp4\n-rw-r--r-- 1 lukas staff 3658362 17 Apr 13:21 compact_monitor_2_1776421256306.mp4\n-rw-r--r-- 1 lukas staff 7755716 17 Apr 13:26 compact_monitor_2_1776421570292.mp4\n-rw-r--r-- 1 lukas staff 3362766 17 Apr 13:31 compact_monitor_2_1776421886698.mp4\n-rw-r--r-- 1 lukas staff 6893513 17 Apr 13:36 compact_monitor_2_1776422197625.mp4\n-rw-r--r-- 1 lukas staff 4788146 17 Apr 13:42 compact_monitor_2_1776422516390.mp4\n-rw-r--r-- 1 lukas staff 4840848 17 Apr 13:47 compact_monitor_2_1776422832136.mp4\n-rw-r--r-- 1 lukas staff 9094075 17 Apr 13:52 compact_monitor_2_1776423148671.mp4\n-rw-r--r-- 1 lukas staff 10072846 17 Apr 13:57 compact_monitor_2_1776423469970.mp4\n-rw-r--r-- 1 lukas staff 13504297 17 Apr 14:03 compact_monitor_2_1776423787536.mp4\n-rw-r--r-- 1 lukas staff 1622612 17 Apr 14:08 compact_monitor_2_1776424110832.mp4\n-rw-r--r-- 1 lukas staff 5427700 17 Apr 14:13 compact_monitor_2_1776424419206.mp4\n-rw-r--r-- 1 lukas staff 1746789 17 Apr 14:19 compact_monitor_2_1776424736034.mp4\n-rw-r--r-- 1 lukas staff 4232204 17 Apr 14:24 compact_monitor_2_1776425054084.mp4\n-rw-r--r-- 1 lukas staff 4457408 17 Apr 14:29 compact_monitor_2_1776425375574.mp4\n-rw-r--r-- 1 lukas staff 174979 17 Apr 14:34 compact_monitor_2_1776425692307.mp4\n-rw-r--r-- 1 lukas staff 169969 17 Apr 14:40 compact_monitor_2_1776426005170.mp4\n-rw-r--r-- 1 lukas staff 2723106 17 Apr 14:45 compact_monitor_2_1776426315173.mp4\n-rw-r--r-- 1 lukas staff 3313658 17 Apr 14:50 compact_monitor_2_1776426627449.mp4\n-rw-r--r-- 1 lukas staff 4720437 17 Apr 14:55 compact_monitor_2_1776426943213.mp4\n-rw-r--r-- 1 lukas staff 3589313 17 Apr 15:01 compact_monitor_2_1776427263991.mp4\n-rw-r--r-- 1 lukas staff 6295236 17 Apr 15:06 compact_monitor_2_1776427573875.mp4\n-rw-r--r-- 1 lukas staff 3390902 17 Apr 15:11 compact_monitor_2_1776427885283.mp4\n-rw-r--r-- 1 lukas staff 1637607 17 Apr 15:16 compact_monitor_2_1776428194704.mp4\n-rw-r--r-- 1 lukas staff 1355327 17 Apr 15:21 compact_monitor_2_1776428506246.mp4\n-rw-r--r-- 1 lukas staff 4897048 17 Apr 15:27 compact_monitor_2_1776428815157.mp4\n-rw-r--r-- 1 lukas staff 4930900 17 Apr 15:32 compact_monitor_2_1776429130905.mp4\n-rw-r--r-- 1 lukas staff 2581578 17 Apr 15:37 compact_monitor_2_1776429444142.mp4\n-rw-r--r-- 1 lukas staff 4764105 17 Apr 15:42 compact_monitor_2_1776429755437.mp4\n-rw-r--r-- 1 lukas staff 4039902 17 Apr 15:47 compact_monitor_2_1776430069174.mp4\n-rw-r--r-- 1 lukas staff 4735734 17 Apr 15:53 compact_monitor_2_1776430380212.mp4\n-rw-r--r-- 1 lukas staff 2195410 17 Apr 15:58 compact_monitor_2_1776430693483.mp4\n-rw-r--r-- 1 lukas staff 1857322 17 Apr 16:03 compact_monitor_2_1776431005386.mp4\n-rw-r--r-- 1 lukas staff 3412100 17 Apr 16:08 compact_monitor_2_1776431319373.mp4\n-rw-r--r-- 1 lukas staff 6928537 17 Apr 16:13 compact_monitor_2_1776431631778.mp4\n-rw-r--r-- 1 lukas staff 4990793 17 Apr 16:19 compact_monitor_2_1776431944571.mp4\n-rw-r--r-- 1 lukas staff 8242278 17 Apr 16:24 compact_monitor_2_1776432258818.mp4\n-rw-r--r-- 1 lukas staff 451999 17 Apr 16:24 compact_monitor_2_1776432269036.mp4\n-rw-r--r-- 1 lukas staff 2978452 17 Apr 16:29 compact_monitor_2_1776432577467.mp4\n-rw-r--r-- 1 lukas staff 1248291 17 Apr 16:34 compact_monitor_2_1776432884349.mp4\n-rw-r--r-- 1 lukas staff 2963525 17 Apr 16:39 compact_monitor_2_1776433190284.mp4\n-rw-r--r-- 1 lukas staff 1958858 17 Apr 16:44 compact_monitor_2_1776433495477.mp4\n-rw-r--r-- 1 lukas staff 1656966 17 Apr 16:50 compact_monitor_2_1776433802347.mp4\n-rw-r--r-- 1 lukas staff 2813856 17 Apr 16:55 compact_monitor_2_1776434112909.mp4\n-rw-r--r-- 1 lukas staff 510112 17 Apr 17:00 compact_monitor_2_1776434422384.mp4\n-rw-r--r-- 1 lukas staff 4354386 17 Apr 17:05 compact_monitor_2_1776434725886.mp4\n-rw-r--r-- 1 lukas staff 9798615 17 Apr 17:10 compact_monitor_2_1776435041115.mp4\n-rw-r--r-- 1 lukas staff 4503179 17 Apr 17:16 compact_monitor_2_1776435368020.mp4\n-rw-r--r-- 1 lukas staff 857002 17 Apr 17:16 compact_monitor_2_1776435376040.mp4\n-rw-r--r-- 1 lukas staff 8587996 17 Apr 17:21 compact_monitor_2_1776435687051.mp4\n-rw-r--r-- 1 lukas staff 5052247 17 Apr 17:26 compact_monitor_2_1776436009787.mp4\n-rw-r--r-- 1 lukas staff 2947924 17 Apr 17:32 compact_monitor_2_1776436320877.mp4\n-rw-r--r-- 1 lukas staff 689465 17 Apr 17:37 compact_monitor_2_1776436632536.mp4\n-rw-r--r-- 1 lukas staff 1353469 17 Apr 17:42 compact_monitor_2_1776436940788.mp4\n-rw-r--r-- 1 lukas staff 870893 17 Apr 17:47 compact_monitor_2_1776437249077.mp4\n-rw-r--r-- 1 lukas staff 2653839 17 Apr 17:52 compact_monitor_2_1776437556659.mp4\n-rw-r--r-- 1 lukas staff 4310138 17 Apr 17:57 compact_monitor_2_1776437864727.mp4\n-rw-r--r-- 1 lukas staff 3683875 17 Apr 18:02 compact_monitor_2_1776438173313.mp4\n-rw-r--r-- 1 lukas staff 1916129 17 Apr 18:08 compact_monitor_2_1776438481043.mp4\n-rw-r--r-- 1 lukas staff 2349626 17 Apr 18:13 compact_monitor_2_1776438785553.mp4\n-rw-r--r-- 1 lukas staff 641202 17 Apr 18:18 compact_monitor_2_1776439092011.mp4\n-rw-r--r-- 1 lukas staff 3006319 17 Apr 18:23 compact_monitor_2_1776439398485.mp4\n-rw-r--r-- 1 lukas staff 1675776 17 Apr 18:28 compact_monitor_2_1776439705765.mp4\n-rw-r--r-- 1 lukas staff 4465225 17 Apr 18:34 compact_monitor_2_1776440055922.mp4\n-rw-r--r-- 1 lukas staff 2351472 17 Apr 21:05 compact_monitor_2_1776449140917.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ rsync -av --ignore-existing \\\n ~/.screenpipe/data/data/2026-04-14/ \\\n /Volumes/Test/screenpipe/data/2026-04-14/\nbuilding file list ... done\n./\ncompact_monitor_1_1776236348162.mp4\ncompact_monitor_1_1776236355103.mp4\ncompact_monitor_2_1776236357169.mp4\ncompact_monitor_2_1776236373794.mp4\n\nsent 41217485 bytes received 114 bytes 4338694.63 bytes/sec\ntotal size is 1085072596 speedup is 26.33\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-14\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ll\ntotal 2120256\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 .\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..\n-rw-r--r--@ 1 lukas staff 581687 14 Apr 09:34 compact_monitor_1_1776148466581.mp4\n-rw-r--r--@ 1 lukas staff 702153 14 Apr 09:39 compact_monitor_1_1776148768082.mp4\n-rw-r--r--@ 1 lukas staff 251978 14 Apr 09:44 compact_monitor_1_1776149071467.mp4\n-rw-r--r-- 1 lukas staff 1717429 14 Apr 09:49 compact_monitor_1_1776149373136.mp4\n-rw-r--r-- 1 lukas staff 3477530 14 Apr 09:54 compact_monitor_1_1776149679747.mp4\n-rw-r--r-- 1 lukas staff 4579266 14 Apr 09:59 compact_monitor_1_1776149991618.mp4\n-rw-r--r-- 1 lukas staff 2305892 14 Apr 10:05 compact_monitor_1_1776150305479.mp4\n-rw-r--r-- 1 lukas staff 2464098 14 Apr 10:10 compact_monitor_1_1776150611148.mp4\n-rw-r--r-- 1 lukas staff 2640699 14 Apr 10:15 compact_monitor_1_1776150917977.mp4\n-rw-r--r-- 1 lukas staff 2938324 14 Apr 10:20 compact_monitor_1_1776151225175.mp4\n-rw-r--r-- 1 lukas staff 5734426 14 Apr 10:25 compact_monitor_1_1776151533655.mp4\n-rw-r--r-- 1 lukas staff 711441 14 Apr 10:30 compact_monitor_1_1776151841776.mp4\n-rw-r--r-- 1 lukas staff 373214 14 Apr 10:35 compact_monitor_1_1776152149591.mp4\n-rw-r--r-- 1 lukas staff 259200 14 Apr 10:40 compact_monitor_1_1776152456802.mp4\n-rw-r--r-- 1 lukas staff 563549 14 Apr 10:46 compact_monitor_1_1776152770846.mp4\n-rw-r--r-- 1 lukas staff 1085034 14 Apr 10:51 compact_monitor_1_1776153081304.mp4\n-rw-r--r-- 1 lukas staff 5856145 14 Apr 10:56 compact_monitor_1_1776153389824.mp4\n-rw-r--r-- 1 lukas staff 3729206 14 Apr 11:01 compact_monitor_1_1776153702196.mp4\n-rw-r--r-- 1 lukas staff 1381857 14 Apr 11:06 compact_monitor_1_1776154011626.mp4\n-rw-r--r-- 1 lukas staff 590718 14 Apr 11:12 compact_monitor_1_1776154319547.mp4\n-rw-r--r-- 1 lukas staff 1306438 14 Apr 11:17 compact_monitor_1_1776154623893.mp4\n-rw-r--r-- 1 lukas staff 216930 14 Apr 11:22 compact_monitor_1_1776154930014.mp4\n-rw-r--r-- 1 lukas staff 473698 14 Apr 11:27 compact_monitor_1_1776155238144.mp4\n-rw-r--r-- 1 lukas staff 3051314 14 Apr 11:32 compact_monitor_1_1776155547239.mp4\n-rw-r--r-- 1 lukas staff 253380 14 Apr 11:37 compact_monitor_1_1776155850943.mp4\n-rw-r--r-- 1 lukas staff 258154 14 Apr 11:42 compact_monitor_1_1776156154229.mp4\n-rw-r--r-- 1 lukas staff 962893 14 Apr 11:47 compact_monitor_1_1776156458244.mp4\n-rw-r--r-- 1 lukas staff 1806149 14 Apr 11:52 compact_monitor_1_1776156762972.mp4\n-rw-r--r-- 1 lukas staff 2280711 14 Apr 11:57 compact_monitor_1_1776157067935.mp4\n-rw-r--r-- 1 lukas staff 1779777 14 Apr 12:03 compact_monitor_1_1776157380235.mp4\n-rw-r--r-- 1 lukas staff 792745 14 Apr 12:08 compact_monitor_1_1776157700511.mp4\n-rw-r--r-- 1 lukas staff 290618 14 Apr 12:13 compact_monitor_1_1776158016840.mp4\n-rw-r--r-- 1 lukas staff 572761 14 Apr 12:18 compact_monitor_1_1776158333836.mp4\n-rw-r--r-- 1 lukas staff 200419 14 Apr 12:24 compact_monitor_1_1776158651565.mp4\n-rw-r--r-- 1 lukas staff 190795 14 Apr 12:29 compact_monitor_1_1776158966333.mp4\n-rw-r--r-- 1 lukas staff 2126277 14 Apr 12:34 compact_monitor_1_1776159274939.mp4\n-rw-r--r-- 1 lukas staff 3747860 14 Apr 12:39 compact_monitor_1_1776159588710.mp4\n-rw-r--r-- 1 lukas staff 2152422 14 Apr 12:45 compact_monitor_1_1776159900733.mp4\n-rw-r--r-- 1 lukas staff 709258 14 Apr 12:50 compact_monitor_1_1776160204634.mp4\n-rw-r--r-- 1 lukas staff 1158847 14 Apr 12:55 compact_monitor_1_1776160508015.mp4\n-rw-r--r-- 1 lukas staff 1813578 14 Apr 13:00 compact_monitor_1_1776160811806.mp4\n-rw-r--r-- 1 lukas staff 684607 14 Apr 13:05 compact_monitor_1_1776161119981.mp4\n-rw-r--r-- 1 lukas staff 636562 14 Apr 13:10 compact_monitor_1_1776161424648.mp4\n-rw-r--r-- 1 lukas staff 323432 14 Apr 13:15 compact_monitor_1_1776161728448.mp4\n-rw-r--r-- 1 lukas staff 294055 14 Apr 13:20 compact_monitor_1_1776162032394.mp4\n-rw-r--r-- 1 lukas staff 296941 14 Apr 13:25 compact_monitor_1_1776162336175.mp4\n-rw-r--r-- 1 lukas staff 292219 14 Apr 13:30 compact_monitor_1_1776162640619.mp4\n-rw-r--r-- 1 lukas staff 293726 14 Apr 13:35 compact_monitor_1_1776162943050.mp4\n-rw-r--r-- 1 lukas staff 832989 14 Apr 13:40 compact_monitor_1_1776163246420.mp4\n-rw-r--r-- 1 lukas staff 1068134 14 Apr 13:45 compact_monitor_1_1776163549145.mp4\n-rw-r--r-- 1 lukas staff 501189 14 Apr 13:50 compact_monitor_1_1776163853383.mp4\n-rw-r--r-- 1 lukas staff 930299 14 Apr 13:55 compact_monitor_1_1776164155311.mp4\n-rw-r--r-- 1 lukas staff 2515358 14 Apr 14:01 compact_monitor_1_1776164459131.mp4\n-rw-r--r-- 1 lukas staff 1286863 14 Apr 14:06 compact_monitor_1_1776164766940.mp4\n-rw-r--r-- 1 lukas staff 1472795 14 Apr 14:15 compact_monitor_1_1776165318512.mp4\n-rw-r--r-- 1 lukas staff 439699 14 Apr 14:20 compact_monitor_1_1776165627501.mp4\n-rw-r--r-- 1 lukas staff 519424 14 Apr 14:25 compact_monitor_1_1776165931952.mp4\n-rw-r--r-- 1 lukas staff 2267443 14 Apr 14:30 compact_monitor_1_1776166235408.mp4\n-rw-r--r-- 1 lukas staff 1637916 14 Apr 14:35 compact_monitor_1_1776166551721.mp4\n-rw-r--r-- 1 lukas staff 1111434 14 Apr 14:41 compact_monitor_1_1776166862836.mp4\n-rw-r--r-- 1 lukas staff 1546177 14 Apr 14:46 compact_monitor_1_1776167176709.mp4\n-rw-r--r-- 1 lukas staff 466769 14 Apr 14:51 compact_monitor_1_1776167484535.mp4\n-rw-r--r-- 1 lukas staff 993316 14 Apr 14:56 compact_monitor_1_1776167793776.mp4\n-rw-r--r-- 1 lukas staff 2902714 14 Apr 15:01 compact_monitor_1_1776168105399.mp4\n-rw-r--r-- 1 lukas staff 1279133 14 Apr 15:06 compact_monitor_1_1776168413169.mp4\n-rw-r--r-- 1 lukas staff 1132592 14 Apr 15:12 compact_monitor_1_1776168722629.mp4\n-rw-r--r-- 1 lukas staff 355416 14 Apr 15:17 compact_monitor_1_1776169031962.mp4\n-rw-r--r-- 1 lukas staff 345697 14 Apr 15:22 compact_monitor_1_1776169337693.mp4\n-rw-r--r-- 1 lukas staff 3063911 14 Apr 15:27 compact_monitor_1_1776169641353.mp4\n-rw-r--r-- 1 lukas staff 5369163 14 Apr 15:32 compact_monitor_1_1776169957193.mp4\n-rw-r--r-- 1 lukas staff 3605997 14 Apr 15:38 compact_monitor_1_1776170274586.mp4\n-rw-r--r-- 1 lukas staff 1662201 14 Apr 15:43 compact_monitor_1_1776170596259.mp4\n-rw-r--r-- 1 lukas staff 2518520 14 Apr 15:48 compact_monitor_1_1776170900299.mp4\n-rw-r--r-- 1 lukas staff 2298616 14 Apr 15:53 compact_monitor_1_1776171206621.mp4\n-rw-r--r-- 1 lukas staff 252208 14 Apr 15:58 compact_monitor_1_1776171511042.mp4\n-rw-r--r-- 1 lukas staff 547163 14 Apr 16:03 compact_monitor_1_1776171816609.mp4\n-rw-r--r-- 1 lukas staff 3548604 14 Apr 16:08 compact_monitor_1_1776172119791.mp4\n-rw-r--r-- 1 lukas staff 1006390 14 Apr 16:13 compact_monitor_1_1776172427942.mp4\n-rw-r--r-- 1 lukas staff 1168310 14 Apr 16:18 compact_monitor_1_1776172735350.mp4\n-rw-r--r-- 1 lukas staff 2138214 14 Apr 16:24 compact_monitor_1_1776173046731.mp4\n-rw-r--r-- 1 lukas staff 2138875 14 Apr 16:29 compact_monitor_1_1776173354299.mp4\n-rw-r--r-- 1 lukas staff 336470 14 Apr 16:34 compact_monitor_1_1776173662610.mp4\n-rw-r--r-- 1 lukas staff 330494 14 Apr 16:39 compact_monitor_1_1776173971011.mp4\n-rw-r--r-- 1 lukas staff 574889 14 Apr 16:44 compact_monitor_1_1776174275028.mp4\n-rw-r--r-- 1 lukas staff 450335 14 Apr 16:49 compact_monitor_1_1776174580719.mp4\n-rw-r--r-- 1 lukas staff 452365 14 Apr 16:54 compact_monitor_1_1776174888498.mp4\n-rw-r--r-- 1 lukas staff 499947 14 Apr 16:59 compact_monitor_1_1776175195769.mp4\n-rw-r--r-- 1 lukas staff 501324 14 Apr 17:05 compact_monitor_1_1776175516084.mp4\n-rw-r--r-- 1 lukas staff 1187862 14 Apr 17:10 compact_monitor_1_1776175831658.mp4\n-rw-r--r-- 1 lukas staff 4276500 14 Apr 17:15 compact_monitor_1_1776176143265.mp4\n-rw-r--r-- 1 lukas staff 3712128 14 Apr 17:21 compact_monitor_1_1776176471641.mp4\n-rw-r--r-- 1 lukas staff 3520036 14 Apr 17:26 compact_monitor_1_1776176786477.mp4\n-rw-r--r-- 1 lukas staff 4125306 14 Apr 17:31 compact_monitor_1_1776177099043.mp4\n-rw-r--r-- 1 lukas staff 3547886 14 Apr 17:37 compact_monitor_1_1776177433201.mp4\n-rw-r--r-- 1 lukas staff 2400891 14 Apr 17:42 compact_monitor_1_1776177752872.mp4\n-rw-r--r-- 1 lukas staff 4689207 14 Apr 17:47 compact_monitor_1_1776178058207.mp4\n-rw-r--r-- 1 lukas staff 1801277 14 Apr 17:53 compact_monitor_1_1776178379517.mp4\n-rw-r--r-- 1 lukas staff 3259926 14 Apr 17:58 compact_monitor_1_1776178686281.mp4\n-rw-r--r-- 1 lukas staff 1470635 14 Apr 18:03 compact_monitor_1_1776178992046.mp4\n-rw-r--r-- 1 lukas staff 3102429 14 Apr 18:08 compact_monitor_1_1776179297527.mp4\n-rw-r--r-- 1 lukas staff 223940 14 Apr 18:13 compact_monitor_1_1776179607218.mp4\n-rw-r--r-- 1 lukas staff 871065 14 Apr 18:13 compact_monitor_1_1776179613012.mp4\n-rw-r--r-- 1 lukas staff 1029083 14 Apr 18:18 compact_monitor_1_1776179929971.mp4\n-rw-r--r-- 1 lukas staff 1117436 14 Apr 18:24 compact_monitor_1_1776180248849.mp4\n-rw-r--r-- 1 lukas staff 987269 14 Apr 18:29 compact_monitor_1_1776180569996.mp4\n-rw-r--r-- 1 lukas staff 896704 14 Apr 18:34 compact_monitor_1_1776180888049.mp4\n-rw-r--r-- 1 lukas staff 1945946 14 Apr 18:40 compact_monitor_1_1776181202583.mp4\n-rw-r--r-- 1 lukas staff 862072 14 Apr 18:45 compact_monitor_1_1776181526071.mp4\n-rw-r--r-- 1 lukas staff 813756 14 Apr 18:50 compact_monitor_1_1776181848713.mp4\n-rw-r--r-- 1 lukas staff 813226 14 Apr 18:56 compact_monitor_1_1776182167765.mp4\n-rw-r--r-- 1 lukas staff 792289 14 Apr 19:01 compact_monitor_1_1776182486906.mp4\n-rw-r--r-- 1 lukas staff 900197 14 Apr 19:06 compact_monitor_1_1776182803477.mp4\n-rw-r--r-- 1 lukas staff 903090 14 Apr 19:12 compact_monitor_1_1776183124102.mp4\n-rw-r--r-- 1 lukas staff 821885 14 Apr 19:17 compact_monitor_1_1776183446647.mp4\n-rw-r--r-- 1 lukas staff 827224 14 Apr 19:22 compact_monitor_1_1776183765602.mp4\n-rw-r--r-- 1 lukas staff 844977 14 Apr 19:28 compact_monitor_1_1776184085319.mp4\n-rw-r--r-- 1 lukas staff 4160651 15 Apr 09:59 compact_monitor_1_1776236348162.mp4\n-rw-r--r-- 1 lukas staff 2257702 15 Apr 09:59 compact_monitor_1_1776236355103.mp4\n-rw-r--r-- 1 lukas staff 803789 14 Apr 09:34 compact_monitor_2_1776148467123.mp4\n-rw-r--r-- 1 lukas staff 846598 14 Apr 09:39 compact_monitor_2_1776148769344.mp4\n-rw-r--r-- 1 lukas staff 380187 14 Apr 09:44 compact_monitor_2_1776149072222.mp4\n-rw-r--r-- 1 lukas staff 4330357 14 Apr 09:49 compact_monitor_2_1776149375411.mp4\n-rw-r--r-- 1 lukas staff 5979630 14 Apr 09:54 compact_monitor_2_1776149684838.mp4\n-rw-r--r-- 1 lukas staff 5685863 14 Apr 10:00 compact_monitor_2_1776149997069.mp4\n-rw-r--r-- 1 lukas staff 1817789 14 Apr 10:05 compact_monitor_2_1776150308175.mp4\n-rw-r--r-- 1 lukas staff 3734598 14 Apr 10:10 compact_monitor_2_1776150613826.mp4\n-rw-r--r-- 1 lukas staff 7824075 14 Apr 10:15 compact_monitor_2_1776150920663.mp4\n-rw-r--r-- 1 lukas staff 6299436 14 Apr 10:20 compact_monitor_2_1776151228707.mp4\n-rw-r--r-- 1 lukas staff 3269154 14 Apr 10:25 compact_monitor_2_1776151537695.mp4\n-rw-r--r-- 1 lukas staff 9004762 14 Apr 10:30 compact_monitor_2_1776151844100.mp4\n-rw-r--r-- 1 lukas staff 4710671 14 Apr 10:35 compact_monitor_2_1776152152089.mp4\n-rw-r--r-- 1 lukas staff 11173604 14 Apr 10:41 compact_monitor_2_1776152458959.mp4\n-rw-r--r-- 1 lukas staff 6761014 14 Apr 10:46 compact_monitor_2_1776152773411.mp4\n-rw-r--r-- 1 lukas staff 3510200 14 Apr 10:51 compact_monitor_2_1776153084189.mp4\n-rw-r--r-- 1 lukas staff 5292708 14 Apr 10:56 compact_monitor_2_1776153395785.mp4\n-rw-r--r-- 1 lukas staff 5487046 14 Apr 11:01 compact_monitor_2_1776153706319.mp4\n-rw-r--r-- 1 lukas staff 5305685 14 Apr 11:06 compact_monitor_2_1776154014738.mp4\n-rw-r--r-- 1 lukas staff 1963074 14 Apr 11:12 compact_monitor_2_1776154320980.mp4\n-rw-r--r-- 1 lukas staff 2513039 14 Apr 11:17 compact_monitor_2_1776154625932.mp4\n-rw-r--r-- 1 lukas staff 2532455 14 Apr 11:22 compact_monitor_2_1776154932083.mp4\n-rw-r--r-- 1 lukas staff 5825408 14 Apr 11:27 compact_monitor_2_1776155240989.mp4\n-rw-r--r-- 1 lukas staff 2066410 14 Apr 11:32 compact_monitor_2_1776155549265.mp4\n-rw-r--r-- 1 lukas staff 3082476 14 Apr 11:37 compact_monitor_2_1776155851806.mp4\n-rw-r--r-- 1 lukas staff 1587810 14 Apr 11:42 compact_monitor_2_1776156155857.mp4\n-rw-r--r-- 1 lukas staff 2346718 14 Apr 11:47 compact_monitor_2_1776156460205.mp4\n-rw-r--r-- 1 lukas staff 1579555 14 Apr 11:52 compact_monitor_2_1776156764898.mp4\n-rw-r--r-- 1 lukas staff 5481864 14 Apr 11:57 compact_monitor_2_1776157072094.mp4\n-rw-r--r-- 1 lukas staff 6527601 14 Apr 12:03 compact_monitor_2_1776157385210.mp4\n-rw-r--r-- 1 lukas staff 9023055 14 Apr 12:08 compact_monitor_2_1776157705883.mp4\n-rw-r--r-- 1 lukas staff 7566360 14 Apr 12:13 compact_monitor_2_1776158020136.mp4\n-rw-r--r-- 1 lukas staff 8801302 14 Apr 12:19 compact_monitor_2_1776158336585.mp4\n-rw-r--r-- 1 lukas staff 4139540 14 Apr 12:24 compact_monitor_2_1776158655295.mp4\n-rw-r--r-- 1 lukas staff 2987994 14 Apr 12:29 compact_monitor_2_1776158968629.mp4\n-rw-r--r-- 1 lukas staff 6323688 14 Apr 12:34 compact_monitor_2_1776159279327.mp4\n-rw-r--r-- 1 lukas staff 2684920 14 Apr 12:40 compact_monitor_2_1776159594527.mp4\n-rw-r--r-- 1 lukas staff 1646460 14 Apr 12:45 compact_monitor_2_1776159902504.mp4\n-rw-r--r-- 1 lukas staff 1767063 14 Apr 12:50 compact_monitor_2_1776160206071.mp4\n-rw-r--r-- 1 lukas staff 1910044 14 Apr 12:55 compact_monitor_2_1776160509646.mp4\n-rw-r--r-- 1 lukas staff 5101631 14 Apr 13:00 compact_monitor_2_1776160814860.mp4\n-rw-r--r-- 1 lukas staff 2487221 14 Apr 13:05 compact_monitor_2_1776161121862.mp4\n-rw-r--r-- 1 lukas staff 1452868 14 Apr 13:10 compact_monitor_2_1776161425872.mp4\n-rw-r--r-- 1 lukas staff 2963557 14 Apr 13:15 compact_monitor_2_1776161729470.mp4\n-rw-r--r-- 1 lukas staff 984939 14 Apr 13:20 compact_monitor_2_1776162033592.mp4\n-rw-r--r-- 1 lukas staff 3411829 14 Apr 13:25 compact_monitor_2_1776162337569.mp4\n-rw-r--r-- 1 lukas staff 622723 14 Apr 13:30 compact_monitor_2_1776162641477.mp4\n-rw-r--r-- 1 lukas staff 2472562 14 Apr 13:35 compact_monitor_2_1776162943983.mp4\n-rw-r--r-- 1 lukas staff 1139489 14 Apr 13:40 compact_monitor_2_1776163247509.mp4\n-rw-r--r-- 1 lukas staff 862846 14 Apr 13:45 compact_monitor_2_1776163550848.mp4\n-rw-r--r-- 1 lukas staff 274959 14 Apr 13:50 compact_monitor_2_1776163854468.mp4\n-rw-r--r-- 1 lukas staff 2036659 14 Apr 13:55 compact_monitor_2_1776164156817.mp4\n-rw-r--r-- 1 lukas staff 6134905 14 Apr 14:01 compact_monitor_2_1776164461879.mp4\n-rw-r--r-- 1 lukas staff 9022378 14 Apr 14:06 compact_monitor_2_1776164770881.mp4\n-rw-r--r-- 1 lukas staff 4566763 14 Apr 14:15 compact_monitor_2_1776165320959.mp4\n-rw-r--r-- 1 lukas staff 462447 14 Apr 14:20 compact_monitor_2_1776165629627.mp4\n-rw-r--r-- 1 lukas staff 709149 14 Apr 14:25 compact_monitor_2_1776165933147.mp4\n-rw-r--r-- 1 lukas staff 4478027 14 Apr 14:30 compact_monitor_2_1776166241146.mp4\n-rw-r--r-- 1 lukas staff 7488847 14 Apr 14:36 compact_monitor_2_1776166555947.mp4\n-rw-r--r-- 1 lukas staff 7883274 14 Apr 14:41 compact_monitor_2_1776166866538.mp4\n-rw-r--r-- 1 lukas staff 2869256 14 Apr 14:46 compact_monitor_2_1776167179562.mp4\n-rw-r--r-- 1 lukas staff 3068440 14 Apr 14:51 compact_monitor_2_1776167487518.mp4\n-rw-r--r-- 1 lukas staff 1816545 14 Apr 14:56 compact_monitor_2_1776167799896.mp4\n-rw-r--r-- 1 lukas staff 3180474 14 Apr 15:01 compact_monitor_2_1776168109470.mp4\n-rw-r--r-- 1 lukas staff 3774140 14 Apr 15:07 compact_monitor_2_1776168415670.mp4\n-rw-r--r-- 1 lukas staff 4536363 14 Apr 15:12 compact_monitor_2_1776168725137.mp4\n-rw-r--r-- 1 lukas staff 2387221 14 Apr 15:17 compact_monitor_2_1776169033283.mp4\n-rw-r--r-- 1 lukas staff 2605350 14 Apr 15:22 compact_monitor_2_1776169338888.mp4\n-rw-r--r-- 1 lukas staff 6906038 14 Apr 15:27 compact_monitor_2_1776169645977.mp4\n-rw-r--r-- 1 lukas staff 5738495 14 Apr 15:32 compact_monitor_2_1776169965047.mp4\n-rw-r--r-- 1 lukas staff 5595644 14 Apr 15:38 compact_monitor_2_1776170281359.mp4\n-rw-r--r-- 1 lukas staff 584749 14 Apr 15:43 compact_monitor_2_1776170598047.mp4\n-rw-r--r-- 1 lukas staff 2633541 14 Apr 15:48 compact_monitor_2_1776170903735.mp4\n-rw-r--r-- 1 lukas staff 770182 14 Apr 15:53 compact_monitor_2_1776171208825.mp4\n-rw-r--r-- 1 lukas staff 1658362 14 Apr 15:58 compact_monitor_2_1776171512473.mp4\n-rw-r--r-- 1 lukas staff 295793 14 Apr 16:03 compact_monitor_2_1776171817959.mp4\n-rw-r--r-- 1 lukas staff 3540965 14 Apr 16:08 compact_monitor_2_1776172123631.mp4\n-rw-r--r-- 1 lukas staff 3589660 14 Apr 16:13 compact_monitor_2_1776172430586.mp4\n-rw-r--r-- 1 lukas staff 4735044 14 Apr 16:19 compact_monitor_2_1776172739210.mp4\n-rw-r--r-- 1 lukas staff 4951644 14 Apr 16:24 compact_monitor_2_1776173049122.mp4\n-rw-r--r-- 1 lukas staff 5939102 14 Apr 16:29 compact_monitor_2_1776173357170.mp4\n-rw-r--r-- 1 lukas staff 2549744 14 Apr 16:34 compact_monitor_2_1776173665142.mp4\n-rw-r--r-- 1 lukas staff 996149 14 Apr 16:39 compact_monitor_2_1776173972456.mp4\n-rw-r--r-- 1 lukas staff 2663346 14 Apr 16:44 compact_monitor_2_1776174276676.mp4\n-rw-r--r-- 1 lukas staff 1776844 14 Apr 16:49 compact_monitor_2_1776174582351.mp4\n-rw-r--r-- 1 lukas staff 1669202 14 Apr 16:54 compact_monitor_2_1776174889930.mp4\n-rw-r--r-- 1 lukas staff 5414828 14 Apr 17:00 compact_monitor_2_1776175198918.mp4\n-rw-r--r-- 1 lukas staff 5727100 14 Apr 17:05 compact_monitor_2_1776175518133.mp4\n-rw-r--r-- 1 lukas staff 6080220 14 Apr 17:10 compact_monitor_2_1776175835473.mp4\n-rw-r--r-- 1 lukas staff 3631681 14 Apr 17:16 compact_monitor_2_1776176159421.mp4\n-rw-r--r-- 1 lukas staff 1861818 14 Apr 17:21 compact_monitor_2_1776176479999.mp4\n-rw-r--r-- 1 lukas staff 1471229 14 Apr 17:26 compact_monitor_2_1776176794129.mp4\n-rw-r--r-- 1 lukas staff 1792667 14 Apr 17:32 compact_monitor_2_1776177119122.mp4\n-rw-r--r-- 1 lukas staff 2398088 14 Apr 17:37 compact_monitor_2_1776177447361.mp4\n-rw-r--r-- 1 lukas staff 1873376 14 Apr 17:42 compact_monitor_2_1776177755837.mp4\n-rw-r--r-- 1 lukas staff 3686281 14 Apr 17:47 compact_monitor_2_1776178069540.mp4\n-rw-r--r-- 1 lukas staff 1842517 14 Apr 17:53 compact_monitor_2_1776178382342.mp4\n-rw-r--r-- 1 lukas staff 2595005 14 Apr 17:58 compact_monitor_2_1776178688999.mp4\n-rw-r--r-- 1 lukas staff 3352578 14 Apr 18:03 compact_monitor_2_1776178994368.mp4\n-rw-r--r-- 1 lukas staff 7474140 14 Apr 18:08 compact_monitor_2_1776179301874.mp4\n-rw-r--r-- 1 lukas staff 18300640 14 Apr 18:13 compact_monitor_2_1776179614376.mp4\n-rw-r--r-- 1 lukas staff 8302944 14 Apr 18:13 compact_monitor_2_1776179625270.mp4\n-rw-r--r-- 1 lukas staff 27338956 14 Apr 18:19 compact_monitor_2_1776179934590.mp4\n-rw-r--r-- 1 lukas staff 1061768 14 Apr 18:19 compact_monitor_2_1776179947276.mp4\n-rw-r--r-- 1 lukas staff 24282145 14 Apr 18:24 compact_monitor_2_1776180254284.mp4\n-rw-r--r-- 1 lukas staff 5647384 14 Apr 18:24 compact_monitor_2_1776180266890.mp4\n-rw-r--r-- 1 lukas staff 32748524 14 Apr 18:29 compact_monitor_2_1776180574284.mp4\n-rw-r--r-- 1 lukas staff 25769571 14 Apr 18:35 compact_monitor_2_1776180892046.mp4\n-rw-r--r-- 1 lukas staff 41983533 14 Apr 18:40 compact_monitor_2_1776181207025.mp4\n-rw-r--r-- 1 lukas staff 3365850 14 Apr 18:40 compact_monitor_2_1776181223864.mp4\n-rw-r--r-- 1 lukas staff 40919053 14 Apr 18:45 compact_monitor_2_1776181530742.mp4\n-rw-r--r-- 1 lukas staff 3870375 14 Apr 18:45 compact_monitor_2_1776181546619.mp4\n-rw-r--r-- 1 lukas staff 36175005 14 Apr 18:51 compact_monitor_2_1776181853124.mp4\n-rw-r--r-- 1 lukas staff 36717883 14 Apr 18:56 compact_monitor_2_1776182171990.mp4\n-rw-r--r-- 1 lukas staff 27140350 14 Apr 19:01 compact_monitor_2_1776182491150.mp4\n-rw-r--r-- 1 lukas staff 20914618 14 Apr 19:06 compact_monitor_2_1776182808796.mp4\n-rw-r--r-- 1 lukas staff 4716229 14 Apr 19:07 compact_monitor_2_1776182820060.mp4\n-rw-r--r-- 1 lukas staff 24788277 14 Apr 19:12 compact_monitor_2_1776183129006.mp4\n-rw-r--r-- 1 lukas staff 7974655 14 Apr 19:12 compact_monitor_2_1776183141483.mp4\n-rw-r--r-- 1 lukas staff 22872307 14 Apr 19:17 compact_monitor_2_1776183451042.mp4\n-rw-r--r-- 1 lukas staff 3283631 14 Apr 19:17 compact_monitor_2_1776183462827.mp4\n-rw-r--r-- 1 lukas staff 32308259 14 Apr 19:23 compact_monitor_2_1776183769519.mp4\n-rw-r--r-- 1 lukas staff 2847482 14 Apr 19:23 compact_monitor_2_1776183783534.mp4\n-rw-r--r-- 1 lukas staff 36823186 14 Apr 19:28 compact_monitor_2_1776184089558.mp4\n-rw-r--r-- 1 lukas staff 5825352 14 Apr 19:28 compact_monitor_2_1776184104421.mp4\n-rw-r--r-- 1 lukas staff 30437061 15 Apr 09:59 compact_monitor_2_1776236357169.mp4\n-rw-r--r-- 1 lukas staff 4350302 15 Apr 09:59 compact_monitor_2_1776236373794.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 11:58:00] ========================================\n[2026-04-18 11:58:00] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 11:58:00] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 11:58:04] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✗ 531 / 245 files\n\n[2026-04-18 11:58:09] Archive DB size: 3.0G\n[2026-04-18 11:58:09] Total time: 0m9s\n[2026-04-18 11:58:09] Sync complete for 2026-04-14\n[2026-04-18 11:58:09] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 11:59:41] ========================================\n[2026-04-18 11:59:41] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 11:59:41] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 11:59:45] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✓ 2m07s (245 files, 1.0G)\n\n[2026-04-18 12:01:52] Archive DB size: 3.0G\n[2026-04-18 12:01:52] Total time: 2m11s\n[2026-04-18 12:01:52] Sync complete for 2026-04-14\n[2026-04-18 12:01:52] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:03:13] ========================================\n[2026-04-18 12:03:13] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:03:13] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: will be created\n Data dir: OK (245 files, 1.0G)\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)\nParse error near line 3: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames \n error here ---^\nParse error near line 4: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements \n error here ---^\nParse error near line 5: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events \n error here ---^\nParse error near line 6: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text \n error here ---^\nParse error near line 7: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks\n error here ---^\nParse error near line 8: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings \n error here ---^\nRuntime error near line 9: no such database: nas\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ls /Volumes/screenpipe/\nls: /Volumes/screenpipe/: Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ cd /Volumes \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll\ntotal 96\ndrwxr-xr-x 6 root wheel 192 18 Apr 11:17 .\ndrwxr-xr-x 20 root wheel 640 4 Aug 2024 ..\nlrwxr-xr-x 1 root wheel 1 16 Apr 15:43 Macintosh HD -> /\ndrwx------ 1 lukas staff 16384 11 Apr 15:46 Test\ndrwx------ 1 lukas staff 16384 13 Mar 10:17 Work\ndrwx------ 1 lukas staff 16384 17 Apr 21:29 screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls -la /Volumes/screenpipe/\ntotal 0\nls: /Volumes/screenpipe/: Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ mount | grep screenpipe\n//Adm1n@DXP4800PLUS-B5F8/screenpipe on /Volumes/screenpipe (smbfs, nodev, nosuid, mounted by lukas)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ umount /Volumes/screenpipe\numount: unmount(/Volumes/screenpipe): Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:06:45] ========================================\n[2026-04-18 12:06:45] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:06:45] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: will be created\n Data dir: OK (245 files, 1.0G)\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)\nParse error near line 3: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames \n error here ---^\nParse error near line 4: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements \n error here ---^\nParse error near line 5: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events \n error here ---^\nParse error near line 6: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text \n error here ---^\nParse error near line 7: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks\n error here ---^\nParse error near line 8: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings \n error here ---^\nRuntime error near line 9: no such database: nas\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:06:51] ========================================\n[2026-04-18 12:06:51] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:06:51] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:06:55] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m05s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✓ 0m04s (245 files, 1.0G)\n\n[2026-04-18 12:07:00] Archive DB size: 3.0G\n[2026-04-18 12:07:00] Total time: 0m9s\n[2026-04-18 12:07:00] Sync complete for 2026-04-14\n[2026-04-18 12:07:00] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15\n[2026-04-18 12:07:03] ========================================\n[2026-04-18 12:07:03] Screenpipe sync starting for: 2026-04-15\n[2026-04-18 12:07:03] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:07:07] Date 2026-04-15 already has 12874 frames in archive — skipping DB sync\n Data dir: OK (241 files, 2.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-15\n rsync 2026-04-15/ → NAS ✓ 3m22s (241 files, 2.0G)\n\n[2026-04-18 12:10:30] Archive DB size: 3.0G\n[2026-04-18 12:10:30] Total time: 3m27s\n[2026-04-18 12:10:30] Sync complete for 2026-04-15\n[2026-04-18 12:10:30] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-16\n[2026-04-18 12:16:30] ========================================\n[2026-04-18 12:16:30] Screenpipe sync starting for: 2026-04-16\n[2026-04-18 12:16:30] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:16:33] Date 2026-04-16 already has 9270 frames in archive — skipping DB sync\n Data dir: OK (232 files, 799M)\n\n[+00m03s] ▶ Copying data folder for 2026-04-16\n rsync 2026-04-16/ → NAS ✓ 1m46s (232 files, 799M)\n\n[2026-04-18 12:18:20] Archive DB size: 3.0G\n[2026-04-18 12:18:20] Total time: 1m50s\n[2026-04-18 12:18:20] Sync complete for 2026-04-16\n[2026-04-18 12:18:20] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-17\n[2026-04-18 12:18:38] ========================================\n[2026-04-18 12:18:38] Screenpipe sync starting for: 2026-04-17\n[2026-04-18 12:18:38] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:18:42] Date 2026-04-17 already has 10040 frames in archive — skipping DB sync\n Data dir: OK (250 files, 671M)\n\n[+00m04s] ▶ Copying data folder for 2026-04-17\n rsync 2026-04-17/ → NAS ✓ 1m44s (250 files, 671M)\n\n[2026-04-18 12:20:26] Archive DB size: 3.0G\n[2026-04-18 12:20:26] Total time: 1m48s\n[2026-04-18 12:20:26] Sync complete for 2026-04-17\n[2026-04-18 12:20:26] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sqlite3 ~/.screenpipe/db.sqlite \\\n \"SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '%fts%';\"\nui_events_fts\nui_events_fts_data\nui_events_fts_idx\nui_events_fts_docsize\nui_events_fts_config\nelements_fts\nelements_fts_data\nelements_fts_idx\nelements_fts_docsize\nelements_fts_config\naudio_transcriptions_fts\naudio_transcriptions_fts_data\naudio_transcriptions_fts_idx\naudio_transcriptions_fts_docsize\naudio_transcriptions_fts_config\nmemories_fts\nmemories_fts_data\nmemories_fts_idx\nmemories_fts_docsize\nmemories_fts_config\nframes_fts\nframes_fts_data\nframes_fts_idx\nframes_fts_content\nframes_fts_docsize\nframes_fts_config\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sqlite3 ~/.screenpipe/db.sqlite \\\n \"SELECT name, sql FROM sqlite_master WHERE type='table' AND name='ui_events_fts';\"\nui_events_fts|CREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content,\n app_name,\n window_title,\n element_name,\n content='ui_events',\n content_rowid='id',\n tokenize='unicode61'\n)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls\nconfig.json\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-wal\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-12.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-16.0.log\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpipes\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-13.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-17.0.log\ndb.sqlite\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-09.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-14.0.log\u0000\u0000\u0000\u0000\tscreenpipe_sync.sh\ndb.sqlite-shm\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-11.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-15.0.log\u0000\u0000\u0000\u0000\tsync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ alias sp-start\nsp-start='npx screenpipe@latest record --disable-audio &'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ source ~/.zprofile\n\nPoetry could not find a pyproject.toml file in /Users/lukas/.screenpipe or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ alias sp-start \nsp-start='npx screenpipe@latest record --disable-audio --ignored-windows \"Boosteroid\"'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls ~/.screenpipe/data/\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpending-transcriptions\u0000\tscreenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll \ntotal 7614824\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 .\ndrwx------+ 91 lukas staff 2912 18 Apr 12:53 ..\n-rw-r--r--@ 1 lukas staff 8196 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 358 16 Apr 16:49 config.json\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 data\n-rw-r--r--@ 1 lukas staff 3897454592 17 Apr 21:19 db.sqlite\n-rw-r--r--@ 1 lukas staff 32768 18 Apr 13:13 db.sqlite-shm\n-rw-r--r--@ 1 lukas staff 0 17 Apr 21:19 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 15 Apr 14:53 pipes\n-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log\n-rw-r--r-- 1 lukas staff 95425 11 Apr 23:14 screenpipe.2026-04-11.0.log\n-rw-r--r-- 1 lukas staff 72332 12 Apr 23:55 screenpipe.2026-04-12.0.log\n-rw-r--r-- 1 lukas staff 71555 13 Apr 19:50 screenpipe.2026-04-13.0.log\n-rw-r--r-- 1 lukas staff 162389 14 Apr 19:31 screenpipe.2026-04-14.0.log\n-rw-r--r-- 1 lukas staff 175763 15 Apr 18:55 screenpipe.2026-04-15.0.log\n-rw-r--r-- 1 lukas staff 196994 16 Apr 20:33 screenpipe.2026-04-16.0.log\n-rw-r--r-- 1 lukas staff 208424 17 Apr 21:06 screenpipe.2026-04-17.0.log\n-rwxr-xr-x@ 1 lukas staff 14323 18 Apr 12:06 screenpipe_sync.sh\n-rw-r--r--@ 1 lukas staff 12669 18 Apr 12:20 sync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cd data\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 16\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 .\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 data\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd pending-transcriptions \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/pending-transcriptions $ ll\ntotal 0\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 .\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/pending-transcriptions $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ data\nzsh: command not found: data\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 16\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 .\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 data\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd data \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll\ntotal 40\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 .\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 252 lukas staff 8064 17 Apr 21:06 2026-04-17\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-09 \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-09 $ ll\ntotal 79400\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 .\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..\n-rw-r--r-- 1 lukas staff 2558635 9 Apr 20:04 compact_monitor_1_1775754248190.mp4\n-rw-r--r-- 1 lukas staff 5272347 9 Apr 20:09 compact_monitor_1_1775754549504.mp4\n-rw-r--r-- 1 lukas staff 951943 9 Apr 20:15 compact_monitor_1_1775754928127.mp4\n-rw-r--r-- 1 lukas staff 780343 9 Apr 20:20 compact_monitor_1_1775755253065.mp4\n-rw-r--r-- 1 lukas staff 3129755 9 Apr 20:26 compact_monitor_1_1775755561408.mp4\n-rw-r--r-- 1 lukas staff 2369134 9 Apr 20:29 compact_monitor_1_1775755764874.mp4\n-rw-r--r-- 1 lukas staff 2879527 9 Apr 20:32 compact_monitor_1_1775755951928.mp4\n-rw-r--r-- 1 lukas staff 5597115 9 Apr 20:47 compact_monitor_1_1775756847339.mp4\n-rw-r--r-- 1 lukas staff 3460978 9 Apr 21:15 compact_monitor_1_1775758509024.mp4\n-rw-r--r-- 1 lukas staff 1876809 9 Apr 21:15 compact_monitor_1_1775758515203.mp4\n-rw-r--r-- 1 lukas staff 2813430 9 Apr 21:25 compact_monitor_1_1775759143411.mp4\n-rw-r--r-- 1 lukas staff 8937177 11 Apr 14:53 compact_monitor_1_1775908431491.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-09 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll\ntotal 40\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 .\ndrwxr-xr-x 14 lukas staff 448 18 Apr 13:36 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 229 lukas staff 7328 18 Apr 13:35 2026-04-17\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:36 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ll\ntotal 5696\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:36 .\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 ..\n-rw-r--r-- 1 lukas staff 215433 18 Apr 13:33 1776508419390_m1.jpg\n-rw-r--r-- 1 lukas staff 107206 18 Apr 13:33 1776508419555_m2.jpg\n-rw-r--r-- 1 lukas staff 155997 18 Apr 13:33 1776508422128_m1.jpg\n-rw-r--r-- 1 lukas staff 244304 18 Apr 13:33 1776508428450_m1.jpg\n-rw-r--r-- 1 lukas staff 107203 18 Apr 13:33 1776508428554_m2.jpg\n-rw-r--r-- 1 lukas staff 107202 18 Apr 13:33 1776508429142_m2.jpg\n-rw-r--r-- 1 lukas staff 208296 18 Apr 13:34 1776508453522_m1.jpg\n-rw-r--r-- 1 lukas staff 107122 18 Apr 13:34 1776508453670_m2.jpg\n-rw-r--r-- 1 lukas staff 130447 18 Apr 13:34 1776508456271_m1.jpg\n-rw-r--r-- 1 lukas staff 200633 18 Apr 13:34 1776508465399_m1.jpg\n-rw-r--r-- 1 lukas staff 201006 18 Apr 13:34 1776508479214_m1.jpg\n-rw-r--r-- 1 lukas staff 107315 18 Apr 13:34 1776508479222_m2.jpg\n-rw-r--r-- 1 lukas staff 217542 18 Apr 13:35 1776508510109_m1.jpg\n-rw-r--r-- 1 lukas staff 107558 18 Apr 13:35 1776508520117_m2.jpg\n-rw-r--r-- 1 lukas staff 217529 18 Apr 13:35 1776508540416_m1.jpg\n-rw-r--r-- 1 lukas staff 107438 18 Apr 13:35 1776508550498_m2.jpg\n-rw-r--r-- 1 lukas staff 217565 18 Apr 13:36 1776508570741_m1.jpg\n-rw-r--r-- 1 lukas staff 107323 18 Apr 13:36 1776508580887_m2.jpg\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ curl -s http://localhost:3030/health | jq '{audio_status, last_audio: .last_audio_timestamp}'\n{\n \"audio_status\": \"ok\",\n \"last_audio\": \"2026-04-18T13:36:57+03:00\"\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ls ~/.screenpipe/data/\nSystem Audio (output)_2026-04-18_10-34-25.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-36-39.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-34-24.mp4\nSystem Audio (output)_2026-04-18_10-34-49.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-37-02.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-34-56.mp4\nSystem Audio (output)_2026-04-18_10-35-11.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-37-24.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-35-26.mp4\nSystem Audio (output)_2026-04-18_10-35-33.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-35-56.mp4\nSystem Audio (output)_2026-04-18_10-35-55.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpending-transcriptions\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-36-26.mp4\nSystem Audio (output)_2026-04-18_10-36-17.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.db\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-36-56.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ll\ntotal 13080\ndrwxr-xr-x 44 lukas staff 1408 18 Apr 13:37 .\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 ..\n-rw-r--r-- 1 lukas staff 215433 18 Apr 13:33 1776508419390_m1.jpg\n-rw-r--r-- 1 lukas staff 107206 18 Apr 13:33 1776508419555_m2.jpg\n-rw-r--r-- 1 lukas staff 155997 18 Apr 13:33 1776508422128_m1.jpg\n-rw-r--r-- 1 lukas staff 244304 18 Apr 13:33 1776508428450_m1.jpg\n-rw-r--r-- 1 lukas staff 107203 18 Apr 13:33 1776508428554_m2.jpg\n-rw-r--r-- 1 lukas staff 107202 18 Apr 13:33 1776508429142_m2.jpg\n-rw-r--r-- 1 lukas staff 208296 18 Apr 13:34 1776508453522_m1.jpg\n-rw-r--r-- 1 lukas staff 107122 18 Apr 13:34 1776508453670_m2.jpg\n-rw-r--r-- 1 lukas staff 130447 18 Apr 13:34 1776508456271_m1.jpg\n-rw-r--r-- 1 lukas staff 200633 18 Apr 13:34 1776508465399_m1.jpg\n-rw-r--r-- 1 lukas staff 201006 18 Apr 13:34 1776508479214_m1.jpg\n-rw-r--r-- 1 lukas staff 107315 18 Apr 13:34 1776508479222_m2.jpg\n-rw-r--r-- 1 lukas staff 217542 18 Apr 13:35 1776508510109_m1.jpg\n-rw-r--r-- 1 lukas staff 107558 18 Apr 13:35 1776508520117_m2.jpg\n-rw-r--r-- 1 lukas staff 217529 18 Apr 13:35 1776508540416_m1.jpg\n-rw-r--r-- 1 lukas staff 107438 18 Apr 13:35 1776508550498_m2.jpg\n-rw-r--r-- 1 lukas staff 217565 18 Apr 13:36 1776508570741_m1.jpg\n-rw-r--r-- 1 lukas staff 107323 18 Apr 13:36 1776508580887_m2.jpg\n-rw-r--r-- 1 lukas staff 223931 18 Apr 13:36 1776508601010_m1.jpg\n-rw-r--r-- 1 lukas staff 110527 18 Apr 13:36 1776508601828_m2.jpg\n-rw-r--r-- 1 lukas staff 220887 18 Apr 13:36 1776508601839_m1.jpg\n-rw-r--r-- 1 lukas staff 110573 18 Apr 13:36 1776508604812_m2.jpg\n-rw-r--r-- 1 lukas staff 219398 18 Apr 13:37 1776508632417_m1.jpg\n-rw-r--r-- 1 lukas staff 83219 18 Apr 13:37 1776508635039_m2.jpg\n-rw-r--r-- 1 lukas staff 219514 18 Apr 13:37 1776508638212_m1.jpg\n-rw-r--r-- 1 lukas staff 87339 18 Apr 13:37 1776508638212_m2.jpg\n-rw-r--r-- 1 lukas staff 221109 18 Apr 13:37 1776508639686_m1.jpg\n-rw-r--r-- 1 lukas staff 84740 18 Apr 13:37 1776508639725_m2.jpg\n-rw-r--r-- 1 lukas staff 224486 18 Apr 13:37 1776508640520_m1.jpg\n-rw-r--r-- 1 lukas staff 84838 18 Apr 13:37 1776508640592_m2.jpg\n-rw-r--r-- 1 lukas staff 84841 18 Apr 13:37 1776508647855_m2.jpg\n-rw-r--r-- 1 lukas staff 217131 18 Apr 13:37 1776508647864_m1.jpg\n-rw-r--r-- 1 lukas staff 223897 18 Apr 13:37 1776508651398_m1.jpg\n-rw-r--r-- 1 lukas staff 85463 18 Apr 13:37 1776508651398_m2.jpg\n-rw-r--r-- 1 lukas staff 219804 18 Apr 13:37 1776508653328_m1.jpg\n-rw-r--r-- 1 lukas staff 97034 18 Apr 13:37 1776508653420_m2.jpg\n-rw-r--r-- 1 lukas staff 82829 18 Apr 13:37 1776508659506_m2.jpg\n-rw-r--r-- 1 lukas staff 91337 18 Apr 13:37 1776508665504_m2.jpg\n-rw-r--r-- 1 lukas staff 219393 18 Apr 13:37 1776508665924_m1.jpg\n-rw-r--r-- 1 lukas staff 221275 18 Apr 13:37 1776508666761_m1.jpg\n-rw-r--r-- 1 lukas staff 88185 18 Apr 13:37 1776508666868_m2.jpg\n-rw-r--r-- 1 lukas staff 218919 18 Apr 13:37 1776508668460_m1.jpg\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll \ntotal 40\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 .\ndrwxr-xr-x 22 lukas staff 704 18 Apr 13:37 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 229 lukas staff 7328 18 Apr 13:35 2026-04-17\ndrwxr-xr-x 44 lukas staff 1408 18 Apr 13:37 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 1776\ndrwxr-xr-x 23 lukas staff 736 18 Apr 13:38 .\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:34 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:34 System Audio (output)_2026-04-18_10-34-25.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-02.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-37-46.mp4\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 data\ndrwxr-xr-x 2 lukas staff 64 18 Apr 13:36 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\n-rw-r--r-- 1 lukas staff 173278 18 Apr 13:34 soundcore AeroClip (input)_2026-04-18_10-34-24.mp4\n-rw-r--r-- 1 lukas staff 134890 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-34-56.mp4\n-rw-r--r-- 1 lukas staff 172333 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-35-26.mp4\n-rw-r--r-- 1 lukas staff 151441 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-35-56.mp4\n-rw-r--r-- 1 lukas staff 71265 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-36-26.mp4\n-rw-r--r-- 1 lukas staff 22227 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-36-56.mp4\n-rw-r--r-- 1 lukas staff 78730 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-37-26.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (docker)","depth":2,"bounds":{"left":0.109375,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.11354167,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.21875,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.22291666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.328125,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33229166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.4375,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.44166666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Review screenpipe usage and Boosteroid integration (claude)","depth":2,"bounds":{"left":0.546875,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.55104166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-159-186:~ (nc)","depth":2,"bounds":{"left":0.65625,"top":0.05888889,"width":0.10902778,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.66041666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-20-6-111:~ (nc)","depth":2,"bounds":{"left":0.7652778,"top":0.05888889,"width":0.10902778,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.76944447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.87430555,"top":0.05888889,"width":0.10902778,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8784722,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
7728043500701407708
|
-1484464777795223949
|
app_switch
|
accessibility
|
NULL
|
-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 . -rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store
drwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09
drwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11
drwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12
drwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13
drwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14
drwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15
drwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16
drwxr-xr-x 252 lukas staff 8064 17 Apr 21:06 2026-04-17
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-17
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ ll
total 1373568
drwxr-xr-x 252 lukas staff 8064 17 Apr 21:06 .
drwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..
-rw-r--r-- 1 lukas staff 199318 17 Apr 21:04 1776449072292_m1.jpg
-rw-r--r-- 1 lukas staff 161727 17 Apr 21:04 1776449072392_m2.jpg
-rw-r--r-- 1 lukas staff 275595 17 Apr 21:05 1776449102977_m1.jpg
-rw-r--r-- 1 lukas staff 161843 17 Apr 21:05 1776449103126_m2.jpg
-rw-r--r-- 1 lukas staff 161707 17 Apr 21:05 1776449115894_m2.jpg
-rw-r--r-- 1 lukas staff 275808 17 Apr 21:05 1776449116000_m1.jpg
-rw-r--r-- 1 lukas staff 127822 17 Apr 21:05 1776449117231_m1.jpg
-rw-r--r-- 1 lukas staff 149529 17 Apr 21:05 1776449126408_m1.jpg
-rw-r--r-- 1 lukas staff 267074 17 Apr 21:05 1776449129340_m1.jpg
-rw-r--r-- 1 lukas staff 236620 17 Apr 21:05 1776449134291_m1.jpg
-rw-r--r-- 1 lukas staff 163014 17 Apr 21:05 1776449134403_m2.jpg
-rw-r--r-- 1 lukas staff 232479 17 Apr 21:05 1776449135411_m1.jpg
-rw-r--r-- 1 lukas staff 162882 17 Apr 21:05 1776449140257_m2.jpg
-rw-r--r-- 1 lukas staff 262782 17 Apr 21:05 1776449140392_m1.jpg
-rw-r--r-- 1 lukas staff 274674 17 Apr 21:05 1776449141484_m1.jpg
-rw-r--r-- 1 lukas staff 267740 17 Apr 21:05 1776449149487_m1.jpg
-rw-r--r-- 1 lukas staff 161911 17 Apr 21:05 1776449149493_m2.jpg
-rw-r--r-- 1 lukas staff 267807 17 Apr 21:05 1776449150939_m1.jpg
-rw-r--r-- 1 lukas staff 165566 17 Apr 21:05 1776449152599_m2.jpg
-rw-r--r-- 1 lukas staff 272433 17 Apr 21:05 1776449152602_m1.jpg
-rw-r--r-- 1 lukas staff 269228 17 Apr 21:06 1776449168292_m1.jpg
-rw-r--r-- 1 lukas staff 162930 17 Apr 21:06 1776449168393_m2.jpg
-rw-r--r-- 1 lukas staff 267027 17 Apr 21:06 1776449175046_m1.jpg
-rw-r--r-- 1 lukas staff 162922 17 Apr 21:06 1776449178917_m2.jpg
-rw-r--r-- 1 lukas staff 271791 17 Apr 21:06 1776449181107_m1.jpg
-rw-r--r-- 1 lukas staff 1010791 17 Apr 09:07 compact_monitor_1_1776406033543.mp4
-rw-r--r-- 1 lukas staff 1641627 17 Apr 09:12 compact_monitor_1_1776406339160.mp4
-rw-r--r-- 1 lukas staff 282103 17 Apr 09:17 compact_monitor_1_1776406650753.mp4
-rw-r--r-- 1 lukas staff 533856 17 Apr 09:22 compact_monitor_1_1776406961354.mp4
-rw-r--r-- 1 lukas staff 372860 17 Apr 09:27 compact_monitor_1_1776407272449.mp4
-rw-r--r-- 1 lukas staff 269617 17 Apr 09:33 compact_monitor_1_1776407585831.mp4
-rw-r--r-- 1 lukas staff 289824 17 Apr 09:38 compact_monitor_1_1776407896440.mp4
-rw-r--r-- 1 lukas staff 244134 17 Apr 09:43 compact_monitor_1_1776408206183.mp4
-rw-r--r-- 1 lukas staff 239140 17 Apr 09:48 compact_monitor_1_1776408516395.mp4
-rw-r--r-- 1 lukas staff 361011 17 Apr 09:53 compact_monitor_1_1776408824270.mp4
-rw-r--r-- 1 lukas staff 3365373 17 Apr 09:59 compact_monitor_1_1776409136717.mp4
-rw-r--r-- 1 lukas staff 2601020 17 Apr 10:04 compact_monitor_1_1776409450395.mp4
-rw-r--r-- 1 lukas staff 3497066 17 Apr 10:09 compact_monitor_1_1776409759172.mp4
-rw-r--r-- 1 lukas staff 1507571 17 Apr 10:14 compact_monitor_1_1776410067944.mp4
-rw-r--r-- 1 lukas staff 943396 17 Apr 10:19 compact_monitor_1_1776410372484.mp4
-rw-r--r-- 1 lukas staff 1225040 17 Apr 10:24 compact_monitor_1_1776410674629.mp4
-rw-r--r-- 1 lukas staff 2224229 17 Apr 10:29 compact_monitor_1_1776410981487.mp4
-rw-r--r-- 1 lukas staff 398291 17 Apr 10:34 compact_monitor_1_1776411298373.mp4
-rw-r--r-- 1 lukas staff 4376235 17 Apr 10:40 compact_monitor_1_1776411601686.mp4
-rw-r--r-- 1 lukas staff 5007720 17 Apr 10:45 compact_monitor_1_1776411923026.mp4
-rw-r--r-- 1 lukas staff 2281319 17 Apr 10:50 compact_monitor_1_1776412242015.mp4
-rw-r--r-- 1 lukas staff 3182872 17 Apr 10:56 compact_monitor_1_1776412560658.mp4
-rw-r--r-- 1 lukas staff 3896056 17 Apr 11:01 compact_monitor_1_1776412881181.mp4
-rw-r--r-- 1 lukas staff 6279582 17 Apr 11:06 compact_monitor_1_1776413192507.mp4
-rw-r--r-- 1 lukas staff 6492126 17 Apr 11:12 compact_monitor_1_1776413508291.mp4
-rw-r--r-- 1 lukas staff 6045038 17 Apr 11:17 compact_monitor_1_1776413848971.mp4
-rw-r--r-- 1 lukas staff 4968033 17 Apr 11:23 compact_monitor_1_1776414180658.mp4
-rw-r--r-- 1 lukas staff 7109088 17 Apr 11:28 compact_monitor_1_1776414513921.mp4
-rw-r--r-- 1 lukas staff 9099339 17 Apr 11:34 compact_monitor_1_1776414839842.mp4
-rw-r--r-- 1 lukas staff 926165 17 Apr 11:34 compact_monitor_1_1776414858793.mp4
-rw-r--r-- 1 lukas staff 9246778 17 Apr 11:39 compact_monitor_1_1776415182593.mp4
-rw-r--r-- 1 lukas staff 8361876 17 Apr 11:45 compact_monitor_1_1776415505403.mp4
-rw-r--r-- 1 lukas staff 7215549 17 Apr 11:50 compact_monitor_1_1776415841776.mp4
-rw-r--r-- 1 lukas staff 6234445 17 Apr 11:56 compact_monitor_1_1776416174658.mp4
-rw-r--r-- 1 lukas staff 11694078 17 Apr 12:01 compact_monitor_1_1776416497484.mp4
-rw-r--r-- 1 lukas staff 7033085 17 Apr 12:07 compact_monitor_1_1776416834587.mp4
-rw-r--r-- 1 lukas staff 4309161 17 Apr 12:12 compact_monitor_1_1776417157754.mp4
-rw-r--r-- 1 lukas staff 3782878 17 Apr 12:18 compact_monitor_1_1776417481425.mp4
-rw-r--r-- 1 lukas staff 5597264 17 Apr 12:23 compact_monitor_1_1776417802134.mp4
-rw-r--r-- 1 lukas staff 5667747 17 Apr 12:28 compact_monitor_1_1776418119908.mp4
-rw-r--r-- 1 lukas staff 8840842 17 Apr 12:34 compact_monitor_1_1776418443506.mp4
-rw-r--r-- 1 lukas staff 5442395 17 Apr 12:39 compact_monitor_1_1776418761701.mp4
-rw-r--r-- 1 lukas staff 4054014 17 Apr 12:44 compact_monitor_1_1776419074083.mp4
-rw-r--r-- 1 lukas staff 3734539 17 Apr 12:49 compact_monitor_1_1776419388949.mp4
-rw-r--r-- 1 lukas staff 3137915 17 Apr 12:55 compact_monitor_1_1776419701686.mp4
-rw-r--r-- 1 lukas staff 3064654 17 Apr 13:00 compact_monitor_1_1776420015547.mp4
-rw-r--r-- 1 lukas staff 1189833 17 Apr 13:05 compact_monitor_1_1776420321592.mp4
-rw-r--r-- 1 lukas staff 1862832 17 Apr 13:10 compact_monitor_1_1776420633887.mp4
-rw-r--r-- 1 lukas staff 520517 17 Apr 13:15 compact_monitor_1_1776420947144.mp4
-rw-r--r-- 1 lukas staff 790509 17 Apr 13:20 compact_monitor_1_1776421253865.mp4
-rw-r--r-- 1 lukas staff 1155599 17 Apr 13:26 compact_monitor_1_1776421566995.mp4
-rw-r--r-- 1 lukas staff 626836 17 Apr 13:31 compact_monitor_1_1776421884013.mp4
-rw-r--r-- 1 lukas staff 2709758 17 Apr 13:36 compact_monitor_1_1776422194788.mp4
-rw-r--r-- 1 lukas staff 894214 17 Apr 13:41 compact_monitor_1_1776422513565.mp4
-rw-r--r-- 1 lukas staff 1298826 17 Apr 13:47 compact_monitor_1_1776422829105.mp4
-rw-r--r-- 1 lukas staff 3454896 17 Apr 13:52 compact_monitor_1_1776423143916.mp4
-rw-r--r-- 1 lukas staff 1369217 17 Apr 13:57 compact_monitor_1_1776423466196.mp4
-rw-r--r-- 1 lukas staff 1677163 17 Apr 14:03 compact_monitor_1_1776423783420.mp4
-rw-r--r-- 1 lukas staff 556702 17 Apr 14:08 compact_monitor_1_1776424109344.mp4
-rw-r--r-- 1 lukas staff 1001886 17 Apr 14:13 compact_monitor_1_1776424416957.mp4
-rw-r--r-- 1 lukas staff 1485547 17 Apr 14:18 compact_monitor_1_1776424730536.mp4
-rw-r--r-- 1 lukas staff 935536 17 Apr 14:24 compact_monitor_1_1776425050631.mp4
-rw-r--r-- 1 lukas staff 1119642 17 Apr 14:29 compact_monitor_1_1776425372446.mp4
-rw-r--r-- 1 lukas staff 430883 17 Apr 14:34 compact_monitor_1_1776425690857.mp4
-rw-r--r-- 1 lukas staff 427035 17 Apr 14:40 compact_monitor_1_1776426003278.mp4
-rw-r--r-- 1 lukas staff 654605 17 Apr 14:45 compact_monitor_1_1776426312497.mp4
-rw-r--r-- 1 lukas staff 440539 17 Apr 14:50 compact_monitor_1_1776426625506.mp4
-rw-r--r-- 1 lukas staff 439802 17 Apr 14:55 compact_monitor_1_1776426939895.mp4
-rw-r--r-- 1 lukas staff 557755 17 Apr 15:01 compact_monitor_1_1776427261945.mp4
-rw-r--r-- 1 lukas staff 1071442 17 Apr 15:06 compact_monitor_1_1776427571985.mp4
-rw-r--r-- 1 lukas staff 2606361 17 Apr 15:11 compact_monitor_1_1776427882803.mp4
-rw-r--r-- 1 lukas staff 951201 17 Apr 15:16 compact_monitor_1_1776428192090.mp4
-rw-r--r-- 1 lukas staff 322306 17 Apr 15:21 compact_monitor_1_1776428505150.mp4
-rw-r--r-- 1 lukas staff 331163 17 Apr 15:26 compact_monitor_1_1776428811953.mp4
-rw-r--r-- 1 lukas staff 737469 17 Apr 15:32 compact_monitor_1_1776429127526.mp4
-rw-r--r-- 1 lukas staff 352621 17 Apr 15:37 compact_monitor_1_1776429442374.mp4
-rw-r--r-- 1 lukas staff 444203 17 Apr 15:42 compact_monitor_1_1776429752217.mp4
-rw-r--r-- 1 lukas staff 1407505 17 Apr 15:47 compact_monitor_1_1776430066920.mp4
-rw-r--r-- 1 lukas staff 360974 17 Apr 15:53 compact_monitor_1_1776430376918.mp4
-rw-r--r-- 1 lukas staff 321565 17 Apr 15:58 compact_monitor_1_1776430691588.mp4
-rw-r--r-- 1 lukas staff 317048 17 Apr 16:03 compact_monitor_1_1776431003504.mp4
-rw-r--r-- 1 lukas staff 321894 17 Apr 16:08 compact_monitor_1_1776431317637.mp4
-rw-r--r-- 1 lukas staff 333513 17 Apr 16:13 compact_monitor_1_1776431629041.mp4
-rw-r--r-- 1 lukas staff 326264 17 Apr 16:19 compact_monitor_1_1776431942238.mp4
-rw-r--r-- 1 lukas staff 366336 17 Apr 16:24 compact_monitor_1_1776432254490.mp4
-rw-r--r-- 1 lukas staff 327825 17 Apr 16:29 compact_monitor_1_1776432574989.mp4
-rw-r--r-- 1 lukas staff 1048363 17 Apr 16:34 compact_monitor_1_1776432882794.mp4
-rw-r--r-- 1 lukas staff 1668969 17 Apr 16:39 compact_monitor_1_1776433188842.mp4
-rw-r--r-- 1 lukas staff 1283899 17 Apr 16:44 compact_monitor_1_1776433493858.mp4
-rw-r--r-- 1 lukas staff 314118 17 Apr 16:50 compact_monitor_1_1776433800642.mp4
-rw-r--r-- 1 lukas staff 547478 17 Apr 16:55 compact_monitor_1_1776434111371.mp4
-rw-r--r-- 1 lukas staff 868654 17 Apr 17:00 compact_monitor_1_1776434420728.mp4
-rw-r--r-- 1 lukas staff 885215 17 Apr 17:05 compact_monitor_1_1776434723901.mp4
-rw-r--r-- 1 lukas staff 508905 17 Apr 17:10 compact_monitor_1_1776435038035.mp4
-rw-r--r-- 1 lukas staff 591766 17 Apr 17:16 compact_monitor_1_1776435363044.mp4
-rw-r--r-- 1 lukas staff 2031034 17 Apr 17:21 compact_monitor_1_1776435683729.mp4
-rw-r--r-- 1 lukas staff 2136043 17 Apr 17:26 compact_monitor_1_1776436005076.mp4
-rw-r--r-- 1 lukas staff 578716 17 Apr 17:32 compact_monitor_1_1776436319163.mp4
-rw-r--r-- 1 lukas staff 1308705 17 Apr 17:37 compact_monitor_1_1776436630439.mp4
-rw-r--r-- 1 lukas staff 958771 17 Apr 17:42 compact_monitor_1_1776436939049.mp4
-rw-r--r-- 1 lukas staff 797771 17 Apr 17:47 compact_monitor_1_1776437247467.mp4
-rw-r--r-- 1 lukas staff 1230186 17 Apr 17:52 compact_monitor_1_1776437554897.mp4
-rw-r--r-- 1 lukas staff 862632 17 Apr 17:57 compact_monitor_1_1776437862465.mp4
-rw-r--r-- 1 lukas staff 757441 17 Apr 18:02 compact_monitor_1_1776438171931.mp4
-rw-r--r-- 1 lukas staff 686680 17 Apr 18:08 compact_monitor_1_1776438479816.mp4
-rw-r--r-- 1 lukas staff 1078524 17 Apr 18:13 compact_monitor_1_1776438783339.mp4
-rw-r--r-- 1 lukas staff 496616 17 Apr 18:18 compact_monitor_1_1776439090720.mp4
-rw-r--r-- 1 lukas staff 774571 17 Apr 18:23 compact_monitor_1_1776439396975.mp4
-rw-r--r-- 1 lukas staff 1160291 17 Apr 18:28 compact_monitor_1_1776439703924.mp4
-rw-r--r-- 1 lukas staff 632541 17 Apr 18:34 compact_monitor_1_1776440053428.mp4
-rw-r--r-- 1 lukas staff 3291212 17 Apr 21:05 compact_monitor_1_1776449135667.mp4
-rw-r--r-- 1 lukas staff 768306 17 Apr 09:07 compact_monitor_2_1776406035126.mp4
-rw-r--r-- 1 lukas staff 9277508 17 Apr 09:12 compact_monitor_2_1776406343152.mp4
-rw-r--r-- 1 lukas staff 627114 17 Apr 09:12 compact_monitor_2_1776406349962.mp4
-rw-r--r-- 1 lukas staff 11129246 17 Apr 09:17 compact_monitor_2_1776406653780.mp4
-rw-r--r-- 1 lukas staff 8352174 17 Apr 09:22 compact_monitor_2_1776406964880.mp4
-rw-r--r-- 1 lukas staff 8551960 17 Apr 09:28 compact_monitor_2_1776407277493.mp4
-rw-r--r-- 1 lukas staff 679244 17 Apr 09:28 compact_monitor_2_1776407283693.mp4
-rw-r--r-- 1 lukas staff 12641011 17 Apr 09:33 compact_monitor_2_1776407588804.mp4
-rw-r--r-- 1 lukas staff 9384615 17 Apr 09:38 compact_monitor_2_1776407900099.mp4
-rw-r--r-- 1 lukas staff 4024767 17 Apr 09:43 compact_monitor_2_1776408207652.mp4
-rw-r--r-- 1 lukas staff 2627851 17 Apr 09:48 compact_monitor_2_1776408517311.mp4
-rw-r--r-- 1 lukas staff 4877190 17 Apr 09:53 compact_monitor_2_1776408826734.mp4
-rw-r--r-- 1 lukas staff 3807909 17 Apr 09:59 compact_monitor_2_1776409142638.mp4
-rw-r--r-- 1 lukas staff 4217716 17 Apr 10:04 compact_monitor_2_1776409454184.mp4
-rw-r--r-- 1 lukas staff 1717578 17 Apr 10:09 compact_monitor_2_1776409763153.mp4
-rw-r--r-- 1 lukas staff 1067064 17 Apr 10:14 compact_monitor_2_1776410070480.mp4
-rw-r--r-- 1 lukas staff 442425 17 Apr 10:19 compact_monitor_2_1776410373664.mp4
-rw-r--r-- 1 lukas staff 444497 17 Apr 10:24 compact_monitor_2_1776410676126.mp4
-rw-r--r-- 1 lukas staff 3670025 17 Apr 10:29 compact_monitor_2_1776410986705.mp4
-rw-r--r-- 1 lukas staff 448939 17 Apr 10:35 compact_monitor_2_1776411299875.mp4
-rw-r--r-- 1 lukas staff 4490377 17 Apr 10:40 compact_monitor_2_1776411611306.mp4
-rw-r--r-- 1 lukas staff 7437798 17 Apr 10:45 compact_monitor_2_1776411929615.mp4
-rw-r--r-- 1 lukas staff 6915447 17 Apr 10:50 compact_monitor_2_1776412245368.mp4
-rw-r--r-- 1 lukas staff 7988703 17 Apr 10:56 compact_monitor_2_1776412568330.mp4
-rw-r--r-- 1 lukas staff 5512416 17 Apr 11:01 compact_monitor_2_1776412886253.mp4
-rw-r--r-- 1 lukas staff 3107875 17 Apr 11:06 compact_monitor_2_1776413199096.mp4
-rw-r--r-- 1 lukas staff 4158550 17 Apr 11:12 compact_monitor_2_1776413529707.mp4
-rw-r--r-- 1 lukas staff 4756064 17 Apr 11:17 compact_monitor_2_1776413863997.mp4
-rw-r--r-- 1 lukas staff 5281060 17 Apr 11:23 compact_monitor_2_1776414194026.mp4
-rw-r--r-- 1 lukas staff 2605046 17 Apr 11:28 compact_monitor_2_1776414528521.mp4
-rw-r--r-- 1 lukas staff 5473302 17 Apr 11:34 compact_monitor_2_1776414861255.mp4
-rw-r--r-- 1 lukas staff 2791759 17 Apr 11:40 compact_monitor_2_1776415194836.mp4
-rw-r--r-- 1 lukas staff 5494699 17 Apr 11:45 compact_monitor_2_1776415523929.mp4
-rw-r--r-- 1 lukas staff 4025150 17 Apr 11:51 compact_monitor_2_1776415859261.mp4
-rw-r--r-- 1 lukas staff 2583684 17 Apr 11:56 compact_monitor_2_1776416187267.mp4
-rw-r--r-- 1 lukas staff 5240195 17 Apr 12:02 compact_monitor_2_1776416514967.mp4
-rw-r--r-- 1 lukas staff 3629687 17 Apr 12:07 compact_monitor_2_1776416846005.mp4
-rw-r--r-- 1 lukas staff 5021721 17 Apr 12:12 compact_monitor_2_1776417172355.mp4
-rw-r--r-- 1 lukas staff 2986447 17 Apr 12:18 compact_monitor_2_1776417492277.mp4
-rw-r--r-- 1 lukas staff 3976942 17 Apr 12:23 compact_monitor_2_1776417810578.mp4
-rw-r--r-- 1 lukas staff 4294715 17 Apr 12:29 compact_monitor_2_1776418132304.mp4
-rw-r--r-- 1 lukas staff 4698998 17 Apr 12:34 compact_monitor_2_1776418452374.mp4
-rw-r--r-- 1 lukas staff 3160886 17 Apr 12:39 compact_monitor_2_1776418768555.mp4
-rw-r--r-- 1 lukas staff 1776908 17 Apr 12:44 compact_monitor_2_1776419082274.mp4
-rw-r--r-- 1 lukas staff 1500725 17 Apr 12:49 compact_monitor_2_1776419394506.mp4
-rw-r--r-- 1 lukas staff 1279602 17 Apr 12:55 compact_monitor_2_1776419709571.mp4
-rw-r--r-- 1 lukas staff 2017894 17 Apr 13:00 compact_monitor_2_1776420018859.mp4
-rw-r--r-- 1 lukas staff 5639690 17 Apr 13:05 compact_monitor_2_1776420324337.mp4
-rw-r--r-- 1 lukas staff 4587635 17 Apr 13:10 compact_monitor_2_1776420636421.mp4
-rw-r--r-- 1 lukas staff 2001162 17 Apr 13:15 compact_monitor_2_1776420949555.mp4
-rw-r--r-- 1 lukas staff 3658362 17 Apr 13:21 compact_monitor_2_1776421256306.mp4
-rw-r--r-- 1 lukas staff 7755716 17 Apr 13:26 compact_monitor_2_1776421570292.mp4
-rw-r--r-- 1 lukas staff 3362766 17 Apr 13:31 compact_monitor_2_1776421886698.mp4
-rw-r--r-- 1 lukas staff 6893513 17 Apr 13:36 compact_monitor_2_1776422197625.mp4
-rw-r--r-- 1 lukas staff 4788146 17 Apr 13:42 compact_monitor_2_1776422516390.mp4
-rw-r--r-- 1 lukas staff 4840848 17 Apr 13:47 compact_monitor_2_1776422832136.mp4
-rw-r--r-- 1 lukas staff 9094075 17 Apr 13:52 compact_monitor_2_1776423148671.mp4
-rw-r--r-- 1 lukas staff 10072846 17 Apr 13:57 compact_monitor_2_1776423469970.mp4
-rw-r--r-- 1 lukas staff 13504297 17 Apr 14:03 compact_monitor_2_1776423787536.mp4
-rw-r--r-- 1 lukas staff 1622612 17 Apr 14:08 compact_monitor_2_1776424110832.mp4
-rw-r--r-- 1 lukas staff 5427700 17 Apr 14:13 compact_monitor_2_1776424419206.mp4
-rw-r--r-- 1 lukas staff 1746789 17 Apr 14:19 compact_monitor_2_1776424736034.mp4
-rw-r--r-- 1 lukas staff 4232204 17 Apr 14:24 compact_monitor_2_1776425054084.mp4
-rw-r--r-- 1 lukas staff 4457408 17 Apr 14:29 compact_monitor_2_1776425375574.mp4
-rw-r--r-- 1 lukas staff 174979 17 Apr 14:34 compact_monitor_2_1776425692307.mp4
-rw-r--r-- 1 lukas staff 169969 17 Apr 14:40 compact_monitor_2_1776426005170.mp4
-rw-r--r-- 1 lukas staff 2723106 17 Apr 14:45 compact_monitor_2_1776426315173.mp4
-rw-r--r-- 1 lukas staff 3313658 17 Apr 14:50 compact_monitor_2_1776426627449.mp4
-rw-r--r-- 1 lukas staff 4720437 17 Apr 14:55 compact_monitor_2_1776426943213.mp4
-rw-r--r-- 1 lukas staff 3589313 17 Apr 15:01 compact_monitor_2_1776427263991.mp4
-rw-r--r-- 1 lukas staff 6295236 17 Apr 15:06 compact_monitor_2_1776427573875.mp4
-rw-r--r-- 1 lukas staff 3390902 17 Apr 15:11 compact_monitor_2_1776427885283.mp4
-rw-r--r-- 1 lukas staff 1637607 17 Apr 15:16 compact_monitor_2_1776428194704.mp4
-rw-r--r-- 1 lukas staff 1355327 17 Apr 15:21 compact_monitor_2_1776428506246.mp4
-rw-r--r-- 1 lukas staff 4897048 17 Apr 15:27 compact_monitor_2_1776428815157.mp4
-rw-r--r-- 1 lukas staff 4930900 17 Apr 15:32 compact_monitor_2_1776429130905.mp4
-rw-r--r-- 1 lukas staff 2581578 17 Apr 15:37 compact_monitor_2_1776429444142.mp4
-rw-r--r-- 1 lukas staff 4764105 17 Apr 15:42 compact_monitor_2_1776429755437.mp4
-rw-r--r-- 1 lukas staff 4039902 17 Apr 15:47 compact_monitor_2_1776430069174.mp4
-rw-r--r-- 1 lukas staff 4735734 17 Apr 15:53 compact_monitor_2_1776430380212.mp4
-rw-r--r-- 1 lukas staff 2195410 17 Apr 15:58 compact_monitor_2_1776430693483.mp4
-rw-r--r-- 1 lukas staff 1857322 17 Apr 16:03 compact_monitor_2_1776431005386.mp4
-rw-r--r-- 1 lukas staff 3412100 17 Apr 16:08 compact_monitor_2_1776431319373.mp4
-rw-r--r-- 1 lukas staff 6928537 17 Apr 16:13 compact_monitor_2_1776431631778.mp4
-rw-r--r-- 1 lukas staff 4990793 17 Apr 16:19 compact_monitor_2_1776431944571.mp4
-rw-r--r-- 1 lukas staff 8242278 17 Apr 16:24 compact_monitor_2_1776432258818.mp4
-rw-r--r-- 1 lukas staff 451999 17 Apr 16:24 compact_monitor_2_1776432269036.mp4
-rw-r--r-- 1 lukas staff 2978452 17 Apr 16:29 compact_monitor_2_1776432577467.mp4
-rw-r--r-- 1 lukas staff 1248291 17 Apr 16:34 compact_monitor_2_1776432884349.mp4
-rw-r--r-- 1 lukas staff 2963525 17 Apr 16:39 compact_monitor_2_1776433190284.mp4
-rw-r--r-- 1 lukas staff 1958858 17 Apr 16:44 compact_monitor_2_1776433495477.mp4
-rw-r--r-- 1 lukas staff 1656966 17 Apr 16:50 compact_monitor_2_1776433802347.mp4
-rw-r--r-- 1 lukas staff 2813856 17 Apr 16:55 compact_monitor_2_1776434112909.mp4
-rw-r--r-- 1 lukas staff 510112 17 Apr 17:00 compact_monitor_2_1776434422384.mp4
-rw-r--r-- 1 lukas staff 4354386 17 Apr 17:05 compact_monitor_2_1776434725886.mp4
-rw-r--r-- 1 lukas staff 9798615 17 Apr 17:10 compact_monitor_2_1776435041115.mp4
-rw-r--r-- 1 lukas staff 4503179 17 Apr 17:16 compact_monitor_2_1776435368020.mp4
-rw-r--r-- 1 lukas staff 857002 17 Apr 17:16 compact_monitor_2_1776435376040.mp4
-rw-r--r-- 1 lukas staff 8587996 17 Apr 17:21 compact_monitor_2_1776435687051.mp4
-rw-r--r-- 1 lukas staff 5052247 17 Apr 17:26 compact_monitor_2_1776436009787.mp4
-rw-r--r-- 1 lukas staff 2947924 17 Apr 17:32 compact_monitor_2_1776436320877.mp4
-rw-r--r-- 1 lukas staff 689465 17 Apr 17:37 compact_monitor_2_1776436632536.mp4
-rw-r--r-- 1 lukas staff 1353469 17 Apr 17:42 compact_monitor_2_1776436940788.mp4
-rw-r--r-- 1 lukas staff 870893 17 Apr 17:47 compact_monitor_2_1776437249077.mp4
-rw-r--r-- 1 lukas staff 2653839 17 Apr 17:52 compact_monitor_2_1776437556659.mp4
-rw-r--r-- 1 lukas staff 4310138 17 Apr 17:57 compact_monitor_2_1776437864727.mp4
-rw-r--r-- 1 lukas staff 3683875 17 Apr 18:02 compact_monitor_2_1776438173313.mp4
-rw-r--r-- 1 lukas staff 1916129 17 Apr 18:08 compact_monitor_2_1776438481043.mp4
-rw-r--r-- 1 lukas staff 2349626 17 Apr 18:13 compact_monitor_2_1776438785553.mp4
-rw-r--r-- 1 lukas staff 641202 17 Apr 18:18 compact_monitor_2_1776439092011.mp4
-rw-r--r-- 1 lukas staff 3006319 17 Apr 18:23 compact_monitor_2_1776439398485.mp4
-rw-r--r-- 1 lukas staff 1675776 17 Apr 18:28 compact_monitor_2_1776439705765.mp4
-rw-r--r-- 1 lukas staff 4465225 17 Apr 18:34 compact_monitor_2_1776440055922.mp4
-rw-r--r-- 1 lukas staff 2351472 17 Apr 21:05 compact_monitor_2_1776449140917.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ rsync -av --ignore-existing \
~/.screenpipe/data/data/2026-04-14/ \
/Volumes/Test/screenpipe/data/2026-04-14/
building file list ... done
./
compact_monitor_1_1776236348162.mp4
compact_monitor_1_1776236355103.mp4
compact_monitor_2_1776236357169.mp4
compact_monitor_2_1776236373794.mp4
sent 41217485 bytes received 114 bytes 4338694.63 bytes/sec
total size is 1085072596 speedup is 26.33
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ cd ..
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-14
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ll
total 2120256
drwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 .
drwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..
-rw-r--r--@ 1 lukas staff 581687 14 Apr 09:34 compact_monitor_1_1776148466581.mp4
-rw-r--r--@ 1 lukas staff 702153 14 Apr 09:39 compact_monitor_1_1776148768082.mp4
-rw-r--r--@ 1 lukas staff 251978 14 Apr 09:44 compact_monitor_1_1776149071467.mp4
-rw-r--r-- 1 lukas staff 1717429 14 Apr 09:49 compact_monitor_1_1776149373136.mp4
-rw-r--r-- 1 lukas staff 3477530 14 Apr 09:54 compact_monitor_1_1776149679747.mp4
-rw-r--r-- 1 lukas staff 4579266 14 Apr 09:59 compact_monitor_1_1776149991618.mp4
-rw-r--r-- 1 lukas staff 2305892 14 Apr 10:05 compact_monitor_1_1776150305479.mp4
-rw-r--r-- 1 lukas staff 2464098 14 Apr 10:10 compact_monitor_1_1776150611148.mp4
-rw-r--r-- 1 lukas staff 2640699 14 Apr 10:15 compact_monitor_1_1776150917977.mp4
-rw-r--r-- 1 lukas staff 2938324 14 Apr 10:20 compact_monitor_1_1776151225175.mp4
-rw-r--r-- 1 lukas staff 5734426 14 Apr 10:25 compact_monitor_1_1776151533655.mp4
-rw-r--r-- 1 lukas staff 711441 14 Apr 10:30 compact_monitor_1_1776151841776.mp4
-rw-r--r-- 1 lukas staff 373214 14 Apr 10:35 compact_monitor_1_1776152149591.mp4
-rw-r--r-- 1 lukas staff 259200 14 Apr 10:40 compact_monitor_1_1776152456802.mp4
-rw-r--r-- 1 lukas staff 563549 14 Apr 10:46 compact_monitor_1_1776152770846.mp4
-rw-r--r-- 1 lukas staff 1085034 14 Apr 10:51 compact_monitor_1_1776153081304.mp4
-rw-r--r-- 1 lukas staff 5856145 14 Apr 10:56 compact_monitor_1_1776153389824.mp4
-rw-r--r-- 1 lukas staff 3729206 14 Apr 11:01 compact_monitor_1_1776153702196.mp4
-rw-r--r-- 1 lukas staff 1381857 14 Apr 11:06 compact_monitor_1_1776154011626.mp4
-rw-r--r-- 1 lukas staff 590718 14 Apr 11:12 compact_monitor_1_1776154319547.mp4
-rw-r--r-- 1 lukas staff 1306438 14 Apr 11:17 compact_monitor_1_1776154623893.mp4
-rw-r--r-- 1 lukas staff 216930 14 Apr 11:22 compact_monitor_1_1776154930014.mp4
-rw-r--r-- 1 lukas staff 473698 14 Apr 11:27 compact_monitor_1_1776155238144.mp4
-rw-r--r-- 1 lukas staff 3051314 14 Apr 11:32 compact_monitor_1_1776155547239.mp4
-rw-r--r-- 1 lukas staff 253380 14 Apr 11:37 compact_monitor_1_1776155850943.mp4
-rw-r--r-- 1 lukas staff 258154 14 Apr 11:42 compact_monitor_1_1776156154229.mp4
-rw-r--r-- 1 lukas staff 962893 14 Apr 11:47 compact_monitor_1_1776156458244.mp4
-rw-r--r-- 1 lukas staff 1806149 14 Apr 11:52 compact_monitor_1_1776156762972.mp4
-rw-r--r-- 1 lukas staff 2280711 14 Apr 11:57 compact_monitor_1_1776157067935.mp4
-rw-r--r-- 1 lukas staff 1779777 14 Apr 12:03 compact_monitor_1_1776157380235.mp4
-rw-r--r-- 1 lukas staff 792745 14 Apr 12:08 compact_monitor_1_1776157700511.mp4
-rw-r--r-- 1 lukas staff 290618 14 Apr 12:13 compact_monitor_1_1776158016840.mp4
-rw-r--r-- 1 lukas staff 572761 14 Apr 12:18 compact_monitor_1_1776158333836.mp4
-rw-r--r-- 1 lukas staff 200419 14 Apr 12:24 compact_monitor_1_1776158651565.mp4
-rw-r--r-- 1 lukas staff 190795 14 Apr 12:29 compact_monitor_1_1776158966333.mp4
-rw-r--r-- 1 lukas staff 2126277 14 Apr 12:34 compact_monitor_1_1776159274939.mp4
-rw-r--r-- 1 lukas staff 3747860 14 Apr 12:39 compact_monitor_1_1776159588710.mp4
-rw-r--r-- 1 lukas staff 2152422 14 Apr 12:45 compact_monitor_1_1776159900733.mp4
-rw-r--r-- 1 lukas staff 709258 14 Apr 12:50 compact_monitor_1_1776160204634.mp4
-rw-r--r-- 1 lukas staff 1158847 14 Apr 12:55 compact_monitor_1_1776160508015.mp4
-rw-r--r-- 1 lukas staff 1813578 14 Apr 13:00 compact_monitor_1_1776160811806.mp4
-rw-r--r-- 1 lukas staff 684607 14 Apr 13:05 compact_monitor_1_1776161119981.mp4
-rw-r--r-- 1 lukas staff 636562 14 Apr 13:10 compact_monitor_1_1776161424648.mp4
-rw-r--r-- 1 lukas staff 323432 14 Apr 13:15 compact_monitor_1_1776161728448.mp4
-rw-r--r-- 1 lukas staff 294055 14 Apr 13:20 compact_monitor_1_1776162032394.mp4
-rw-r--r-- 1 lukas staff 296941 14 Apr 13:25 compact_monitor_1_1776162336175.mp4
-rw-r--r-- 1 lukas staff 292219 14 Apr 13:30 compact_monitor_1_1776162640619.mp4
-rw-r--r-- 1 lukas staff 293726 14 Apr 13:35 compact_monitor_1_1776162943050.mp4
-rw-r--r-- 1 lukas staff 832989 14 Apr 13:40 compact_monitor_1_1776163246420.mp4
-rw-r--r-- 1 lukas staff 1068134 14 Apr 13:45 compact_monitor_1_1776163549145.mp4
-rw-r--r-- 1 lukas staff 501189 14 Apr 13:50 compact_monitor_1_1776163853383.mp4
-rw-r--r-- 1 lukas staff 930299 14 Apr 13:55 compact_monitor_1_1776164155311.mp4
-rw-r--r-- 1 lukas staff 2515358 14 Apr 14:01 compact_monitor_1_1776164459131.mp4
-rw-r--r-- 1 lukas staff 1286863 14 Apr 14:06 compact_monitor_1_1776164766940.mp4
-rw-r--r-- 1 lukas staff 1472795 14 Apr 14:15 compact_monitor_1_1776165318512.mp4
-rw-r--r-- 1 lukas staff 439699 14 Apr 14:20 compact_monitor_1_1776165627501.mp4
-rw-r--r-- 1 lukas staff 519424 14 Apr 14:25 compact_monitor_1_1776165931952.mp4
-rw-r--r-- 1 lukas staff 2267443 14 Apr 14:30 compact_monitor_1_1776166235408.mp4
-rw-r--r-- 1 lukas staff 1637916 14 Apr 14:35 compact_monitor_1_1776166551721.mp4
-rw-r--r-- 1 lukas staff 1111434 14 Apr 14:41 compact_monitor_1_1776166862836.mp4
-rw-r--r-- 1 lukas staff 1546177 14 Apr 14:46 compact_monitor_1_1776167176709.mp4
-rw-r--r-- 1 lukas staff 466769 14 Apr 14:51 compact_monitor_1_1776167484535.mp4
-rw-r--r-- 1 lukas staff 993316 14 Apr 14:56 compact_monitor_1_1776167793776.mp4
-rw-r--r-- 1 lukas staff 2902714 14 Apr 15:01 compact_monitor_1_1776168105399.mp4
-rw-r--r-- 1 lukas staff 1279133 14 Apr 15:06 compact_monitor_1_1776168413169.mp4
-rw-r--r-- 1 lukas staff 1132592 14 Apr 15:12 compact_monitor_1_1776168722629.mp4
-rw-r--r-- 1 lukas staff 355416 14 Apr 15:17 compact_monitor_1_1776169031962.mp4
-rw-r--r-- 1 lukas staff 345697 14 Apr 15:22 compact_monitor_1_1776169337693.mp4
-rw-r--r-- 1 lukas staff 3063911 14 Apr 15:27 compact_monitor_1_1776169641353.mp4
-rw-r--r-- 1 lukas staff 5369163 14 Apr 15:32 compact_monitor_1_1776169957193.mp4
-rw-r--r-- 1 lukas staff 3605997 14 Apr 15:38 compact_monitor_1_1776170274586.mp4
-rw-r--r-- 1 lukas staff 1662201 14 Apr 15:43 compact_monitor_1_1776170596259.mp4
-rw-r--r-- 1 lukas staff 2518520 14 Apr 15:48 compact_monitor_1_1776170900299.mp4
-rw-r--r-- 1 lukas staff 2298616 14 Apr 15:53 compact_monitor_1_1776171206621.mp4
-rw-r--r-- 1 lukas staff 252208 14 Apr 15:58 compact_monitor_1_1776171511042.mp4
-rw-r--r-- 1 lukas staff 547163 14 Apr 16:03 compact_monitor_1_1776171816609.mp4
-rw-r--r-- 1 lukas staff 3548604 14 Apr 16:08 compact_monitor_1_1776172119791.mp4
-rw-r--r-- 1 lukas staff 1006390 14 Apr 16:13 compact_monitor_1_1776172427942.mp4
-rw-r--r-- 1 lukas staff 1168310 14 Apr 16:18 compact_monitor_1_1776172735350.mp4
-rw-r--r-- 1 lukas staff 2138214 14 Apr 16:24 compact_monitor_1_1776173046731.mp4
-rw-r--r-- 1 lukas staff 2138875 14 Apr 16:29 compact_monitor_1_1776173354299.mp4
-rw-r--r-- 1 lukas staff 336470 14 Apr 16:34 compact_monitor_1_1776173662610.mp4
-rw-r--r-- 1 lukas staff 330494 14 Apr 16:39 compact_monitor_1_1776173971011.mp4
-rw-r--r-- 1 lukas staff 574889 14 Apr 16:44 compact_monitor_1_1776174275028.mp4
-rw-r--r-- 1 lukas staff 450335 14 Apr 16:49 compact_monitor_1_1776174580719.mp4
-rw-r--r-- 1 lukas staff 452365 14 Apr 16:54 compact_monitor_1_1776174888498.mp4
-rw-r--r-- 1 lukas staff 499947 14 Apr 16:59 compact_monitor_1_1776175195769.mp4
-rw-r--r-- 1 lukas staff 501324 14 Apr 17:05 compact_monitor_1_1776175516084.mp4
-rw-r--r-- 1 lukas staff 1187862 14 Apr 17:10 compact_monitor_1_1776175831658.mp4
-rw-r--r-- 1 lukas staff 4276500 14 Apr 17:15 compact_monitor_1_1776176143265.mp4
-rw-r--r-- 1 lukas staff 3712128 14 Apr 17:21 compact_monitor_1_1776176471641.mp4
-rw-r--r-- 1 lukas staff 3520036 14 Apr 17:26 compact_monitor_1_1776176786477.mp4
-rw-r--r-- 1 lukas staff 4125306 14 Apr 17:31 compact_monitor_1_1776177099043.mp4
-rw-r--r-- 1 lukas staff 3547886 14 Apr 17:37 compact_monitor_1_1776177433201.mp4
-rw-r--r-- 1 lukas staff 2400891 14 Apr 17:42 compact_monitor_1_1776177752872.mp4
-rw-r--r-- 1 lukas staff 4689207 14 Apr 17:47 compact_monitor_1_1776178058207.mp4
-rw-r--r-- 1 lukas staff 1801277 14 Apr 17:53 compact_monitor_1_1776178379517.mp4
-rw-r--r-- 1 lukas staff 3259926 14 Apr 17:58 compact_monitor_1_1776178686281.mp4
-rw-r--r-- 1 lukas staff 1470635 14 Apr 18:03 compact_monitor_1_1776178992046.mp4
-rw-r--r-- 1 lukas staff 3102429 14 Apr 18:08 compact_monitor_1_1776179297527.mp4
-rw-r--r-- 1 lukas staff 223940 14 Apr 18:13 compact_monitor_1_1776179607218.mp4
-rw-r--r-- 1 lukas staff 871065 14 Apr 18:13 compact_monitor_1_1776179613012.mp4
-rw-r--r-- 1 lukas staff 1029083 14 Apr 18:18 compact_monitor_1_1776179929971.mp4
-rw-r--r-- 1 lukas staff 1117436 14 Apr 18:24 compact_monitor_1_1776180248849.mp4
-rw-r--r-- 1 lukas staff 987269 14 Apr 18:29 compact_monitor_1_1776180569996.mp4
-rw-r--r-- 1 lukas staff 896704 14 Apr 18:34 compact_monitor_1_1776180888049.mp4
-rw-r--r-- 1 lukas staff 1945946 14 Apr 18:40 compact_monitor_1_1776181202583.mp4
-rw-r--r-- 1 lukas staff 862072 14 Apr 18:45 compact_monitor_1_1776181526071.mp4
-rw-r--r-- 1 lukas staff 813756 14 Apr 18:50 compact_monitor_1_1776181848713.mp4
-rw-r--r-- 1 lukas staff 813226 14 Apr 18:56 compact_monitor_1_1776182167765.mp4
-rw-r--r-- 1 lukas staff 792289 14 Apr 19:01 compact_monitor_1_1776182486906.mp4
-rw-r--r-- 1 lukas staff 900197 14 Apr 19:06 compact_monitor_1_1776182803477.mp4
-rw-r--r-- 1 lukas staff 903090 14 Apr 19:12 compact_monitor_1_1776183124102.mp4
-rw-r--r-- 1 lukas staff 821885 14 Apr 19:17 compact_monitor_1_1776183446647.mp4
-rw-r--r-- 1 lukas staff 827224 14 Apr 19:22 compact_monitor_1_1776183765602.mp4
-rw-r--r-- 1 lukas staff 844977 14 Apr 19:28 compact_monitor_1_1776184085319.mp4
-rw-r--r-- 1 lukas staff 4160651 15 Apr 09:59 compact_monitor_1_1776236348162.mp4
-rw-r--r-- 1 lukas staff 2257702 15 Apr 09:59 compact_monitor_1_1776236355103.mp4
-rw-r--r-- 1 lukas staff 803789 14 Apr 09:34 compact_monitor_2_1776148467123.mp4
-rw-r--r-- 1 lukas staff 846598 14 Apr 09:39 compact_monitor_2_1776148769344.mp4
-rw-r--r-- 1 lukas staff 380187 14 Apr 09:44 compact_monitor_2_1776149072222.mp4
-rw-r--r-- 1 lukas staff 4330357 14 Apr 09:49 compact_monitor_2_1776149375411.mp4
-rw-r--r-- 1 lukas staff 5979630 14 Apr 09:54 compact_monitor_2_1776149684838.mp4
-rw-r--r-- 1 lukas staff 5685863 14 Apr 10:00 compact_monitor_2_1776149997069.mp4
-rw-r--r-- 1 lukas staff 1817789 14 Apr 10:05 compact_monitor_2_1776150308175.mp4
-rw-r--r-- 1 lukas staff 3734598 14 Apr 10:10 compact_monitor_2_1776150613826.mp4
-rw-r--r-- 1 lukas staff 7824075 14 Apr 10:15 compact_monitor_2_1776150920663.mp4
-rw-r--r-- 1 lukas staff 6299436 14 Apr 10:20 compact_monitor_2_1776151228707.mp4
-rw-r--r-- 1 lukas staff 3269154 14 Apr 10:25 compact_monitor_2_1776151537695.mp4
-rw-r--r-- 1 lukas staff 9004762 14 Apr 10:30 compact_monitor_2_1776151844100.mp4
-rw-r--r-- 1 lukas staff 4710671 14 Apr 10:35 compact_monitor_2_1776152152089.mp4
-rw-r--r-- 1 lukas staff 11173604 14 Apr 10:41 compact_monitor_2_1776152458959.mp4
-rw-r--r-- 1 lukas staff 6761014 14 Apr 10:46 compact_monitor_2_1776152773411.mp4
-rw-r--r-- 1 lukas staff 3510200 14 Apr 10:51 compact_monitor_2_1776153084189.mp4
-rw-r--r-- 1 lukas staff 5292708 14 Apr 10:56 compact_monitor_2_1776153395785.mp4
-rw-r--r-- 1 lukas staff 5487046 14 Apr 11:01 compact_monitor_2_1776153706319.mp4
-rw-r--r-- 1 lukas staff 5305685 14 Apr 11:06 compact_monitor_2_1776154014738.mp4
-rw-r--r-- 1 lukas staff 1963074 14 Apr 11:12 compact_monitor_2_1776154320980.mp4
-rw-r--r-- 1 lukas staff 2513039 14 Apr 11:17 compact_monitor_2_1776154625932.mp4
-rw-r--r-- 1 lukas staff 2532455 14 Apr 11:22 compact_monitor_2_1776154932083.mp4
-rw-r--r-- 1 lukas staff 5825408 14 Apr 11:27 compact_monitor_2_1776155240989.mp4
-rw-r--r-- 1 lukas staff 2066410 14 Apr 11:32 compact_monitor_2_1776155549265.mp4
-rw-r--r-- 1 lukas staff 3082476 14 Apr 11:37 compact_monitor_2_1776155851806.mp4
-rw-r--r-- 1 lukas staff 1587810 14 Apr 11:42 compact_monitor_2_1776156155857.mp4
-rw-r--r-- 1 lukas staff 2346718 14 Apr 11:47 compact_monitor_2_1776156460205.mp4
-rw-r--r-- 1 lukas staff 1579555 14 Apr 11:52 compact_monitor_2_1776156764898.mp4
-rw-r--r-- 1 lukas staff 5481864 14 Apr 11:57 compact_monitor_2_1776157072094.mp4
-rw-r--r-- 1 lukas staff 6527601 14 Apr 12:03 compact_monitor_2_1776157385210.mp4
-rw-r--r-- 1 lukas staff 9023055 14 Apr 12:08 compact_monitor_2_1776157705883.mp4
-rw-r--r-- 1 lukas staff 7566360 14 Apr 12:13 compact_monitor_2_1776158020136.mp4
-rw-r--r-- 1 lukas staff 8801302 14 Apr 12:19 compact_monitor_2_1776158336585.mp4
-rw-r--r-- 1 lukas staff 4139540 14 Apr 12:24 compact_monitor_2_1776158655295.mp4
-rw-r--r-- 1 lukas staff 2987994 14 Apr 12:29 compact_monitor_2_1776158968629.mp4
-rw-r--r-- 1 lukas staff 6323688 14 Apr 12:34 compact_monitor_2_1776159279327.mp4
-rw-r--r-- 1 lukas staff 2684920 14 Apr 12:40 compact_monitor_2_1776159594527.mp4
-rw-r--r-- 1 lukas staff 1646460 14 Apr 12:45 compact_monitor_2_1776159902504.mp4
-rw-r--r-- 1 lukas staff 1767063 14 Apr 12:50 compact_monitor_2_1776160206071.mp4
-rw-r--r-- 1 lukas staff 1910044 14 Apr 12:55 compact_monitor_2_1776160509646.mp4
-rw-r--r-- 1 lukas staff 5101631 14 Apr 13:00 compact_monitor_2_1776160814860.mp4
-rw-r--r-- 1 lukas staff 2487221 14 Apr 13:05 compact_monitor_2_1776161121862.mp4
-rw-r--r-- 1 lukas staff 1452868 14 Apr 13:10 compact_monitor_2_1776161425872.mp4
-rw-r--r-- 1 lukas staff 2963557 14 Apr 13:15 compact_monitor_2_1776161729470.mp4
-rw-r--r-- 1 lukas staff 984939 14 Apr 13:20 compact_monitor_2_1776162033592.mp4
-rw-r--r-- 1 lukas staff 3411829 14 Apr 13:25 compact_monitor_2_1776162337569.mp4
-rw-r--r-- 1 lukas staff 622723 14 Apr 13:30 compact_monitor_2_1776162641477.mp4
-rw-r--r-- 1 lukas staff 2472562 14 Apr 13:35 compact_monitor_2_1776162943983.mp4
-rw-r--r-- 1 lukas staff 1139489 14 Apr 13:40 compact_monitor_2_1776163247509.mp4
-rw-r--r-- 1 lukas staff 862846 14 Apr 13:45 compact_monitor_2_1776163550848.mp4
-rw-r--r-- 1 lukas staff 274959 14 Apr 13:50 compact_monitor_2_1776163854468.mp4
-rw-r--r-- 1 lukas staff 2036659 14 Apr 13:55 compact_monitor_2_1776164156817.mp4
-rw-r--r-- 1 lukas staff 6134905 14 Apr 14:01 compact_monitor_2_1776164461879.mp4
-rw-r--r-- 1 lukas staff 9022378 14 Apr 14:06 compact_monitor_2_1776164770881.mp4
-rw-r--r-- 1 lukas staff 4566763 14 Apr 14:15 compact_monitor_2_1776165320959.mp4
-rw-r--r-- 1 lukas staff 462447 14 Apr 14:20 compact_monitor_2_1776165629627.mp4
-rw-r--r-- 1 lukas staff 709149 14 Apr 14:25 compact_monitor_2_1776165933147.mp4
-rw-r--r-- 1 lukas staff 4478027 14 Apr 14:30 compact_monitor_2_1776166241146.mp4
-rw-r--r-- 1 lukas staff 7488847 14 Apr 14:36 compact_monitor_2_1776166555947.mp4
-rw-r--r-- 1 lukas staff 7883274 14 Apr 14:41 compact_monitor_2_1776166866538.mp4
-rw-r--r-- 1 lukas staff 2869256 14 Apr 14:46 compact_monitor_2_1776167179562.mp4
-rw-r--r-- 1 lukas staff 3068440 14 Apr 14:51 compact_monitor_2_1776167487518.mp4
-rw-r--r-- 1 lukas staff 1816545 14 Apr 14:56 compact_monitor_2_1776167799896.mp4
-rw-r--r-- 1 lukas staff 3180474 14 Apr 15:01 compact_monitor_2_1776168109470.mp4
-rw-r--r-- 1 lukas staff 3774140 14 Apr 15:07 compact_monitor_2_1776168415670.mp4
-rw-r--r-- 1 lukas staff 4536363 14 Apr 15:12 compact_monitor_2_1776168725137.mp4
-rw-r--r-- 1 lukas staff 2387221 14 Apr 15:17 compact_monitor_2_1776169033283.mp4
-rw-r--r-- 1 lukas staff 2605350 14 Apr 15:22 compact_monitor_2_1776169338888.mp4
-rw-r--r-- 1 lukas staff 6906038 14 Apr 15:27 compact_monitor_2_1776169645977.mp4
-rw-r--r-- 1 lukas staff 5738495 14 Apr 15:32 compact_monitor_2_1776169965047.mp4
-rw-r--r-- 1 lukas staff 5595644 14 Apr 15:38 compact_monitor_2_1776170281359.mp4
-rw-r--r-- 1 lukas staff 584749 14 Apr 15:43 compact_monitor_2_1776170598047.mp4
-rw-r--r-- 1 lukas staff 2633541 14 Apr 15:48 compact_monitor_2_1776170903735.mp4
-rw-r--r-- 1 lukas staff 770182 14 Apr 15:53 compact_monitor_2_1776171208825.mp4
-rw-r--r-- 1 lukas staff 1658362 14 Apr 15:58 compact_monitor_2_1776171512473.mp4
-rw-r--r-- 1 lukas staff 295793 14 Apr 16:03 compact_monitor_2_1776171817959.mp4
-rw-r--r-- 1 lukas staff 3540965 14 Apr 16:08 compact_monitor_2_1776172123631.mp4
-rw-r--r-- 1 lukas staff 3589660 14 Apr 16:13 compact_monitor_2_1776172430586.mp4
-rw-r--r-- 1 lukas staff 4735044 14 Apr 16:19 compact_monitor_2_1776172739210.mp4
-rw-r--r-- 1 lukas staff 4951644 14 Apr 16:24 compact_monitor_2_1776173049122.mp4
-rw-r--r-- 1 lukas staff 5939102 14 Apr 16:29 compact_monitor_2_1776173357170.mp4
-rw-r--r-- 1 lukas staff 2549744 14 Apr 16:34 compact_monitor_2_1776173665142.mp4
-rw-r--r-- 1 lukas staff 996149 14 Apr 16:39 compact_monitor_2_1776173972456.mp4
-rw-r--r-- 1 lukas staff 2663346 14 Apr 16:44 compact_monitor_2_1776174276676.mp4
-rw-r--r-- 1 lukas staff 1776844 14 Apr 16:49 compact_monitor_2_1776174582351.mp4
-rw-r--r-- 1 lukas staff 1669202 14 Apr 16:54 compact_monitor_2_1776174889930.mp4
-rw-r--r-- 1 lukas staff 5414828 14 Apr 17:00 compact_monitor_2_1776175198918.mp4
-rw-r--r-- 1 lukas staff 5727100 14 Apr 17:05 compact_monitor_2_1776175518133.mp4
-rw-r--r-- 1 lukas staff 6080220 14 Apr 17:10 compact_monitor_2_1776175835473.mp4
-rw-r--r-- 1 lukas staff 3631681 14 Apr 17:16 compact_monitor_2_1776176159421.mp4
-rw-r--r-- 1 lukas staff 1861818 14 Apr 17:21 compact_monitor_2_1776176479999.mp4
-rw-r--r-- 1 lukas staff 1471229 14 Apr 17:26 compact_monitor_2_1776176794129.mp4
-rw-r--r-- 1 lukas staff 1792667 14 Apr 17:32 compact_monitor_2_1776177119122.mp4
-rw-r--r-- 1 lukas staff 2398088 14 Apr 17:37 compact_monitor_2_1776177447361.mp4
-rw-r--r-- 1 lukas staff 1873376 14 Apr 17:42 compact_monitor_2_1776177755837.mp4
-rw-r--r-- 1 lukas staff 3686281 14 Apr 17:47 compact_monitor_2_1776178069540.mp4
-rw-r--r-- 1 lukas staff 1842517 14 Apr 17:53 compact_monitor_2_1776178382342.mp4
-rw-r--r-- 1 lukas staff 2595005 14 Apr 17:58 compact_monitor_2_1776178688999.mp4
-rw-r--r-- 1 lukas staff 3352578 14 Apr 18:03 compact_monitor_2_1776178994368.mp4
-rw-r--r-- 1 lukas staff 7474140 14 Apr 18:08 compact_monitor_2_1776179301874.mp4
-rw-r--r-- 1 lukas staff 18300640 14 Apr 18:13 compact_monitor_2_1776179614376.mp4
-rw-r--r-- 1 lukas staff 8302944 14 Apr 18:13 compact_monitor_2_1776179625270.mp4
-rw-r--r-- 1 lukas staff 27338956 14 Apr 18:19 compact_monitor_2_1776179934590.mp4
-rw-r--r-- 1 lukas staff 1061768 14 Apr 18:19 compact_monitor_2_1776179947276.mp4
-rw-r--r-- 1 lukas staff 24282145 14 Apr 18:24 compact_monitor_2_1776180254284.mp4
-rw-r--r-- 1 lukas staff 5647384 14 Apr 18:24 compact_monitor_2_1776180266890.mp4
-rw-r--r-- 1 lukas staff 32748524 14 Apr 18:29 compact_monitor_2_1776180574284.mp4
-rw-r--r-- 1 lukas staff 25769571 14 Apr 18:35 compact_monitor_2_1776180892046.mp4
-rw-r--r-- 1 lukas staff 41983533 14 Apr 18:40 compact_monitor_2_1776181207025.mp4
-rw-r--r-- 1 lukas staff 3365850 14 Apr 18:40 compact_monitor_2_1776181223864.mp4
-rw-r--r-- 1 lukas staff 40919053 14 Apr 18:45 compact_monitor_2_1776181530742.mp4
-rw-r--r-- 1 lukas staff 3870375 14 Apr 18:45 compact_monitor_2_1776181546619.mp4
-rw-r--r-- 1 lukas staff 36175005 14 Apr 18:51 compact_monitor_2_1776181853124.mp4
-rw-r--r-- 1 lukas staff 36717883 14 Apr 18:56 compact_monitor_2_1776182171990.mp4
-rw-r--r-- 1 lukas staff 27140350 14 Apr 19:01 compact_monitor_2_1776182491150.mp4
-rw-r--r-- 1 lukas staff 20914618 14 Apr 19:06 compact_monitor_2_1776182808796.mp4
-rw-r--r-- 1 lukas staff 4716229 14 Apr 19:07 compact_monitor_2_1776182820060.mp4
-rw-r--r-- 1 lukas staff 24788277 14 Apr 19:12 compact_monitor_2_1776183129006.mp4
-rw-r--r-- 1 lukas staff 7974655 14 Apr 19:12 compact_monitor_2_1776183141483.mp4
-rw-r--r-- 1 lukas staff 22872307 14 Apr 19:17 compact_monitor_2_1776183451042.mp4
-rw-r--r-- 1 lukas staff 3283631 14 Apr 19:17 compact_monitor_2_1776183462827.mp4
-rw-r--r-- 1 lukas staff 32308259 14 Apr 19:23 compact_monitor_2_1776183769519.mp4
-rw-r--r-- 1 lukas staff 2847482 14 Apr 19:23 compact_monitor_2_1776183783534.mp4
-rw-r--r-- 1 lukas staff 36823186 14 Apr 19:28 compact_monitor_2_1776184089558.mp4
-rw-r--r-- 1 lukas staff 5825352 14 Apr 19:28 compact_monitor_2_1776184104421.mp4
-rw-r--r-- 1 lukas staff 30437061 15 Apr 09:59 compact_monitor_2_1776236357169.mp4
-rw-r--r-- 1 lukas staff 4350302 15 Apr 09:59 compact_monitor_2_1776236373794.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 11:58:00] ========================================
[2026-04-18 11:58:00] Screenpipe sync starting for: 2026-04-14
[2026-04-18 11:58:00] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 11:58:04] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync
Data dir: OK (245 files, 1.0G)
[+00m04s] ▶ Copying data folder for 2026-04-14
rsync 2026-04-14/ → NAS ✗ 531 / 245 files
[2026-04-18 11:58:09] Archive DB size: 3.0G
[2026-04-18 11:58:09] Total time: 0m9s
[2026-04-18 11:58:09] Sync complete for 2026-04-14
[2026-04-18 11:58:09] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 11:59:41] ========================================
[2026-04-18 11:59:41] Screenpipe sync starting for: 2026-04-14
[2026-04-18 11:59:41] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 11:59:45] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync
Data dir: OK (245 files, 1.0G)
[+00m04s] ▶ Copying data folder for 2026-04-14
rsync 2026-04-14/ → NAS ✓ 2m07s (245 files, 1.0G)
[2026-04-18 12:01:52] Archive DB size: 3.0G
[2026-04-18 12:01:52] Total time: 2m11s
[2026-04-18 12:01:52] Sync complete for 2026-04-14
[2026-04-18 12:01:52] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 12:03:13] ========================================
[2026-04-18 12:03:13] Screenpipe sync starting for: 2026-04-14
[2026-04-18 12:03:13] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/screenpipe
Archive DB: will be created
Data dir: OK (245 files, 1.0G)
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)
Parse error near line 3: unknown database nas
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames
error here ---^
Parse error near line 4: unknown database nas
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements
error here ---^
Parse error near line 5: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events
error here ---^
Parse error near line 6: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text
error here ---^
Parse error near line 7: unknown database nas
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks
error here ---^
Parse error near line 8: unknown database nas
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings
error here ---^
Runtime error near line 9: no such database: nas
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ls /Volumes/screenpipe/
ls: /Volumes/screenpipe/: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ cd /Volumes
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 96
drwxr-xr-x 6 root wheel 192 18 Apr 11:17 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
lrwxr-xr-x 1 root wheel 1 16 Apr 15:43 Macintosh HD -> /
drwx------ 1 lukas staff 16384 11 Apr 15:46 Test
drwx------ 1 lukas staff 16384 13 Mar 10:17 Work
drwx------ 1 lukas staff 16384 17 Apr 21:29 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls -la /Volumes/screenpipe/
total 0
ls: /Volumes/screenpipe/: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ mount | grep screenpipe
//Adm1n@DXP4800PLUS-B5F8/screenpipe on /Volumes/screenpipe (smbfs, nodev, nosuid, mounted by lukas)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ umount /Volumes/screenpipe
umount: unmount(/Volumes/screenpipe): Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 12:06:45] ========================================
[2026-04-18 12:06:45] Screenpipe sync starting for: 2026-04-14
[2026-04-18 12:06:45] ==============...
|
NULL
|
|
51032
|
1100
|
35
|
2026-04-18T10:39:45.335625+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-18/1776 /Users/lukas/.screenpipe/data/data/2026-04-18/1776508785335_m2.jpg...
|
Claude
|
Claude
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Open sidebar
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Customize
Artifacts
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Reviewing recent conversation highlights
More options for Reviewing recent conversation highlights
Screenpipe WAL processing when stopped
More options for Screenpipe WAL processing when stopped
Mac aliases not recognized
More options for Mac aliases not recognized
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
More options for Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
More options for Linux SQLite UI for NAS
Claude API 500 internal server error
More options for Claude API 500 internal server error
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
More options for eGPU compatibility with Mac mini and Studio
Understanding OpenRouter API gateway
More options for Understanding OpenRouter API gateway
Screenpipe 14-day retention explained
More options for Screenpipe 14-day retention explained
Reddit homepage feed overview
More options for Reddit homepage feed overview
Docker container not visible in console
More options for Docker container not visible in console
DIA browser RAM configuration
More options for DIA browser RAM configuration
Screenpipe company background
More options for Screenpipe company background
DSK Bank Bulgaria secure investing explained
More options for DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
More options for Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
More options for Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
More options for Chromecast remote volume buttons not working
Screenpipe free version guide
More options for Screenpipe free version guide
Updated to 1.3109.0
Relaunch to apply
Relaunch
Lukas Kovalik
Lukas Kovalik
Get apps and extensions
Screenpipe WAL processing when stopped
Screenpipe WAL processing when stopped
More options for Screenpipe WAL processing when stopped
Open sidebar
Share chat
how to make the screenpipe wal being processed. It seems it is not working when the screenpipe is stopped
17 Apr
Retry
Edit
Copy
WAL (Write-Ahead Log) in SQLite needs to be checkpointed to merge pending data into the main database file. When Screenpipe stops, the WAL may not be fully checkpointed.
The issue
The issue
SQLite WAL mode keeps a separate
.sqlite-wal
file. Data there is "pending" until a checkpoint runs. Screenpipe normally handles this while running, but if it stops abruptly or you query while it's stopped, the WAL data may appear missing to external readers.
Solutions
Solutions
Option 1: Force a checkpoint manually (safest)
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA wal_checkpoint(TRUNCATE);"
This flushes all WAL data into the main DB file and truncates the WAL. Run this after Screenpipe stops.
Option 2: Make your queries WAL-aware
When querying with
sqlite3
directly, open in WAL mode explicitly so it reads both the DB and WAL together:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA journal_mode=WAL; SELECT ..."
Actually,
sqlite3
already reads WAL automatically — but only if the WAL file is present and not corrupted. The real fix is ensuring the connection sees both files.
Option 3: Add to your
spq
alias
Update the alias to always checkpoint first:
Copy to clipboard
bash
alias
spq
=
'sqlite3 -json ~/.screenpipe/db.sqlite'
alias
spqcheckpoint
=
'sqlite3 ~/.screenpipe/db.sqlite "PRAGMA wal_checkpoint(TRUNCATE);" && echo "WAL checkpointed"'
Option 4: Checkpoint on Screenpipe shutdown (via a wrapper script)
If you start Screenpipe via a script, wrap it:
Copy to clipboard
bash
#!/bin/bash
screenpipe
"
$@
"
# On exit (Ctrl+C or normal stop), checkpoint WAL
echo
"Screenpipe stopped. Checkpointing WAL..."
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA wal_checkpoint(TRUNCATE);"
echo
"Done."
Quick diagnosis
Quick diagnosis
Check if a WAL file exists and its size:
Copy to clipboard
bash
ls
-lh ~/.screenpipe/db.sqlite*
If
db.sqlite-wal
is large (MBs), that's unprocessed data. After checkpointing it should shrink to near 0.
Recommended approach:
Use Option 1 whenever you want to query after stopping Screenpipe, and optionally wrap it in your
screenpipe-day.sh
report script at the top.
Copy
Give positive feedback
Give negative feedback
Retry
what about jpg to mp4 conversion
17 Apr
Retry
Edit
Copy
That's unrelated to Screenpipe — are you asking about a general tool/command for converting a sequence of JPG images into an MP4 video?
If so,
FFmpeg
is the standard tool:
Image sequence (e.g. frame001.jpg, frame002.jpg...):
Copy to clipboard
bash
ffmpeg -framerate
24
-i frame%03d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4
Single JPG as a still video (e.g. 5 seconds):
Copy to clipboard
bash
ffmpeg -loop
1
-i input.jpg -t
5
-c:v libx264 -pix_fmt yuv420p output.mp4
All JPGs in a folder (sorted by name):
Copy to clipboard
bash
ffmpeg -framerate
24
-pattern_type glob -i
'*.jpg'
-c:v libx264 -pix_fmt yuv420p output.mp4
Install on Mac:
Copy to clipboard
bash...
|
[{"role":"AXLink","text":& [{"role":"AXLink","text":"Skip to content","depth":14,"bounds":{"left":0.034765624,"top":0.033333335,"width":0.000390625,"height":0.0013888889},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Skip to content","depth":15,"bounds":{"left":0.034765624,"top":0.033333335,"width":0.044921875,"height":0.0013888889},"role_description":"text"},{"role":"AXStaticText","text":"Click to collapse","depth":16,"bounds":{"left":0.1203125,"top":0.072916664,"width":0.036328126,"height":0.010416667},"role_description":"text"},{"role":"AXStaticText","text":"⌘B","depth":16,"bounds":{"left":0.15859374,"top":0.072916664,"width":0.0078125,"height":0.010416667},"role_description":"text"},{"role":"AXStaticText","text":"Drag to resize","depth":16,"bounds":{"left":0.1203125,"top":0.083333336,"width":0.03046875,"height":0.010416667},"role_description":"text"},{"role":"AXButton","text":"Open sidebar","depth":14,"bounds":{"left":0.03515625,"top":0.024305556,"width":0.0109375,"height":0.019444445},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat","depth":16,"bounds":{"left":0.005859375,"top":0.047916666,"width":0.02578125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cowork","depth":16,"bounds":{"left":0.03203125,"top":0.047916666,"width":0.0109375,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":16,"bounds":{"left":0.043359376,"top":0.047916666,"width":0.0109375,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New chat ⌘N","depth":16,"bounds":{"left":0.00546875,"top":0.07361111,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"New chat","depth":17,"bounds":{"left":0.016796876,"top":0.07638889,"width":0.02265625,"height":0.011805556},"role_description":"text"},{"role":"AXStaticText","text":"⌘N","depth":18,"bounds":{"left":0.091796875,"top":0.077083334,"width":0.008203125,"height":0.011111111},"role_description":"text"},{"role":"AXButton","text":"Projects","depth":16,"bounds":{"left":0.00546875,"top":0.09166667,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":16,"bounds":{"left":0.00546875,"top":0.10902778,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Artifacts","depth":16,"bounds":{"left":0.00546875,"top":0.12708333,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pinned","depth":16,"bounds":{"left":0.0078125,"top":0.16111112,"width":0.09375,"height":0.011111111},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Bulgarian citizenship application process for EU residents","depth":17,"bounds":{"left":0.00546875,"top":0.175,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Bulgarian citizenship application process for EU residents","depth":18,"bounds":{"left":0.09335937,"top":0.17777778,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Dawarich location tracking project","depth":17,"bounds":{"left":0.00546875,"top":0.19375,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Dawarich location tracking project","depth":18,"bounds":{"left":0.09335937,"top":0.19652778,"width":0.007421875,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Recents","depth":16,"bounds":{"left":0.0078125,"top":0.21944444,"width":0.06992187,"height":0.011805556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"View all","depth":16,"bounds":{"left":0.07890625,"top":0.21944444,"width":0.02265625,"height":0.011805556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reviewing recent conversation highlights","depth":17,"bounds":{"left":0.00546875,"top":0.23333333,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Reviewing recent conversation highlights","depth":18,"bounds":{"left":0.09335937,"top":0.2361111,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe WAL processing when stopped","depth":17,"bounds":{"left":0.00546875,"top":0.25208333,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe WAL processing when stopped","depth":18,"bounds":{"left":0.09335937,"top":0.25486112,"width":0.007421875,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Mac aliases not recognized","depth":17,"bounds":{"left":0.00546875,"top":0.2701389,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Mac aliases not recognized","depth":18,"bounds":{"left":0.09335937,"top":0.27291667,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Boosteroid still recording despite ignored windows setting","depth":17,"bounds":{"left":0.00546875,"top":0.2888889,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Boosteroid still recording despite ignored windows setting","depth":18,"bounds":{"left":0.09335937,"top":0.29166666,"width":0.007421875,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Missing JavaScript promise in authorization response","depth":17,"bounds":{"left":0.00546875,"top":0.30694443,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Missing JavaScript promise in authorization response","depth":18,"bounds":{"left":0.09335937,"top":0.30972221,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Linux SQLite UI for NAS","depth":17,"bounds":{"left":0.00546875,"top":0.32569444,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Linux SQLite UI for NAS","depth":18,"bounds":{"left":0.09335937,"top":0.32847223,"width":0.007421875,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Claude API 500 internal server error","depth":17,"bounds":{"left":0.00546875,"top":0.34375,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Claude API 500 internal server error","depth":18,"bounds":{"left":0.09335937,"top":0.34652779,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe query capabilities and usage","depth":17,"bounds":{"left":0.00546875,"top":0.3625,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe query capabilities and usage","depth":18,"bounds":{"left":0.09335937,"top":0.36527777,"width":0.007421875,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"eGPU compatibility with Mac mini and Studio","depth":17,"bounds":{"left":0.00546875,"top":0.38055557,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for eGPU compatibility with Mac mini and Studio","depth":18,"bounds":{"left":0.09335937,"top":0.38333333,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Understanding OpenRouter API gateway","depth":17,"bounds":{"left":0.00546875,"top":0.39930555,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Understanding OpenRouter API gateway","depth":18,"bounds":{"left":0.09335937,"top":0.40208334,"width":0.007421875,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe 14-day retention explained","depth":17,"bounds":{"left":0.00546875,"top":0.4173611,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe 14-day retention explained","depth":18,"bounds":{"left":0.09335937,"top":0.4201389,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reddit homepage feed overview","depth":17,"bounds":{"left":0.00546875,"top":0.43611112,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Reddit homepage feed overview","depth":18,"bounds":{"left":0.09335937,"top":0.43819445,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Docker container not visible in console","depth":17,"bounds":{"left":0.00546875,"top":0.45416668,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Docker container not visible in console","depth":18,"bounds":{"left":0.09335937,"top":0.45694444,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"DIA browser RAM configuration","depth":17,"bounds":{"left":0.00546875,"top":0.4722222,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for DIA browser RAM configuration","depth":18,"bounds":{"left":0.09335937,"top":0.475,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe company background","depth":17,"bounds":{"left":0.00546875,"top":0.49097222,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe company background","depth":18,"bounds":{"left":0.09335937,"top":0.49375,"width":0.007421875,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"DSK Bank Bulgaria secure investing explained","depth":17,"bounds":{"left":0.00546875,"top":0.5090278,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for DSK Bank Bulgaria secure investing explained","depth":18,"bounds":{"left":0.09335937,"top":0.51180553,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Building a comprehensive personal homelab system","depth":17,"bounds":{"left":0.00546875,"top":0.5277778,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Building a comprehensive personal homelab system","depth":18,"bounds":{"left":0.09335937,"top":0.53055555,"width":0.007421875,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Importing Google Timeline data to Owntracks","depth":17,"bounds":{"left":0.00546875,"top":0.54583335,"width":0.096875,"height":0.0048611113},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Importing Google Timeline data to Owntracks","depth":18,"bounds":{"left":0.09335937,"top":0.5486111,"width":0.007421875,"height":0.0020833334},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chromecast remote volume buttons not working","depth":17,"bounds":{"left":0.00546875,"top":0.54930556,"width":0.096875,"height":0.0013888889},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Chromecast remote volume buttons not working","depth":18,"bounds":{"left":0.09335937,"top":0.54930556,"width":0.007421875,"height":0.0013888889},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe free version guide","depth":17,"bounds":{"left":0.00546875,"top":0.54930556,"width":0.096875,"height":0.0013888889},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe free version guide","depth":18,"bounds":{"left":0.09335937,"top":0.54930556,"width":0.007421875,"height":0.0013888889},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Updated to 1.3109.0","depth":16,"bounds":{"left":0.03125,"top":0.61388886,"width":0.049609374,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"Relaunch to apply","depth":16,"bounds":{"left":0.036328126,"top":0.6284722,"width":0.0390625,"height":0.011111111},"role_description":"text"},{"role":"AXButton","text":"Relaunch","depth":16,"bounds":{"left":0.010546875,"top":0.6472222,"width":0.09101562,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Lukas Kovalik","depth":16,"bounds":{"left":0.00546875,"top":0.69166666,"width":0.044140626,"height":0.017361112},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"bounds":{"left":0.016796876,"top":0.6944444,"width":0.0296875,"height":0.011111111},"role_description":"text"},{"role":"AXButton","text":"Get apps and extensions","depth":15,"bounds":{"left":0.096875,"top":0.6923611,"width":0.009765625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe WAL processing when stopped","depth":19,"bounds":{"left":0.04921875,"top":0.024305556,"width":0.1171875,"height":0.019444445},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe WAL processing when stopped","depth":21,"bounds":{"left":0.05234375,"top":0.027083334,"width":0.1109375,"height":0.013194445},"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Screenpipe WAL processing when stopped","depth":19,"bounds":{"left":0.16679688,"top":0.024305556,"width":0.011328125,"height":0.019444445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open sidebar","depth":21,"bounds":{"left":0.96875,"top":0.022916667,"width":0.0125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share chat","depth":21,"bounds":{"left":0.9828125,"top":0.022916667,"width":0.0125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"how to make the screenpipe wal being processed. It seems it is not working when the screenpipe is stopped","depth":24,"bounds":{"left":0.403125,"top":0.017361112,"width":0.22109374,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"17 Apr","depth":22,"bounds":{"left":0.5875,"top":0.017361112,"width":0.013671875,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Retry","depth":22,"bounds":{"left":0.6039063,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":22,"bounds":{"left":0.61640626,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.62890625,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"WAL (Write-Ahead Log) in SQLite needs to be checkpointed to merge pending data into the main database file. When Screenpipe stops, the WAL may not be fully checkpointed.","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.26367188,"height":0.00069444446},"role_description":"text"},{"role":"AXHeading","text":"The issue","depth":22,"bounds":{"left":0.35390624,"top":0.017361112,"width":0.2878906,"height":0.00069444446},"role_description":"heading"},{"role":"AXStaticText","text":"The issue","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.032421876,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"SQLite WAL mode keeps a separate","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.10390625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":".sqlite-wal","depth":24,"bounds":{"left":0.4625,"top":0.017361112,"width":0.0375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"file. Data there is \"pending\" until a checkpoint runs. Screenpipe normally handles this while running, but if it stops abruptly or you query while it's stopped, the WAL data may appear missing to external readers.","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.26210937,"height":0.00069444446},"role_description":"text"},{"role":"AXHeading","text":"Solutions","depth":22,"bounds":{"left":0.35390624,"top":0.017361112,"width":0.2878906,"height":0.00069444446},"role_description":"heading"},{"role":"AXStaticText","text":"Solutions","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.032421876,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Option 1: Force a checkpoint manually (safest)","depth":24,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.13828126,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"bounds":{"left":0.62539065,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":25,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.10546875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"PRAGMA wal_checkpoint(TRUNCATE);\"","depth":25,"bounds":{"left":0.46484375,"top":0.017361112,"width":0.11171875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"This flushes all WAL data into the main DB file and truncates the WAL. Run this after Screenpipe stops.","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.24296875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Option 2: Make your queries WAL-aware","depth":24,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.12070312,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"When querying with","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.061328124,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3","depth":24,"bounds":{"left":0.41992188,"top":0.017361112,"width":0.02421875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"directly, open in WAL mode explicitly so it reads both the DB and WAL together:","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.2640625,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"bounds":{"left":0.62539065,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":25,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.10546875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"PRAGMA journal_mode=WAL; SELECT ...\"","depth":25,"bounds":{"left":0.46484375,"top":0.017361112,"width":0.121875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Actually,","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.02734375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3","depth":24,"bounds":{"left":0.3859375,"top":0.017361112,"width":0.023828125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"already reads WAL automatically — but only if the WAL file is present and not corrupted. The real fix is ensuring the connection sees both files.","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.26757812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Option 3: Add to your","depth":24,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.06484375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"spq","depth":25,"bounds":{"left":0.4234375,"top":0.017361112,"width":0.010546875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"alias","depth":24,"bounds":{"left":0.43554688,"top":0.017361112,"width":0.015625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Update the alias to always checkpoint first:","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.12265625,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"bounds":{"left":0.62539065,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"alias","depth":26,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.016796876,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.3761719,"top":0.017361112,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"spq","depth":26,"bounds":{"left":0.37929687,"top":0.017361112,"width":0.010546875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"=","depth":26,"bounds":{"left":0.3894531,"top":0.017361112,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"'sqlite3 -json ~/.screenpipe/db.sqlite'","depth":26,"bounds":{"left":0.39257812,"top":0.017361112,"width":0.12851563,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.640625,"top":0.017361112,"width":0.00078125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"alias","depth":26,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.016796876,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.3761719,"top":0.017361112,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"spqcheckpoint","depth":26,"bounds":{"left":0.37929687,"top":0.017361112,"width":0.043359376,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"=","depth":26,"bounds":{"left":0.42226562,"top":0.017361112,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"'sqlite3 ~/.screenpipe/db.sqlite \"PRAGMA wal_checkpoint(TRUNCATE);\" && echo \"WAL checkpointed\"'","depth":26,"bounds":{"left":0.42539063,"top":0.017361112,"width":0.21601562,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Option 4: Checkpoint on Screenpipe shutdown (via a wrapper script)","depth":24,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.20507812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"If you start Screenpipe via a script, wrap it:","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.12226562,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"bounds":{"left":0.62539065,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"#!/bin/bash","depth":25,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.036328126,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe","depth":25,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.036328126,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"","depth":25,"bounds":{"left":0.39570314,"top":0.017361112,"width":0.00390625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"$@","depth":25,"bounds":{"left":0.39921874,"top":0.017361112,"width":0.00703125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"","depth":25,"bounds":{"left":0.40585938,"top":0.017361112,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"# On exit (Ctrl+C or normal stop), checkpoint WAL","depth":25,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.16132812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"echo","depth":25,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.013671875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.37304688,"top":0.017361112,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"Screenpipe stopped. Checkpointing WAL...\"","depth":25,"bounds":{"left":0.3761719,"top":0.017361112,"width":0.13828126,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":25,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.10546875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"PRAGMA wal_checkpoint(TRUNCATE);\"","depth":25,"bounds":{"left":0.46484375,"top":0.017361112,"width":0.11171875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"echo","depth":25,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.013671875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"bounds":{"left":0.37304688,"top":0.017361112,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"Done.\"","depth":25,"bounds":{"left":0.3761719,"top":0.017361112,"width":0.0234375,"height":0.00069444446},"role_description":"text"},{"role":"AXHeading","text":"Quick diagnosis","depth":22,"bounds":{"left":0.35390624,"top":0.017361112,"width":0.2878906,"height":0.00069444446},"role_description":"heading"},{"role":"AXStaticText","text":"Quick diagnosis","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.054296874,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Check if a WAL file exists and its size:","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.1078125,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"bounds":{"left":0.62539065,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"ls","depth":25,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.00703125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"-lh ~/.screenpipe/db.sqlite*","depth":25,"bounds":{"left":0.36640626,"top":0.017361112,"width":0.0953125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"If","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.005859375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":24,"bounds":{"left":0.36445314,"top":0.017361112,"width":0.04453125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"is large (MBs), that's unprocessed data. After checkpointing it should shrink to near 0.","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.25351563,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Recommended approach:","depth":24,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.07695313,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Use Option 1 whenever you want to query after stopping Screenpipe, and optionally wrap it in your","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.24023438,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"screenpipe-day.sh","depth":24,"bounds":{"left":0.48046875,"top":0.017361112,"width":0.0578125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"report script at the top.","depth":23,"bounds":{"left":0.53984374,"top":0.017361112,"width":0.06679688,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.35390624,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give positive feedback","depth":22,"bounds":{"left":0.36640626,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give negative feedback","depth":22,"bounds":{"left":0.37890625,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":22,"bounds":{"left":0.39140624,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"what about jpg to mp4 conversion","depth":24,"bounds":{"left":0.5359375,"top":0.017361112,"width":0.099609375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"17 Apr","depth":22,"bounds":{"left":0.5875,"top":0.017361112,"width":0.013671875,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Retry","depth":22,"bounds":{"left":0.6039063,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":22,"bounds":{"left":0.61640626,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.62890625,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"That's unrelated to Screenpipe — are you asking about a general tool/command for converting a sequence of JPG images into an MP4 video?","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.27070314,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"If so,","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.01484375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"FFmpeg","depth":24,"bounds":{"left":0.37148437,"top":0.017361112,"width":0.02578125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"is the standard tool:","depth":23,"bounds":{"left":0.396875,"top":0.017361112,"width":0.0578125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Image sequence (e.g. frame001.jpg, frame002.jpg...):","depth":24,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.15585938,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"bounds":{"left":0.62539065,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"ffmpeg -framerate","depth":25,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.059375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"24","depth":25,"bounds":{"left":0.41875,"top":0.017361112,"width":0.00703125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"-i frame%03d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4","depth":25,"bounds":{"left":0.42539063,"top":0.017361112,"width":0.190625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Single JPG as a still video (e.g. 5 seconds):","depth":24,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.12421875,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"bounds":{"left":0.62539065,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"ffmpeg -loop","depth":25,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.04296875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"bounds":{"left":0.40234375,"top":0.017361112,"width":0.00390625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"-i input.jpg -t","depth":25,"bounds":{"left":0.40585938,"top":0.017361112,"width":0.055859376,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"5","depth":25,"bounds":{"left":0.46132812,"top":0.017361112,"width":0.00390625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"-c:v libx264 -pix_fmt yuv420p output.mp4","depth":25,"bounds":{"left":0.46484375,"top":0.017361112,"width":0.13476562,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"All JPGs in a folder (sorted by name):","depth":24,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.1109375,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"bounds":{"left":0.62539065,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"ffmpeg -framerate","depth":26,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.059375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"24","depth":26,"bounds":{"left":0.41875,"top":0.017361112,"width":0.00703125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"-pattern_type glob -i","depth":26,"bounds":{"left":0.42539063,"top":0.017361112,"width":0.07578125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"'*.jpg'","depth":26,"bounds":{"left":0.50078124,"top":0.017361112,"width":0.0234375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"-c:v libx264 -pix_fmt yuv420p output.mp4","depth":26,"bounds":{"left":0.52382815,"top":0.017361112,"width":0.11757813,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Install on Mac:","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.042578124,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"bounds":{"left":0.62539065,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"}]...
|
-3558812600627598527
|
-8412761088613066702
|
app_switch
|
accessibility
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Open sidebar
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Customize
Artifacts
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Reviewing recent conversation highlights
More options for Reviewing recent conversation highlights
Screenpipe WAL processing when stopped
More options for Screenpipe WAL processing when stopped
Mac aliases not recognized
More options for Mac aliases not recognized
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
More options for Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
More options for Linux SQLite UI for NAS
Claude API 500 internal server error
More options for Claude API 500 internal server error
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
More options for eGPU compatibility with Mac mini and Studio
Understanding OpenRouter API gateway
More options for Understanding OpenRouter API gateway
Screenpipe 14-day retention explained
More options for Screenpipe 14-day retention explained
Reddit homepage feed overview
More options for Reddit homepage feed overview
Docker container not visible in console
More options for Docker container not visible in console
DIA browser RAM configuration
More options for DIA browser RAM configuration
Screenpipe company background
More options for Screenpipe company background
DSK Bank Bulgaria secure investing explained
More options for DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
More options for Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
More options for Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
More options for Chromecast remote volume buttons not working
Screenpipe free version guide
More options for Screenpipe free version guide
Updated to 1.3109.0
Relaunch to apply
Relaunch
Lukas Kovalik
Lukas Kovalik
Get apps and extensions
Screenpipe WAL processing when stopped
Screenpipe WAL processing when stopped
More options for Screenpipe WAL processing when stopped
Open sidebar
Share chat
how to make the screenpipe wal being processed. It seems it is not working when the screenpipe is stopped
17 Apr
Retry
Edit
Copy
WAL (Write-Ahead Log) in SQLite needs to be checkpointed to merge pending data into the main database file. When Screenpipe stops, the WAL may not be fully checkpointed.
The issue
The issue
SQLite WAL mode keeps a separate
.sqlite-wal
file. Data there is "pending" until a checkpoint runs. Screenpipe normally handles this while running, but if it stops abruptly or you query while it's stopped, the WAL data may appear missing to external readers.
Solutions
Solutions
Option 1: Force a checkpoint manually (safest)
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA wal_checkpoint(TRUNCATE);"
This flushes all WAL data into the main DB file and truncates the WAL. Run this after Screenpipe stops.
Option 2: Make your queries WAL-aware
When querying with
sqlite3
directly, open in WAL mode explicitly so it reads both the DB and WAL together:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA journal_mode=WAL; SELECT ..."
Actually,
sqlite3
already reads WAL automatically — but only if the WAL file is present and not corrupted. The real fix is ensuring the connection sees both files.
Option 3: Add to your
spq
alias
Update the alias to always checkpoint first:
Copy to clipboard
bash
alias
spq
=
'sqlite3 -json ~/.screenpipe/db.sqlite'
alias
spqcheckpoint
=
'sqlite3 ~/.screenpipe/db.sqlite "PRAGMA wal_checkpoint(TRUNCATE);" && echo "WAL checkpointed"'
Option 4: Checkpoint on Screenpipe shutdown (via a wrapper script)
If you start Screenpipe via a script, wrap it:
Copy to clipboard
bash
#!/bin/bash
screenpipe
"
$@
"
# On exit (Ctrl+C or normal stop), checkpoint WAL
echo
"Screenpipe stopped. Checkpointing WAL..."
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA wal_checkpoint(TRUNCATE);"
echo
"Done."
Quick diagnosis
Quick diagnosis
Check if a WAL file exists and its size:
Copy to clipboard
bash
ls
-lh ~/.screenpipe/db.sqlite*
If
db.sqlite-wal
is large (MBs), that's unprocessed data. After checkpointing it should shrink to near 0.
Recommended approach:
Use Option 1 whenever you want to query after stopping Screenpipe, and optionally wrap it in your
screenpipe-day.sh
report script at the top.
Copy
Give positive feedback
Give negative feedback
Retry
what about jpg to mp4 conversion
17 Apr
Retry
Edit
Copy
That's unrelated to Screenpipe — are you asking about a general tool/command for converting a sequence of JPG images into an MP4 video?
If so,
FFmpeg
is the standard tool:
Image sequence (e.g. frame001.jpg, frame002.jpg...):
Copy to clipboard
bash
ffmpeg -framerate
24
-i frame%03d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4
Single JPG as a still video (e.g. 5 seconds):
Copy to clipboard
bash
ffmpeg -loop
1
-i input.jpg -t
5
-c:v libx264 -pix_fmt yuv420p output.mp4
All JPGs in a folder (sorted by name):
Copy to clipboard
bash
ffmpeg -framerate
24
-pattern_type glob -i
'*.jpg'
-c:v libx264 -pix_fmt yuv420p output.mp4
Install on Mac:
Copy to clipboard
bash...
|
NULL
|
|
51038
|
1099
|
32
|
2026-04-18T10:40:12.924322+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-18/1776 /Users/lukas/.screenpipe/data/data/2026-04-18/1776508812924_m1.jpg...
|
Claude
|
Claude
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Open sidebar
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Customize
Artifacts
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Reviewing recent conversation highlights
More options for Reviewing recent conversation highlights
Screenpipe WAL processing when stopped
More options for Screenpipe WAL processing when stopped
Mac aliases not recognized
More options for Mac aliases not recognized
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
More options for Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
More options for Linux SQLite UI for NAS
Claude API 500 internal server error
More options for Claude API 500 internal server error
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
More options for eGPU compatibility with Mac mini and Studio
Understanding OpenRouter API gateway
More options for Understanding OpenRouter API gateway
Screenpipe 14-day retention explained
More options for Screenpipe 14-day retention explained
Reddit homepage feed overview
More options for Reddit homepage feed overview
Docker container not visible in console
More options for Docker container not visible in console
DIA browser RAM configuration
More options for DIA browser RAM configuration
Screenpipe company background
More options for Screenpipe company background
DSK Bank Bulgaria secure investing explained
More options for DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
More options for Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
More options for Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
More options for Chromecast remote volume buttons not working
Screenpipe free version guide
More options for Screenpipe free version guide
Updated to 1.3109.0
Relaunch to apply
Relaunch
Lukas Kovalik
Lukas Kovalik
Get apps and extensions
Screenpipe WAL processing when stopped
Screenpipe WAL processing when stopped
More options for Screenpipe WAL processing when stopped
Open sidebar
Share chat
how to make the screenpipe wal being processed. It seems it is not working when the screenpipe is stopped
17 Apr
Retry
Edit
Copy
WAL (Write-Ahead Log) in SQLite needs to be checkpointed to merge pending data into the main database file. When Screenpipe stops, the WAL may not be fully checkpointed.
The issue
The issue
SQLite WAL mode keeps a separate
.sqlite-wal
file. Data there is "pending" until a checkpoint runs. Screenpipe normally handles this while running, but if it stops abruptly or you query while it's stopped, the WAL data may appear missing to external readers.
Solutions
Solutions
Option 1: Force a checkpoint manually (safest)
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA wal_checkpoint(TRUNCATE);"
This flushes all WAL data into the main DB file and truncates the WAL. Run this after Screenpipe stops.
Option 2: Make your queries WAL-aware
When querying with
sqlite3
directly, open in WAL mode explicitly so it reads both the DB and WAL together:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA journal_mode=WAL; SELECT ..."
Actually,
sqlite3
already reads WAL automatically — but only if the WAL file is present and not corrupted. The real fix is ensuring the connection sees both files.
Option 3: Add to your
spq
alias
Update the alias to always checkpoint first:
Copy to clipboard
bash
alias
spq
=
'sqlite3 -json ~/.screenpipe/db.sqlite'
alias
spqcheckpoint
=
'sqlite3 ~/.screenpipe/db.sqlite "PRAGMA wal_checkpoint(TRUNCATE);" && echo "WAL checkpointed"'
Option 4: Checkpoint on Screenpipe shutdown (via a wrapper script)
If you start Screenpipe via a script, wrap it:
Copy to clipboard
bash
#!/bin/bash
screenpipe
"
$@
"
# On exit (Ctrl+C or normal stop), checkpoint WAL
echo
"Screenpipe stopped. Checkpointing WAL..."
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA wal_checkpoint(TRUNCATE);"
echo
"Done."
Quick diagnosis
Quick diagnosis
Check if a WAL file exists and its size:
Copy to clipboard
bash
ls
-lh ~/.screenpipe/db.sqlite*
If
db.sqlite-wal
is large (MBs), that's unprocessed data. After checkpointing it should shrink to near 0.
Recommended approach:
Use Option 1 whenever you want to query after stopping Screenpipe, and optionally wrap it in your
screenpipe-day.sh
report script at the top.
Copy
Give positive feedback
Give negative feedback
Retry
what about jpg to mp4 conversion
17 Apr
Retry
Edit
Copy
That's unrelated to Screenpipe — are you asking about a general tool/command for converting a sequence of JPG images into an MP4 video?
If so,
FFmpeg
is the standard tool:
Image sequence (e.g. frame001.jpg, frame002.jpg...):
Copy to clipboard
bash
ffmpeg -framerate
24
-i frame%03d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4
Single JPG as a still video (e.g. 5 seconds):
Copy to clipboard
bash
ffmpeg -loop
1
-i input.jpg -t
5
-c:v libx264 -pix_fmt yuv420p output.mp4
All JPGs in a folder (sorted by name):
Copy to clipboard
bash
ffmpeg -framerate
24
-pattern_type glob -i
'*.jpg'
-c:v libx264 -pix_fmt yuv420p output.mp4
Install on Mac:
Copy to clipboard...
|
[{"role":"AXLink","text":& [{"role":"AXLink","text":"Skip to content","depth":14,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Skip to content","depth":15,"role_description":"text"},{"role":"AXStaticText","text":"Click to collapse","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"⌘B","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"Drag to resize","depth":16,"role_description":"text"},{"role":"AXButton","text":"Open sidebar","depth":14,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cowork","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New chat ⌘N","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"New chat","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"⌘N","depth":18,"role_description":"text"},{"role":"AXButton","text":"Projects","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Artifacts","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pinned","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Bulgarian citizenship application process for EU residents","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Bulgarian citizenship application process for EU residents","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Dawarich location tracking project","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Dawarich location tracking project","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Recents","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"View all","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reviewing recent conversation highlights","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Reviewing recent conversation highlights","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe WAL processing when stopped","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe WAL processing when stopped","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Mac aliases not recognized","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Mac aliases not recognized","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Boosteroid still recording despite ignored windows setting","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Boosteroid still recording despite ignored windows setting","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Missing JavaScript promise in authorization response","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Missing JavaScript promise in authorization response","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Linux SQLite UI for NAS","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Linux SQLite UI for NAS","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Claude API 500 internal server error","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Claude API 500 internal server error","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe query capabilities and usage","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe query capabilities and usage","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"eGPU compatibility with Mac mini and Studio","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for eGPU compatibility with Mac mini and Studio","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Understanding OpenRouter API gateway","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Understanding OpenRouter API gateway","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe 14-day retention explained","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe 14-day retention explained","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reddit homepage feed overview","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Reddit homepage feed overview","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Docker container not visible in console","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Docker container not visible in console","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"DIA browser RAM configuration","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for DIA browser RAM configuration","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe company background","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe company background","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"DSK Bank Bulgaria secure investing explained","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for DSK Bank Bulgaria secure investing explained","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Building a comprehensive personal homelab system","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Building a comprehensive personal homelab system","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Importing Google Timeline data to Owntracks","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Importing Google Timeline data to Owntracks","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chromecast remote volume buttons not working","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Chromecast remote volume buttons not working","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe free version guide","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe free version guide","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Updated to 1.3109.0","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"Relaunch to apply","depth":16,"role_description":"text"},{"role":"AXButton","text":"Relaunch","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Lukas Kovalik","depth":16,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"role_description":"text"},{"role":"AXButton","text":"Get apps and extensions","depth":15,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe WAL processing when stopped","depth":19,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe WAL processing when stopped","depth":21,"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Screenpipe WAL processing when stopped","depth":19,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open sidebar","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share chat","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"how to make the screenpipe wal being processed. It seems it is not working when the screenpipe is stopped","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"17 Apr","depth":22,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"WAL (Write-Ahead Log) in SQLite needs to be checkpointed to merge pending data into the main database file. When Screenpipe stops, the WAL may not be fully checkpointed.","depth":23,"role_description":"text"},{"role":"AXHeading","text":"The issue","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"The issue","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"SQLite WAL mode keeps a separate","depth":23,"role_description":"text"},{"role":"AXStaticText","text":".sqlite-wal","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"file. Data there is \"pending\" until a checkpoint runs. Screenpipe normally handles this while running, but if it stops abruptly or you query while it's stopped, the WAL data may appear missing to external readers.","depth":23,"role_description":"text"},{"role":"AXHeading","text":"Solutions","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"Solutions","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Option 1: Force a checkpoint manually (safest)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"PRAGMA wal_checkpoint(TRUNCATE);\"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"This flushes all WAL data into the main DB file and truncates the WAL. Run this after Screenpipe stops.","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Option 2: Make your queries WAL-aware","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"When querying with","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"directly, open in WAL mode explicitly so it reads both the DB and WAL together:","depth":23,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"PRAGMA journal_mode=WAL; SELECT ...\"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Actually,","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"already reads WAL automatically — but only if the WAL file is present and not corrupted. The real fix is ensuring the connection sees both files.","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Option 3: Add to your","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"spq","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"alias","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Update the alias to always checkpoint first:","depth":23,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"alias","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"spq","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"=","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"'sqlite3 -json ~/.screenpipe/db.sqlite'","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"alias","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"spqcheckpoint","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"=","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"'sqlite3 ~/.screenpipe/db.sqlite \"PRAGMA wal_checkpoint(TRUNCATE);\" && echo \"WAL checkpointed\"'","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"Option 4: Checkpoint on Screenpipe shutdown (via a wrapper script)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"If you start Screenpipe via a script, wrap it:","depth":23,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"#!/bin/bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"$@","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"# On exit (Ctrl+C or normal stop), checkpoint WAL","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"echo","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"Screenpipe stopped. Checkpointing WAL...\"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"PRAGMA wal_checkpoint(TRUNCATE);\"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"echo","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"Done.\"","depth":25,"role_description":"text"},{"role":"AXHeading","text":"Quick diagnosis","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"Quick diagnosis","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Check if a WAL file exists and its size:","depth":23,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ls","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"-lh ~/.screenpipe/db.sqlite*","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"If","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"db.sqlite-wal","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"is large (MBs), that's unprocessed data. After checkpointing it should shrink to near 0.","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Recommended approach:","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Use Option 1 whenever you want to query after stopping Screenpipe, and optionally wrap it in your","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe-day.sh","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"report script at the top.","depth":23,"role_description":"text"},{"role":"AXButton","text":"Copy","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give positive feedback","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Give negative feedback","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"what about jpg to mp4 conversion","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"17 Apr","depth":22,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"That's unrelated to Screenpipe — are you asking about a general tool/command for converting a sequence of JPG images into an MP4 video?","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"If so,","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"FFmpeg","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"is the standard tool:","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Image sequence (e.g. frame001.jpg, frame002.jpg...):","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ffmpeg -framerate","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"24","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"-i frame%03d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Single JPG as a still video (e.g. 5 seconds):","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ffmpeg -loop","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"1","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"-i input.jpg -t","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"5","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"-c:v libx264 -pix_fmt yuv420p output.mp4","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"All JPGs in a folder (sorted by name):","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"ffmpeg -framerate","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"24","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"-pattern_type glob -i","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"'*.jpg'","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"-c:v libx264 -pix_fmt yuv420p output.mp4","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"Install on Mac:","depth":23,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
6136702803014288252
|
-8412765486659577806
|
app_switch
|
accessibility
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Open sidebar
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Customize
Artifacts
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Reviewing recent conversation highlights
More options for Reviewing recent conversation highlights
Screenpipe WAL processing when stopped
More options for Screenpipe WAL processing when stopped
Mac aliases not recognized
More options for Mac aliases not recognized
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
More options for Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
More options for Linux SQLite UI for NAS
Claude API 500 internal server error
More options for Claude API 500 internal server error
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
More options for eGPU compatibility with Mac mini and Studio
Understanding OpenRouter API gateway
More options for Understanding OpenRouter API gateway
Screenpipe 14-day retention explained
More options for Screenpipe 14-day retention explained
Reddit homepage feed overview
More options for Reddit homepage feed overview
Docker container not visible in console
More options for Docker container not visible in console
DIA browser RAM configuration
More options for DIA browser RAM configuration
Screenpipe company background
More options for Screenpipe company background
DSK Bank Bulgaria secure investing explained
More options for DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
More options for Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
More options for Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
More options for Chromecast remote volume buttons not working
Screenpipe free version guide
More options for Screenpipe free version guide
Updated to 1.3109.0
Relaunch to apply
Relaunch
Lukas Kovalik
Lukas Kovalik
Get apps and extensions
Screenpipe WAL processing when stopped
Screenpipe WAL processing when stopped
More options for Screenpipe WAL processing when stopped
Open sidebar
Share chat
how to make the screenpipe wal being processed. It seems it is not working when the screenpipe is stopped
17 Apr
Retry
Edit
Copy
WAL (Write-Ahead Log) in SQLite needs to be checkpointed to merge pending data into the main database file. When Screenpipe stops, the WAL may not be fully checkpointed.
The issue
The issue
SQLite WAL mode keeps a separate
.sqlite-wal
file. Data there is "pending" until a checkpoint runs. Screenpipe normally handles this while running, but if it stops abruptly or you query while it's stopped, the WAL data may appear missing to external readers.
Solutions
Solutions
Option 1: Force a checkpoint manually (safest)
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA wal_checkpoint(TRUNCATE);"
This flushes all WAL data into the main DB file and truncates the WAL. Run this after Screenpipe stops.
Option 2: Make your queries WAL-aware
When querying with
sqlite3
directly, open in WAL mode explicitly so it reads both the DB and WAL together:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA journal_mode=WAL; SELECT ..."
Actually,
sqlite3
already reads WAL automatically — but only if the WAL file is present and not corrupted. The real fix is ensuring the connection sees both files.
Option 3: Add to your
spq
alias
Update the alias to always checkpoint first:
Copy to clipboard
bash
alias
spq
=
'sqlite3 -json ~/.screenpipe/db.sqlite'
alias
spqcheckpoint
=
'sqlite3 ~/.screenpipe/db.sqlite "PRAGMA wal_checkpoint(TRUNCATE);" && echo "WAL checkpointed"'
Option 4: Checkpoint on Screenpipe shutdown (via a wrapper script)
If you start Screenpipe via a script, wrap it:
Copy to clipboard
bash
#!/bin/bash
screenpipe
"
$@
"
# On exit (Ctrl+C or normal stop), checkpoint WAL
echo
"Screenpipe stopped. Checkpointing WAL..."
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA wal_checkpoint(TRUNCATE);"
echo
"Done."
Quick diagnosis
Quick diagnosis
Check if a WAL file exists and its size:
Copy to clipboard
bash
ls
-lh ~/.screenpipe/db.sqlite*
If
db.sqlite-wal
is large (MBs), that's unprocessed data. After checkpointing it should shrink to near 0.
Recommended approach:
Use Option 1 whenever you want to query after stopping Screenpipe, and optionally wrap it in your
screenpipe-day.sh
report script at the top.
Copy
Give positive feedback
Give negative feedback
Retry
what about jpg to mp4 conversion
17 Apr
Retry
Edit
Copy
That's unrelated to Screenpipe — are you asking about a general tool/command for converting a sequence of JPG images into an MP4 video?
If so,
FFmpeg
is the standard tool:
Image sequence (e.g. frame001.jpg, frame002.jpg...):
Copy to clipboard
bash
ffmpeg -framerate
24
-i frame%03d.jpg -c:v libx264 -pix_fmt yuv420p output.mp4
Single JPG as a still video (e.g. 5 seconds):
Copy to clipboard
bash
ffmpeg -loop
1
-i input.jpg -t
5
-c:v libx264 -pix_fmt yuv420p output.mp4
All JPGs in a folder (sorted by name):
Copy to clipboard
bash
ffmpeg -framerate
24
-pattern_type glob -i
'*.jpg'
-c:v libx264 -pix_fmt yuv420p output.mp4
Install on Mac:
Copy to clipboard...
|
NULL
|
|
51039
|
1100
|
39
|
2026-04-18T10:40:15.454647+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-18/1776 /Users/lukas/.screenpipe/data/data/2026-04-18/1776508815454_m2.jpg...
|
Finder
|
screenpipe
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Favourites
jiminny
AirDrop
Recents
Applications
Do Favourites
jiminny
AirDrop
Recents
Applications
Documents
Desktop
Downloads
lukas
iCloud
iCloud Drive
Sync folder
Locations
DXP4800PLUS-B5F8
Eject
Network
Tags
CRM
Orange
Red
Yellow
Green
Blue
Purple
All Tags…
Name
Date Modified
Size
Kind
db.sqlite-shm
Today at 13:15
33 KB
Document
db.sqlite-wal
Today at 13:11
Zero bytes
Document
app
Today at 12:54
147 KB
Folder
data
Today at 12:18
4,99 GB
Folder
screenpipe_sync.sh
Today at 12:06
14 KB
Terminal scripts
archive.db
Yesterday at 22:19
3,18 GB
Document
#recycle
Yesterday at 21:29
5,42 GB
Folder
db.sqlite
16 Apr 2026 at 17:07
2,82 GB
Document
screenpipe.db
13 Apr 2026 at 17:21
Zero bytes
Document
pipes
11 Apr 2026 at 16:51
13 KB
Folder
Name
Date Modified
Size
Kind
10 items, 2,09 TB available
screenpipe
Close tab
Lukas Kovalik's MacBook Pro (Jiminny)
Close tab
Lukas Kovalik's MacBook Pro (Jiminny)
Close tab
screenpipe
Close tab
Work
Close tab
screenpipe
Close tab
new tab
screenpipe...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Favourites","depth":6,"bounds":{"left":0.5054687,"top":0.05347222,"width":0.07304688,"height":0.013194445},"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"jiminny","depth":6,"bounds":{"left":0.51484376,"top":0.07083333,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"AirDrop","depth":6,"bounds":{"left":0.51484376,"top":0.090277776,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Recents","depth":6,"bounds":{"left":0.51484376,"top":0.10972222,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Applications","depth":6,"bounds":{"left":0.51484376,"top":0.12916666,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Documents","depth":6,"bounds":{"left":0.51484376,"top":0.14861111,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Desktop","depth":6,"bounds":{"left":0.51484376,"top":0.16805555,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Downloads","depth":6,"bounds":{"left":0.51484376,"top":0.1875,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":6,"bounds":{"left":0.51484376,"top":0.20694445,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"iCloud","depth":6,"bounds":{"left":0.5054687,"top":0.23125,"width":0.07304688,"height":0.013194445},"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"iCloud Drive","depth":6,"bounds":{"left":0.51484376,"top":0.24861111,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Sync folder","depth":6,"bounds":{"left":0.51484376,"top":0.26805556,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Locations","depth":6,"bounds":{"left":0.5054687,"top":0.2923611,"width":0.07304688,"height":0.013194445},"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":6,"bounds":{"left":0.51484376,"top":0.30972221,"width":0.051171876,"height":0.011111111},"role_description":"text"},{"role":"AXButton","text":"Eject","depth":6,"bounds":{"left":0.5667969,"top":0.31111112,"width":0.005078125,"height":0.008333334},"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"Network","depth":6,"bounds":{"left":0.51484376,"top":0.32916668,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Tags","depth":6,"bounds":{"left":0.5054687,"top":0.35347223,"width":0.07304688,"height":0.013194445},"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"CRM","depth":6,"bounds":{"left":0.51484376,"top":0.37083334,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Orange","depth":6,"bounds":{"left":0.51484376,"top":0.39027777,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Red","depth":6,"bounds":{"left":0.51484376,"top":0.4097222,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Yellow","depth":6,"bounds":{"left":0.51484376,"top":0.42916667,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Green","depth":6,"bounds":{"left":0.51484376,"top":0.4486111,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Blue","depth":6,"bounds":{"left":0.51484376,"top":0.46805555,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Purple","depth":6,"bounds":{"left":0.51484376,"top":0.4875,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"All Tags…","depth":6,"bounds":{"left":0.51484376,"top":0.5069444,"width":0.058203124,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Name","depth":7,"bounds":{"left":0.5972656,"top":0.077083334,"width":0.013671875,"height":0.009722223},"role_description":"text"},{"role":"AXStaticText","text":"Date Modified","depth":7,"bounds":{"left":0.8421875,"top":0.077083334,"width":0.031640626,"height":0.009722223},"role_description":"text"},{"role":"AXStaticText","text":"Size","depth":7,"bounds":{"left":0.9128906,"top":0.077083334,"width":0.010546875,"height":0.009722223},"role_description":"text"},{"role":"AXStaticText","text":"Kind","depth":7,"bounds":{"left":0.9507812,"top":0.077083334,"width":0.0109375,"height":0.009722223},"role_description":"text"},{"role":"AXTextField","text":"db.sqlite-shm","depth":7,"bounds":{"left":0.5972656,"top":0.097222224,"width":0.0359375,"height":0.011111111},"value":"db.sqlite-shm","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today at 13:15","depth":7,"bounds":{"left":0.8421875,"top":0.097222224,"width":0.06679688,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"33 KB","depth":7,"bounds":{"left":0.9308594,"top":0.097222224,"width":0.016015625,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Document","depth":7,"bounds":{"left":0.9507812,"top":0.097222224,"width":0.027734375,"height":0.011111111},"role_description":"text"},{"role":"AXTextField","text":"db.sqlite-wal","depth":7,"bounds":{"left":0.5972656,"top":0.11111111,"width":0.033984374,"height":0.011111111},"value":"db.sqlite-wal","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today at 13:11","depth":7,"bounds":{"left":0.8421875,"top":0.11111111,"width":0.06679688,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Zero bytes","depth":7,"bounds":{"left":0.9183594,"top":0.11111111,"width":0.028515626,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Document","depth":7,"bounds":{"left":0.9507812,"top":0.11111111,"width":0.027734375,"height":0.011111111},"role_description":"text"},{"role":"AXTextField","text":"app","depth":7,"bounds":{"left":0.5972656,"top":0.125,"width":0.012109375,"height":0.011111111},"value":"app","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today at 12:54","depth":7,"bounds":{"left":0.8421875,"top":0.125,"width":0.06679688,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"147 KB","depth":7,"bounds":{"left":0.9277344,"top":0.125,"width":0.019140625,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"bounds":{"left":0.9507812,"top":0.125,"width":0.016796876,"height":0.011111111},"role_description":"text"},{"role":"AXTextField","text":"data","depth":7,"bounds":{"left":0.5972656,"top":0.1388889,"width":0.013671875,"height":0.011111111},"value":"data","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today at 12:18","depth":7,"bounds":{"left":0.8421875,"top":0.1388889,"width":0.06679688,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"4,99 GB","depth":7,"bounds":{"left":0.92578125,"top":0.1388889,"width":0.02109375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"bounds":{"left":0.9507812,"top":0.1388889,"width":0.016796876,"height":0.011111111},"role_description":"text"},{"role":"AXTextField","text":"screenpipe_sync.sh","depth":7,"bounds":{"left":0.5972656,"top":0.15277778,"width":0.050390624,"height":0.011111111},"value":"screenpipe_sync.sh","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today at 12:06","depth":7,"bounds":{"left":0.8421875,"top":0.15277778,"width":0.06679688,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"14 KB","depth":7,"bounds":{"left":0.9308594,"top":0.15277778,"width":0.016015625,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Terminal scripts","depth":7,"bounds":{"left":0.9507812,"top":0.15277778,"width":0.039453126,"height":0.011111111},"role_description":"text"},{"role":"AXTextField","text":"archive.db","depth":7,"bounds":{"left":0.5972656,"top":0.16666667,"width":0.028125,"height":0.011111111},"value":"archive.db","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Yesterday at 22:19","depth":7,"bounds":{"left":0.8421875,"top":0.16666667,"width":0.06679688,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"3,18 GB","depth":7,"bounds":{"left":0.92578125,"top":0.16666667,"width":0.02109375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Document","depth":7,"bounds":{"left":0.9507812,"top":0.16666667,"width":0.027734375,"height":0.011111111},"role_description":"text"},{"role":"AXTextField","text":"#recycle","depth":7,"bounds":{"left":0.5972656,"top":0.18055555,"width":0.0234375,"height":0.011111111},"value":"#recycle","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Yesterday at 21:29","depth":7,"bounds":{"left":0.8421875,"top":0.18055555,"width":0.06679688,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"5,42 GB","depth":7,"bounds":{"left":0.92578125,"top":0.18055555,"width":0.02109375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"bounds":{"left":0.9507812,"top":0.18055555,"width":0.016796876,"height":0.011111111},"role_description":"text"},{"role":"AXTextField","text":"db.sqlite","depth":7,"bounds":{"left":0.5972656,"top":0.19444445,"width":0.023828125,"height":0.011111111},"value":"db.sqlite","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"16 Apr 2026 at 17:07","depth":7,"bounds":{"left":0.8421875,"top":0.19444445,"width":0.06679688,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"2,82 GB","depth":7,"bounds":{"left":0.92578125,"top":0.19444445,"width":0.02109375,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Document","depth":7,"bounds":{"left":0.9507812,"top":0.19444445,"width":0.027734375,"height":0.011111111},"role_description":"text"},{"role":"AXTextField","text":"screenpipe.db","depth":7,"bounds":{"left":0.5972656,"top":0.20833333,"width":0.037109375,"height":0.011111111},"value":"screenpipe.db","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"13 Apr 2026 at 17:21","depth":7,"bounds":{"left":0.8421875,"top":0.20833333,"width":0.06679688,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Zero bytes","depth":7,"bounds":{"left":0.9183594,"top":0.20833333,"width":0.028515626,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Document","depth":7,"bounds":{"left":0.9507812,"top":0.20833333,"width":0.027734375,"height":0.011111111},"role_description":"text"},{"role":"AXTextField","text":"pipes","depth":7,"bounds":{"left":0.5972656,"top":0.22222222,"width":0.016015625,"height":0.011111111},"value":"pipes","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"11 Apr 2026 at 16:51","depth":7,"bounds":{"left":0.8421875,"top":0.22222222,"width":0.06679688,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"13 KB","depth":7,"bounds":{"left":0.9308594,"top":0.22222222,"width":0.016015625,"height":0.011111111},"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"bounds":{"left":0.9507812,"top":0.22222222,"width":0.016796876,"height":0.011111111},"role_description":"text"},{"role":"AXButton","text":"Name","depth":6,"bounds":{"left":0.5835937,"top":0.072916664,"width":0.2566406,"height":0.019444445},"role_description":"sort button","subrole":"AXSortButton","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"Date Modified","depth":6,"bounds":{"left":0.8402344,"top":0.072916664,"width":0.07070313,"height":0.019444445},"role_description":"sort button","subrole":"AXSortButton","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"Size","depth":6,"bounds":{"left":0.9109375,"top":0.072916664,"width":0.037890624,"height":0.019444445},"role_description":"sort button","subrole":"AXSortButton","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"Kind","depth":6,"bounds":{"left":0.9488281,"top":0.072916664,"width":0.047265626,"height":0.019444445},"role_description":"sort button","subrole":"AXSortButton","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"10 items, 2,09 TB available","depth":2,"bounds":{"left":0.75742185,"top":0.98541665,"width":0.060546875,"height":0.009722223},"automation_id":"_NS:34","role_description":"text"},{"role":"AXRadioButton","text":"screenpipe","depth":2,"bounds":{"left":0.57890624,"top":0.05347222,"width":0.06875,"height":0.019444445},"help_text":"screenpipe","role_description":"tab","subrole":"AXTabButton","is_focused":false},{"role":"AXButton","text":"Close tab","depth":3,"bounds":{"left":0.58085936,"top":0.057638887,"width":0.00625,"height":0.011111111},"automation_id":"_closeButton","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXRadioButton","text":"Lukas Kovalik's MacBook Pro (Jiminny)","depth":2,"bounds":{"left":0.6472656,"top":0.05347222,"width":0.06875,"height":0.019444445},"help_text":"Lukas Kovalik's MacBook Pro (Jiminny)","role_description":"tab","subrole":"AXTabButton","is_focused":false},{"role":"AXButton","text":"Close tab","depth":3,"bounds":{"left":0.64921874,"top":0.057638887,"width":0.00625,"height":0.011111111},"automation_id":"_closeButton","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXRadioButton","text":"Lukas Kovalik's MacBook Pro (Jiminny)","depth":2,"bounds":{"left":0.715625,"top":0.05347222,"width":0.06875,"height":0.019444445},"help_text":"Lukas Kovalik's MacBook Pro (Jiminny)","role_description":"tab","subrole":"AXTabButton","is_focused":false},{"role":"AXButton","text":"Close tab","depth":3,"bounds":{"left":0.7175781,"top":0.057638887,"width":0.00625,"height":0.011111111},"automation_id":"_closeButton","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXRadioButton","text":"screenpipe","depth":2,"bounds":{"left":0.78398436,"top":0.05347222,"width":0.06875,"height":0.019444445},"help_text":"screenpipe","role_description":"tab","subrole":"AXTabButton","is_focused":false},{"role":"AXButton","text":"Close tab","depth":3,"bounds":{"left":0.7859375,"top":0.057638887,"width":0.00625,"height":0.011111111},"automation_id":"_closeButton","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXRadioButton","text":"Work","depth":2,"bounds":{"left":0.85234374,"top":0.05347222,"width":0.06875,"height":0.019444445},"help_text":"Work","role_description":"tab","subrole":"AXTabButton","is_focused":false},{"role":"AXButton","text":"Close tab","depth":3,"bounds":{"left":0.85429686,"top":0.057638887,"width":0.00625,"height":0.011111111},"automation_id":"_closeButton","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXRadioButton","text":"screenpipe","depth":2,"bounds":{"left":0.9207031,"top":0.05347222,"width":0.06875,"height":0.019444445},"help_text":"screenpipe","role_description":"tab","subrole":"AXTabButton","is_focused":false},{"role":"AXButton","text":"Close tab","depth":3,"bounds":{"left":0.92265624,"top":0.057638887,"width":0.00625,"height":0.011111111},"automation_id":"_closeButton","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"new tab","depth":2,"bounds":{"left":0.9890625,"top":0.05347222,"width":0.0109375,"height":0.019444445},"help_text":"Create a new tab","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"screenpipe","depth":1,"bounds":{"left":0.6125,"top":0.017361112,"width":0.125,"height":0.036111113},"role_description":"text"}]...
|
-5931202119093810569
|
-6093347924459606131
|
app_switch
|
accessibility
|
NULL
|
Favourites
jiminny
AirDrop
Recents
Applications
Do Favourites
jiminny
AirDrop
Recents
Applications
Documents
Desktop
Downloads
lukas
iCloud
iCloud Drive
Sync folder
Locations
DXP4800PLUS-B5F8
Eject
Network
Tags
CRM
Orange
Red
Yellow
Green
Blue
Purple
All Tags…
Name
Date Modified
Size
Kind
db.sqlite-shm
Today at 13:15
33 KB
Document
db.sqlite-wal
Today at 13:11
Zero bytes
Document
app
Today at 12:54
147 KB
Folder
data
Today at 12:18
4,99 GB
Folder
screenpipe_sync.sh
Today at 12:06
14 KB
Terminal scripts
archive.db
Yesterday at 22:19
3,18 GB
Document
#recycle
Yesterday at 21:29
5,42 GB
Folder
db.sqlite
16 Apr 2026 at 17:07
2,82 GB
Document
screenpipe.db
13 Apr 2026 at 17:21
Zero bytes
Document
pipes
11 Apr 2026 at 16:51
13 KB
Folder
Name
Date Modified
Size
Kind
10 items, 2,09 TB available
screenpipe
Close tab
Lukas Kovalik's MacBook Pro (Jiminny)
Close tab
Lukas Kovalik's MacBook Pro (Jiminny)
Close tab
screenpipe
Close tab
Work
Close tab
screenpipe
Close tab
new tab
screenpipe...
|
NULL
|
|
51040
|
1099
|
33
|
2026-04-18T10:40:15.454682+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-18/1776 /Users/lukas/.screenpipe/data/data/2026-04-18/1776508815454_m1.jpg...
|
Finder
|
screenpipe
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Favourites
jiminny
AirDrop
Recents
Applications
Do Favourites
jiminny
AirDrop
Recents
Applications
Documents
Desktop
Downloads
lukas
iCloud
iCloud Drive
Sync folder
Locations
DXP4800PLUS-B5F8
Eject
Network
Tags
CRM
Orange
Red
Yellow
Green
Blue
Purple
All Tags…
Name
Date Modified
Size
Kind
db.sqlite-shm
Today at 13:15
33 KB
Document
db.sqlite-wal
Today at 13:11
Zero bytes
Document
app
Today at 12:54
147 KB
Folder
data
Today at 12:18
4,99 GB
Folder
screenpipe_sync.sh
Today at 12:06
14 KB
Terminal scripts
archive.db
Yesterday at 22:19
3,18 GB
Document
#recycle
Yesterday at 21:29
5,42 GB
Folder
db.sqlite
16 Apr 2026 at 17:07
2,82 GB
Document
screenpipe.db
13 Apr 2026 at 17:21
Zero bytes
Document
pipes
11 Apr 2026 at 16:51
13 KB
Folder
Name
Date Modified
Size
Kind
10 items, 2,09 TB available
screenpipe
Close tab
Lukas Kovalik's MacBook Pro (Jiminny)
Close tab
Lukas Kovalik's MacBook Pro (Jiminny)
Close tab
screenpipe
Close tab
Work
Close tab
screenpipe
Close tab
new tab
screenpipe...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Favourites","depth":6,"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"jiminny","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"AirDrop","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Recents","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Applications","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Documents","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Desktop","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Downloads","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"lukas","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"iCloud","depth":6,"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"iCloud Drive","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Sync folder","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Locations","depth":6,"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":6,"role_description":"text"},{"role":"AXButton","text":"Eject","depth":6,"role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"Network","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Tags","depth":6,"automation_id":"xSidebarHeader","role_description":"text"},{"role":"AXStaticText","text":"CRM","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Orange","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Red","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Yellow","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Green","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Blue","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Purple","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"All Tags…","depth":6,"role_description":"text"},{"role":"AXStaticText","text":"Name","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Date Modified","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Size","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Kind","depth":7,"role_description":"text"},{"role":"AXTextField","text":"db.sqlite-shm","depth":7,"value":"db.sqlite-shm","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today at 13:15","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"33 KB","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Document","depth":7,"role_description":"text"},{"role":"AXTextField","text":"db.sqlite-wal","depth":7,"value":"db.sqlite-wal","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today at 13:11","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Zero bytes","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Document","depth":7,"role_description":"text"},{"role":"AXTextField","text":"app","depth":7,"value":"app","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today at 12:54","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"147 KB","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"data","depth":7,"value":"data","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today at 12:18","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"4,99 GB","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"screenpipe_sync.sh","depth":7,"value":"screenpipe_sync.sh","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today at 12:06","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"14 KB","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Terminal scripts","depth":7,"role_description":"text"},{"role":"AXTextField","text":"archive.db","depth":7,"value":"archive.db","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Yesterday at 22:19","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"3,18 GB","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Document","depth":7,"role_description":"text"},{"role":"AXTextField","text":"#recycle","depth":7,"value":"#recycle","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Yesterday at 21:29","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"5,42 GB","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXTextField","text":"db.sqlite","depth":7,"value":"db.sqlite","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"16 Apr 2026 at 17:07","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"2,82 GB","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Document","depth":7,"role_description":"text"},{"role":"AXTextField","text":"screenpipe.db","depth":7,"value":"screenpipe.db","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"13 Apr 2026 at 17:21","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Zero bytes","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Document","depth":7,"role_description":"text"},{"role":"AXTextField","text":"pipes","depth":7,"value":"pipes","role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"11 Apr 2026 at 16:51","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"13 KB","depth":7,"role_description":"text"},{"role":"AXStaticText","text":"Folder","depth":7,"role_description":"text"},{"role":"AXButton","text":"Name","depth":6,"role_description":"sort button","subrole":"AXSortButton","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"Date Modified","depth":6,"role_description":"sort button","subrole":"AXSortButton","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"Size","depth":6,"role_description":"sort button","subrole":"AXSortButton","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"Kind","depth":6,"role_description":"sort button","subrole":"AXSortButton","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"10 items, 2,09 TB available","depth":2,"bounds":{"left":0.93194443,"top":0.0,"width":0.06805557,"height":0.015555556},"automation_id":"_NS:34","role_description":"text"},{"role":"AXRadioButton","text":"screenpipe","depth":2,"help_text":"screenpipe","role_description":"tab","subrole":"AXTabButton","is_focused":false},{"role":"AXButton","text":"Close tab","depth":3,"automation_id":"_closeButton","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXRadioButton","text":"Lukas Kovalik's MacBook Pro (Jiminny)","depth":2,"help_text":"Lukas Kovalik's MacBook Pro (Jiminny)","role_description":"tab","subrole":"AXTabButton","is_focused":false},{"role":"AXButton","text":"Close tab","depth":3,"automation_id":"_closeButton","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXRadioButton","text":"Lukas Kovalik's MacBook Pro (Jiminny)","depth":2,"help_text":"Lukas Kovalik's MacBook Pro (Jiminny)","role_description":"tab","subrole":"AXTabButton","is_focused":false},{"role":"AXButton","text":"Close tab","depth":3,"automation_id":"_closeButton","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXRadioButton","text":"screenpipe","depth":2,"help_text":"screenpipe","role_description":"tab","subrole":"AXTabButton","is_focused":false},{"role":"AXButton","text":"Close tab","depth":3,"automation_id":"_closeButton","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXRadioButton","text":"Work","depth":2,"help_text":"Work","role_description":"tab","subrole":"AXTabButton","is_focused":false},{"role":"AXButton","text":"Close tab","depth":3,"automation_id":"_closeButton","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXRadioButton","text":"screenpipe","depth":2,"help_text":"screenpipe","role_description":"tab","subrole":"AXTabButton","is_focused":false},{"role":"AXButton","text":"Close tab","depth":3,"automation_id":"_closeButton","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXButton","text":"new tab","depth":2,"help_text":"Create a new tab","role_description":"button","is_enabled":true,"is_focused":false},{"role":"AXStaticText","text":"screenpipe","depth":1,"role_description":"text"}]...
|
-5931202119093810569
|
-6093347924459606131
|
app_switch
|
accessibility
|
NULL
|
Favourites
jiminny
AirDrop
Recents
Applications
Do Favourites
jiminny
AirDrop
Recents
Applications
Documents
Desktop
Downloads
lukas
iCloud
iCloud Drive
Sync folder
Locations
DXP4800PLUS-B5F8
Eject
Network
Tags
CRM
Orange
Red
Yellow
Green
Blue
Purple
All Tags…
Name
Date Modified
Size
Kind
db.sqlite-shm
Today at 13:15
33 KB
Document
db.sqlite-wal
Today at 13:11
Zero bytes
Document
app
Today at 12:54
147 KB
Folder
data
Today at 12:18
4,99 GB
Folder
screenpipe_sync.sh
Today at 12:06
14 KB
Terminal scripts
archive.db
Yesterday at 22:19
3,18 GB
Document
#recycle
Yesterday at 21:29
5,42 GB
Folder
db.sqlite
16 Apr 2026 at 17:07
2,82 GB
Document
screenpipe.db
13 Apr 2026 at 17:21
Zero bytes
Document
pipes
11 Apr 2026 at 16:51
13 KB
Folder
Name
Date Modified
Size
Kind
10 items, 2,09 TB available
screenpipe
Close tab
Lukas Kovalik's MacBook Pro (Jiminny)
Close tab
Lukas Kovalik's MacBook Pro (Jiminny)
Close tab
screenpipe
Close tab
Work
Close tab
screenpipe
Close tab
new tab
screenpipe...
|
NULL
|
|
51115
|
1101
|
33
|
2026-04-18T10:44:13.347110+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-18/1776 /Users/lukas/.screenpipe/data/data/2026-04-18/1776509053347_m1.jpg...
|
Claude
|
Claude
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Open sidebar
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Customize
Artifacts
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Reviewing recent conversation highlights
More options for Reviewing recent conversation highlights
Screenpipe WAL processing when stopped
More options for Screenpipe WAL processing when stopped
Mac aliases not recognized
More options for Mac aliases not recognized
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
More options for Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
More options for Linux SQLite UI for NAS
Claude API 500 internal server error
More options for Claude API 500 internal server error
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
More options for eGPU compatibility with Mac mini and Studio
Understanding OpenRouter API gateway
More options for Understanding OpenRouter API gateway
Screenpipe 14-day retention explained
More options for Screenpipe 14-day retention explained
Reddit homepage feed overview
More options for Reddit homepage feed overview
Docker container not visible in console
More options for Docker container not visible in console
DIA browser RAM configuration
More options for DIA browser RAM configuration
Screenpipe company background
More options for Screenpipe company background
DSK Bank Bulgaria secure investing explained
More options for DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
More options for Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
More options for Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
More options for Chromecast remote volume buttons not working
Screenpipe free version guide
More options for Screenpipe free version guide
Updated to 1.3109.0
Relaunch to apply
Relaunch
Lukas Kovalik
Lukas Kovalik
Get apps and extensions
Screenpipe WAL processing when stopped
Screenpipe WAL processing when stopped
More options for Screenpipe WAL processing when stopped
Open sidebar
Share chat
how to make the screenpipe wal being processed. It seems it is not working when the screenpipe is stopped
17 Apr
Retry
Edit
Copy
WAL (Write-Ahead Log) in SQLite needs to be checkpointed to merge pending data into the main database file. When Screenpipe stops, the WAL may not be fully checkpointed.
The issue
The issue
SQLite WAL mode keeps a separate
.sqlite-wal
file. Data there is "pending" until a checkpoint runs. Screenpipe normally handles this while running, but if it stops abruptly or you query while it's stopped, the WAL data may appear missing to external readers.
Solutions
Solutions
Option 1: Force a checkpoint manually (safest)
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA wal_checkpoint(TRUNCATE);"
This flushes all WAL data into the main DB file and truncates the WAL. Run this after Screenpipe stops.
Option 2: Make your queries WAL-aware
When querying with
sqlite3
directly, open in WAL mode explicitly so it reads both the DB and WAL together:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA journal_mode=WAL; SELECT ..."
Actually,
sqlite3
already reads WAL automatically — but only if the WAL file is present and not corrupted. The real fix is ensuring the connection sees both files.
Option 3: Add to your
spq
alias
Update the alias to always checkpoint first:
Copy to clipboard
bash
alias
spq
=
'sqlite3 -json ~/.screenpipe/db.sqlite'
alias
spqcheckpoint
=
'sqlite3 ~/.screenpipe/db.sqlite "PRAGMA wal_checkpoint(TRUNCATE);" && echo "WAL checkpointed"'
Option 4: Checkpoint on Screenpipe shutdown (via a wrapper script)
If you start Screenpipe via a script, wrap it:
Copy to clipboard
bash
#!/bin/bash
screenpipe
"...
|
[{"role":"AXLink","text":& [{"role":"AXLink","text":"Skip to content","depth":14,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Skip to content","depth":15,"role_description":"text"},{"role":"AXStaticText","text":"Click to collapse","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"⌘B","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"Drag to resize","depth":16,"role_description":"text"},{"role":"AXButton","text":"Open sidebar","depth":14,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cowork","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New chat ⌘N","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"New chat","depth":17,"role_description":"text"},{"role":"AXStaticText","text":"⌘N","depth":18,"role_description":"text"},{"role":"AXButton","text":"Projects","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Artifacts","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pinned","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Bulgarian citizenship application process for EU residents","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Bulgarian citizenship application process for EU residents","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Dawarich location tracking project","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Dawarich location tracking project","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Recents","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"View all","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reviewing recent conversation highlights","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Reviewing recent conversation highlights","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe WAL processing when stopped","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe WAL processing when stopped","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Mac aliases not recognized","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Mac aliases not recognized","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Boosteroid still recording despite ignored windows setting","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Boosteroid still recording despite ignored windows setting","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Missing JavaScript promise in authorization response","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Missing JavaScript promise in authorization response","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Linux SQLite UI for NAS","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Linux SQLite UI for NAS","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Claude API 500 internal server error","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Claude API 500 internal server error","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe query capabilities and usage","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe query capabilities and usage","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"eGPU compatibility with Mac mini and Studio","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for eGPU compatibility with Mac mini and Studio","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Understanding OpenRouter API gateway","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Understanding OpenRouter API gateway","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe 14-day retention explained","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe 14-day retention explained","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reddit homepage feed overview","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Reddit homepage feed overview","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Docker container not visible in console","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Docker container not visible in console","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"DIA browser RAM configuration","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for DIA browser RAM configuration","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe company background","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe company background","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"DSK Bank Bulgaria secure investing explained","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for DSK Bank Bulgaria secure investing explained","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Building a comprehensive personal homelab system","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Building a comprehensive personal homelab system","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Importing Google Timeline data to Owntracks","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Importing Google Timeline data to Owntracks","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chromecast remote volume buttons not working","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Chromecast remote volume buttons not working","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe free version guide","depth":17,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe free version guide","depth":18,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Updated to 1.3109.0","depth":16,"role_description":"text"},{"role":"AXStaticText","text":"Relaunch to apply","depth":16,"role_description":"text"},{"role":"AXButton","text":"Relaunch","depth":16,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Lukas Kovalik","depth":16,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"role_description":"text"},{"role":"AXButton","text":"Get apps and extensions","depth":15,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe WAL processing when stopped","depth":19,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe WAL processing when stopped","depth":21,"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Screenpipe WAL processing when stopped","depth":19,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open sidebar","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share chat","depth":21,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"how to make the screenpipe wal being processed. It seems it is not working when the screenpipe is stopped","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"17 Apr","depth":22,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":22,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"WAL (Write-Ahead Log) in SQLite needs to be checkpointed to merge pending data into the main database file. When Screenpipe stops, the WAL may not be fully checkpointed.","depth":23,"role_description":"text"},{"role":"AXHeading","text":"The issue","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"The issue","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"SQLite WAL mode keeps a separate","depth":23,"role_description":"text"},{"role":"AXStaticText","text":".sqlite-wal","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"file. Data there is \"pending\" until a checkpoint runs. Screenpipe normally handles this while running, but if it stops abruptly or you query while it's stopped, the WAL data may appear missing to external readers.","depth":23,"role_description":"text"},{"role":"AXHeading","text":"Solutions","depth":22,"role_description":"heading"},{"role":"AXStaticText","text":"Solutions","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Option 1: Force a checkpoint manually (safest)","depth":24,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"PRAGMA wal_checkpoint(TRUNCATE);\"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"This flushes all WAL data into the main DB file and truncates the WAL. Run this after Screenpipe stops.","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Option 2: Make your queries WAL-aware","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"When querying with","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"directly, open in WAL mode explicitly so it reads both the DB and WAL together:","depth":23,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"PRAGMA journal_mode=WAL; SELECT ...\"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"Actually,","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"sqlite3","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"already reads WAL automatically — but only if the WAL file is present and not corrupted. The real fix is ensuring the connection sees both files.","depth":23,"role_description":"text"},{"role":"AXStaticText","text":"Option 3: Add to your","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"spq","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"alias","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"Update the alias to always checkpoint first:","depth":23,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"alias","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"spq","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"=","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"'sqlite3 -json ~/.screenpipe/db.sqlite'","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"alias","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"spqcheckpoint","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"=","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"'sqlite3 ~/.screenpipe/db.sqlite \"PRAGMA wal_checkpoint(TRUNCATE);\" && echo \"WAL checkpointed\"'","depth":26,"role_description":"text"},{"role":"AXStaticText","text":"Option 4: Checkpoint on Screenpipe shutdown (via a wrapper script)","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"If you start Screenpipe via a script, wrap it:","depth":23,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"role_description":"text"},{"role":"AXStaticText","text":"#!/bin/bash","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"screenpipe","depth":25,"role_description":"text"},{"role":"AXStaticText","text":"\"","depth":25,"role_description":"text"}]...
|
5509853120598609526
|
-8496080980254303056
|
app_switch
|
accessibility
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Open sidebar
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Customize
Artifacts
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Reviewing recent conversation highlights
More options for Reviewing recent conversation highlights
Screenpipe WAL processing when stopped
More options for Screenpipe WAL processing when stopped
Mac aliases not recognized
More options for Mac aliases not recognized
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
More options for Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
More options for Linux SQLite UI for NAS
Claude API 500 internal server error
More options for Claude API 500 internal server error
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
More options for eGPU compatibility with Mac mini and Studio
Understanding OpenRouter API gateway
More options for Understanding OpenRouter API gateway
Screenpipe 14-day retention explained
More options for Screenpipe 14-day retention explained
Reddit homepage feed overview
More options for Reddit homepage feed overview
Docker container not visible in console
More options for Docker container not visible in console
DIA browser RAM configuration
More options for DIA browser RAM configuration
Screenpipe company background
More options for Screenpipe company background
DSK Bank Bulgaria secure investing explained
More options for DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
More options for Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
More options for Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
More options for Chromecast remote volume buttons not working
Screenpipe free version guide
More options for Screenpipe free version guide
Updated to 1.3109.0
Relaunch to apply
Relaunch
Lukas Kovalik
Lukas Kovalik
Get apps and extensions
Screenpipe WAL processing when stopped
Screenpipe WAL processing when stopped
More options for Screenpipe WAL processing when stopped
Open sidebar
Share chat
how to make the screenpipe wal being processed. It seems it is not working when the screenpipe is stopped
17 Apr
Retry
Edit
Copy
WAL (Write-Ahead Log) in SQLite needs to be checkpointed to merge pending data into the main database file. When Screenpipe stops, the WAL may not be fully checkpointed.
The issue
The issue
SQLite WAL mode keeps a separate
.sqlite-wal
file. Data there is "pending" until a checkpoint runs. Screenpipe normally handles this while running, but if it stops abruptly or you query while it's stopped, the WAL data may appear missing to external readers.
Solutions
Solutions
Option 1: Force a checkpoint manually (safest)
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA wal_checkpoint(TRUNCATE);"
This flushes all WAL data into the main DB file and truncates the WAL. Run this after Screenpipe stops.
Option 2: Make your queries WAL-aware
When querying with
sqlite3
directly, open in WAL mode explicitly so it reads both the DB and WAL together:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA journal_mode=WAL; SELECT ..."
Actually,
sqlite3
already reads WAL automatically — but only if the WAL file is present and not corrupted. The real fix is ensuring the connection sees both files.
Option 3: Add to your
spq
alias
Update the alias to always checkpoint first:
Copy to clipboard
bash
alias
spq
=
'sqlite3 -json ~/.screenpipe/db.sqlite'
alias
spqcheckpoint
=
'sqlite3 ~/.screenpipe/db.sqlite "PRAGMA wal_checkpoint(TRUNCATE);" && echo "WAL checkpointed"'
Option 4: Checkpoint on Screenpipe shutdown (via a wrapper script)
If you start Screenpipe via a script, wrap it:
Copy to clipboard
bash
#!/bin/bash
screenpipe
"...
|
NULL
|
|
51116
|
1102
|
38
|
2026-04-18T10:44:13.347091+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-18/1776 /Users/lukas/.screenpipe/data/data/2026-04-18/1776509053347_m2.jpg...
|
Claude
|
Claude
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Open sidebar
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Customize
Artifacts
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Reviewing recent conversation highlights
More options for Reviewing recent conversation highlights
Screenpipe WAL processing when stopped
More options for Screenpipe WAL processing when stopped
Mac aliases not recognized
More options for Mac aliases not recognized
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
More options for Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
More options for Linux SQLite UI for NAS
Claude API 500 internal server error
More options for Claude API 500 internal server error
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
More options for eGPU compatibility with Mac mini and Studio
Understanding OpenRouter API gateway
More options for Understanding OpenRouter API gateway
Screenpipe 14-day retention explained
More options for Screenpipe 14-day retention explained
Reddit homepage feed overview
More options for Reddit homepage feed overview
Docker container not visible in console
More options for Docker container not visible in console
DIA browser RAM configuration
More options for DIA browser RAM configuration
Screenpipe company background
More options for Screenpipe company background
DSK Bank Bulgaria secure investing explained
More options for DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
More options for Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
More options for Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
More options for Chromecast remote volume buttons not working
Screenpipe free version guide
More options for Screenpipe free version guide
Updated to 1.3109.0
Relaunch to apply
Relaunch
Lukas Kovalik
Lukas Kovalik
Get apps and extensions
Screenpipe WAL processing when stopped
Screenpipe WAL processing when stopped
More options for Screenpipe WAL processing when stopped
Open sidebar
Share chat
how to make the screenpipe wal being processed. It seems it is not working when the screenpipe is stopped
17 Apr
Retry
Edit
Copy
WAL (Write-Ahead Log) in SQLite needs to be checkpointed to merge pending data into the main database file. When Screenpipe stops, the WAL may not be fully checkpointed.
The issue
The issue
SQLite WAL mode keeps a separate
.sqlite-wal
file. Data there is "pending" until a checkpoint runs. Screenpipe normally handles this while running, but if it stops abruptly or you query while it's stopped, the WAL data may appear missing to external readers.
Solutions
Solutions
Option 1: Force a checkpoint manually (safest)
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA wal_checkpoint(TRUNCATE);"
This flushes all WAL data into the main DB file and truncates the WAL. Run this after Screenpipe stops.
Option 2: Make your queries WAL-aware
When querying with
sqlite3
directly, open in WAL mode explicitly so it reads both the DB and WAL together:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA journal_mode=WAL; SELECT ..."
Actually,
sqlite3
already reads WAL automatically — but only if the WAL file is present and not corrupted. The real fix is ensuring the connection sees both files.
Option 3: Add to your
spq
alias
Update the alias to always checkpoint first:
Copy to clipboard
bash
alias
spq
=
'sqlite3 -json ~/.screenpipe/db.sqlite'...
|
[{"role":"AXLink","text":& [{"role":"AXLink","text":"Skip to content","depth":14,"bounds":{"left":0.034765624,"top":0.033333335,"width":0.000390625,"height":0.0013888889},"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Skip to content","depth":15,"bounds":{"left":0.034765624,"top":0.033333335,"width":0.044921875,"height":0.0013888889},"role_description":"text"},{"role":"AXStaticText","text":"Click to collapse","depth":16,"bounds":{"left":0.1203125,"top":0.072916664,"width":0.036328126,"height":0.010416667},"role_description":"text"},{"role":"AXStaticText","text":"⌘B","depth":16,"bounds":{"left":0.15859374,"top":0.072916664,"width":0.0078125,"height":0.010416667},"role_description":"text"},{"role":"AXStaticText","text":"Drag to resize","depth":16,"bounds":{"left":0.1203125,"top":0.083333336,"width":0.03046875,"height":0.010416667},"role_description":"text"},{"role":"AXButton","text":"Open sidebar","depth":14,"bounds":{"left":0.03515625,"top":0.024305556,"width":0.0109375,"height":0.019444445},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat","depth":16,"bounds":{"left":0.005859375,"top":0.047916666,"width":0.02578125,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cowork","depth":16,"bounds":{"left":0.03203125,"top":0.047916666,"width":0.0109375,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":16,"bounds":{"left":0.043359376,"top":0.047916666,"width":0.0109375,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New chat ⌘N","depth":16,"bounds":{"left":0.00546875,"top":0.07361111,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"New chat","depth":17,"bounds":{"left":0.016796876,"top":0.07638889,"width":0.02265625,"height":0.011805556},"role_description":"text"},{"role":"AXStaticText","text":"⌘N","depth":18,"bounds":{"left":0.091796875,"top":0.077083334,"width":0.008203125,"height":0.011111111},"role_description":"text"},{"role":"AXButton","text":"Projects","depth":16,"bounds":{"left":0.00546875,"top":0.09166667,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":16,"bounds":{"left":0.00546875,"top":0.10902778,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Artifacts","depth":16,"bounds":{"left":0.00546875,"top":0.12708333,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pinned","depth":16,"bounds":{"left":0.0078125,"top":0.16111112,"width":0.09375,"height":0.011111111},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"Bulgarian citizenship application process for EU residents","depth":17,"bounds":{"left":0.00546875,"top":0.175,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Bulgarian citizenship application process for EU residents","depth":18,"bounds":{"left":0.09335937,"top":0.17777778,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Dawarich location tracking project","depth":17,"bounds":{"left":0.00546875,"top":0.19375,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Dawarich location tracking project","depth":18,"bounds":{"left":0.09335937,"top":0.19652778,"width":0.007421875,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Recents","depth":16,"bounds":{"left":0.0078125,"top":0.21944444,"width":0.06992187,"height":0.011805556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"View all","depth":16,"bounds":{"left":0.07890625,"top":0.21944444,"width":0.02265625,"height":0.011805556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reviewing recent conversation highlights","depth":17,"bounds":{"left":0.00546875,"top":0.23333333,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Reviewing recent conversation highlights","depth":18,"bounds":{"left":0.09335937,"top":0.2361111,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe WAL processing when stopped","depth":17,"bounds":{"left":0.00546875,"top":0.25208333,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe WAL processing when stopped","depth":18,"bounds":{"left":0.09335937,"top":0.25486112,"width":0.007421875,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Mac aliases not recognized","depth":17,"bounds":{"left":0.00546875,"top":0.2701389,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Mac aliases not recognized","depth":18,"bounds":{"left":0.09335937,"top":0.27291667,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Boosteroid still recording despite ignored windows setting","depth":17,"bounds":{"left":0.00546875,"top":0.2888889,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Boosteroid still recording despite ignored windows setting","depth":18,"bounds":{"left":0.09335937,"top":0.29166666,"width":0.007421875,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Missing JavaScript promise in authorization response","depth":17,"bounds":{"left":0.00546875,"top":0.30694443,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Missing JavaScript promise in authorization response","depth":18,"bounds":{"left":0.09335937,"top":0.30972221,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Linux SQLite UI for NAS","depth":17,"bounds":{"left":0.00546875,"top":0.32569444,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Linux SQLite UI for NAS","depth":18,"bounds":{"left":0.09335937,"top":0.32847223,"width":0.007421875,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Claude API 500 internal server error","depth":17,"bounds":{"left":0.00546875,"top":0.34375,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Claude API 500 internal server error","depth":18,"bounds":{"left":0.09335937,"top":0.34652779,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe query capabilities and usage","depth":17,"bounds":{"left":0.00546875,"top":0.3625,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe query capabilities and usage","depth":18,"bounds":{"left":0.09335937,"top":0.36527777,"width":0.007421875,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"eGPU compatibility with Mac mini and Studio","depth":17,"bounds":{"left":0.00546875,"top":0.38055557,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for eGPU compatibility with Mac mini and Studio","depth":18,"bounds":{"left":0.09335937,"top":0.38333333,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Understanding OpenRouter API gateway","depth":17,"bounds":{"left":0.00546875,"top":0.39930555,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Understanding OpenRouter API gateway","depth":18,"bounds":{"left":0.09335937,"top":0.40208334,"width":0.007421875,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe 14-day retention explained","depth":17,"bounds":{"left":0.00546875,"top":0.4173611,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe 14-day retention explained","depth":18,"bounds":{"left":0.09335937,"top":0.4201389,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Reddit homepage feed overview","depth":17,"bounds":{"left":0.00546875,"top":0.43611112,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Reddit homepage feed overview","depth":18,"bounds":{"left":0.09335937,"top":0.43819445,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Docker container not visible in console","depth":17,"bounds":{"left":0.00546875,"top":0.45416668,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Docker container not visible in console","depth":18,"bounds":{"left":0.09335937,"top":0.45694444,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"DIA browser RAM configuration","depth":17,"bounds":{"left":0.00546875,"top":0.4722222,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for DIA browser RAM configuration","depth":18,"bounds":{"left":0.09335937,"top":0.475,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe company background","depth":17,"bounds":{"left":0.00546875,"top":0.49097222,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe company background","depth":18,"bounds":{"left":0.09335937,"top":0.49375,"width":0.007421875,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"DSK Bank Bulgaria secure investing explained","depth":17,"bounds":{"left":0.00546875,"top":0.5090278,"width":0.096875,"height":0.01875},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for DSK Bank Bulgaria secure investing explained","depth":18,"bounds":{"left":0.09335937,"top":0.51180553,"width":0.007421875,"height":0.013194445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Building a comprehensive personal homelab system","depth":17,"bounds":{"left":0.00546875,"top":0.5277778,"width":0.096875,"height":0.018055556},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Building a comprehensive personal homelab system","depth":18,"bounds":{"left":0.09335937,"top":0.53055555,"width":0.007421875,"height":0.0125},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Importing Google Timeline data to Owntracks","depth":17,"bounds":{"left":0.00546875,"top":0.54583335,"width":0.096875,"height":0.0048611113},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Importing Google Timeline data to Owntracks","depth":18,"bounds":{"left":0.09335937,"top":0.5486111,"width":0.007421875,"height":0.0020833334},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chromecast remote volume buttons not working","depth":17,"bounds":{"left":0.00546875,"top":0.54930556,"width":0.096875,"height":0.0013888889},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Chromecast remote volume buttons not working","depth":18,"bounds":{"left":0.09335937,"top":0.54930556,"width":0.007421875,"height":0.0013888889},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe free version guide","depth":17,"bounds":{"left":0.00546875,"top":0.54930556,"width":0.096875,"height":0.0013888889},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe free version guide","depth":18,"bounds":{"left":0.09335937,"top":0.54930556,"width":0.007421875,"height":0.0013888889},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Updated to 1.3109.0","depth":16,"bounds":{"left":0.03125,"top":0.61388886,"width":0.049609374,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"Relaunch to apply","depth":16,"bounds":{"left":0.036328126,"top":0.6284722,"width":0.0390625,"height":0.011111111},"role_description":"text"},{"role":"AXButton","text":"Relaunch","depth":16,"bounds":{"left":0.010546875,"top":0.6472222,"width":0.09101562,"height":0.022916667},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Lukas Kovalik","depth":16,"bounds":{"left":0.00546875,"top":0.69166666,"width":0.044140626,"height":0.017361112},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Lukas Kovalik","depth":17,"bounds":{"left":0.016796876,"top":0.6944444,"width":0.0296875,"height":0.011111111},"role_description":"text"},{"role":"AXButton","text":"Get apps and extensions","depth":15,"bounds":{"left":0.096875,"top":0.6923611,"width":0.009765625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe WAL processing when stopped","depth":19,"bounds":{"left":0.04921875,"top":0.024305556,"width":0.1171875,"height":0.019444445},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe WAL processing when stopped","depth":21,"bounds":{"left":0.05234375,"top":0.027083334,"width":0.1109375,"height":0.013194445},"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Screenpipe WAL processing when stopped","depth":19,"bounds":{"left":0.16679688,"top":0.024305556,"width":0.011328125,"height":0.019444445},"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open sidebar","depth":21,"bounds":{"left":0.96875,"top":0.022916667,"width":0.0125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share chat","depth":21,"bounds":{"left":0.9828125,"top":0.022916667,"width":0.0125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"how to make the screenpipe wal being processed. It seems it is not working when the screenpipe is stopped","depth":24,"bounds":{"left":0.403125,"top":0.017361112,"width":0.22109374,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"17 Apr","depth":22,"bounds":{"left":0.5875,"top":0.017361112,"width":0.013671875,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Retry","depth":22,"bounds":{"left":0.6039063,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":22,"bounds":{"left":0.61640626,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.62890625,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"WAL (Write-Ahead Log) in SQLite needs to be checkpointed to merge pending data into the main database file. When Screenpipe stops, the WAL may not be fully checkpointed.","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.26367188,"height":0.00069444446},"role_description":"text"},{"role":"AXHeading","text":"The issue","depth":22,"bounds":{"left":0.35390624,"top":0.017361112,"width":0.2878906,"height":0.00069444446},"role_description":"heading"},{"role":"AXStaticText","text":"The issue","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.032421876,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"SQLite WAL mode keeps a separate","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.10390625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":".sqlite-wal","depth":24,"bounds":{"left":0.4625,"top":0.017361112,"width":0.0375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"file. Data there is \"pending\" until a checkpoint runs. Screenpipe normally handles this while running, but if it stops abruptly or you query while it's stopped, the WAL data may appear missing to external readers.","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.26210937,"height":0.00069444446},"role_description":"text"},{"role":"AXHeading","text":"Solutions","depth":22,"bounds":{"left":0.35390624,"top":0.017361112,"width":0.2878906,"height":0.00069444446},"role_description":"heading"},{"role":"AXStaticText","text":"Solutions","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.032421876,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Option 1: Force a checkpoint manually (safest)","depth":24,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.13828126,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"bounds":{"left":0.62539065,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":25,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.10546875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"PRAGMA wal_checkpoint(TRUNCATE);\"","depth":25,"bounds":{"left":0.46484375,"top":0.017361112,"width":0.11171875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"This flushes all WAL data into the main DB file and truncates the WAL. Run this after Screenpipe stops.","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.24296875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Option 2: Make your queries WAL-aware","depth":24,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.12070312,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"When querying with","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.061328124,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3","depth":24,"bounds":{"left":0.41992188,"top":0.017361112,"width":0.02421875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"directly, open in WAL mode explicitly so it reads both the DB and WAL together:","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.2640625,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"bounds":{"left":0.62539065,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3 ~/.screenpipe/db.sqlite","depth":25,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.10546875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"\"PRAGMA journal_mode=WAL; SELECT ...\"","depth":25,"bounds":{"left":0.46484375,"top":0.017361112,"width":0.121875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Actually,","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.02734375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"sqlite3","depth":24,"bounds":{"left":0.3859375,"top":0.017361112,"width":0.023828125,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"already reads WAL automatically — but only if the WAL file is present and not corrupted. The real fix is ensuring the connection sees both files.","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.26757812,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Option 3: Add to your","depth":24,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.06484375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"spq","depth":25,"bounds":{"left":0.4234375,"top":0.017361112,"width":0.010546875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"alias","depth":24,"bounds":{"left":0.43554688,"top":0.017361112,"width":0.015625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"Update the alias to always checkpoint first:","depth":23,"bounds":{"left":0.35703126,"top":0.017361112,"width":0.12265625,"height":0.00069444446},"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":25,"bounds":{"left":0.62539065,"top":0.017361112,"width":0.012890625,"height":0.00069444446},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":24,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.0109375,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"alias","depth":26,"bounds":{"left":0.35976562,"top":0.017361112,"width":0.016796876,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.3761719,"top":0.017361112,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"spq","depth":26,"bounds":{"left":0.37929687,"top":0.017361112,"width":0.010546875,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"=","depth":26,"bounds":{"left":0.3894531,"top":0.017361112,"width":0.003515625,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"'sqlite3 -json ~/.screenpipe/db.sqlite'","depth":26,"bounds":{"left":0.39257812,"top":0.017361112,"width":0.12851563,"height":0.00069444446},"role_description":"text"},{"role":"AXStaticText","text":"","depth":26,"bounds":{"left":0.640625,"top":0.017361112,"width":0.00078125,"height":0.00069444446},"role_description":"text"}]...
|
-5629456085808833298
|
-9070289932752300872
|
app_switch
|
accessibility
|
NULL
|
Skip to content
Skip to content
Click to collapse
Skip to content
Skip to content
Click to collapse
⌘B
Drag to resize
Open sidebar
Chat
Cowork
Code
New chat ⌘N
New chat
⌘N
Projects
Customize
Artifacts
Pinned
Bulgarian citizenship application process for EU residents
More options for Bulgarian citizenship application process for EU residents
Dawarich location tracking project
More options for Dawarich location tracking project
Recents
View all
Reviewing recent conversation highlights
More options for Reviewing recent conversation highlights
Screenpipe WAL processing when stopped
More options for Screenpipe WAL processing when stopped
Mac aliases not recognized
More options for Mac aliases not recognized
Boosteroid still recording despite ignored windows setting
More options for Boosteroid still recording despite ignored windows setting
Missing JavaScript promise in authorization response
More options for Missing JavaScript promise in authorization response
Linux SQLite UI for NAS
More options for Linux SQLite UI for NAS
Claude API 500 internal server error
More options for Claude API 500 internal server error
Screenpipe query capabilities and usage
More options for Screenpipe query capabilities and usage
eGPU compatibility with Mac mini and Studio
More options for eGPU compatibility with Mac mini and Studio
Understanding OpenRouter API gateway
More options for Understanding OpenRouter API gateway
Screenpipe 14-day retention explained
More options for Screenpipe 14-day retention explained
Reddit homepage feed overview
More options for Reddit homepage feed overview
Docker container not visible in console
More options for Docker container not visible in console
DIA browser RAM configuration
More options for DIA browser RAM configuration
Screenpipe company background
More options for Screenpipe company background
DSK Bank Bulgaria secure investing explained
More options for DSK Bank Bulgaria secure investing explained
Building a comprehensive personal homelab system
More options for Building a comprehensive personal homelab system
Importing Google Timeline data to Owntracks
More options for Importing Google Timeline data to Owntracks
Chromecast remote volume buttons not working
More options for Chromecast remote volume buttons not working
Screenpipe free version guide
More options for Screenpipe free version guide
Updated to 1.3109.0
Relaunch to apply
Relaunch
Lukas Kovalik
Lukas Kovalik
Get apps and extensions
Screenpipe WAL processing when stopped
Screenpipe WAL processing when stopped
More options for Screenpipe WAL processing when stopped
Open sidebar
Share chat
how to make the screenpipe wal being processed. It seems it is not working when the screenpipe is stopped
17 Apr
Retry
Edit
Copy
WAL (Write-Ahead Log) in SQLite needs to be checkpointed to merge pending data into the main database file. When Screenpipe stops, the WAL may not be fully checkpointed.
The issue
The issue
SQLite WAL mode keeps a separate
.sqlite-wal
file. Data there is "pending" until a checkpoint runs. Screenpipe normally handles this while running, but if it stops abruptly or you query while it's stopped, the WAL data may appear missing to external readers.
Solutions
Solutions
Option 1: Force a checkpoint manually (safest)
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA wal_checkpoint(TRUNCATE);"
This flushes all WAL data into the main DB file and truncates the WAL. Run this after Screenpipe stops.
Option 2: Make your queries WAL-aware
When querying with
sqlite3
directly, open in WAL mode explicitly so it reads both the DB and WAL together:
Copy to clipboard
bash
sqlite3 ~/.screenpipe/db.sqlite
"PRAGMA journal_mode=WAL; SELECT ..."
Actually,
sqlite3
already reads WAL automatically — but only if the WAL file is present and not corrupted. The real fix is ensuring the connection sees both files.
Option 3: Add to your
spq
alias
Update the alias to always checkpoint first:
Copy to clipboard
bash
alias
spq
=
'sqlite3 -json ~/.screenpipe/db.sqlite'...
|
NULL
|
|
51121
|
1101
|
36
|
2026-04-18T10:44:21.841972+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-18/1776 /Users/lukas/.screenpipe/data/data/2026-04-18/1776509061841_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
-rw-r--r-- 1 lukas staff 361011 17 Apr 09:5 -rw-r--r-- 1 lukas staff 361011 17 Apr 09:53 compact_monitor_1_1776408824270.mp4
-rw-r--r-- 1 lukas staff 3365373 17 Apr 09:59 compact_monitor_1_1776409136717.mp4
-rw-r--r-- 1 lukas staff 2601020 17 Apr 10:04 compact_monitor_1_1776409450395.mp4
-rw-r--r-- 1 lukas staff 3497066 17 Apr 10:09 compact_monitor_1_1776409759172.mp4
-rw-r--r-- 1 lukas staff 1507571 17 Apr 10:14 compact_monitor_1_1776410067944.mp4
-rw-r--r-- 1 lukas staff 943396 17 Apr 10:19 compact_monitor_1_1776410372484.mp4
-rw-r--r-- 1 lukas staff 1225040 17 Apr 10:24 compact_monitor_1_1776410674629.mp4
-rw-r--r-- 1 lukas staff 2224229 17 Apr 10:29 compact_monitor_1_1776410981487.mp4
-rw-r--r-- 1 lukas staff 398291 17 Apr 10:34 compact_monitor_1_1776411298373.mp4
-rw-r--r-- 1 lukas staff 4376235 17 Apr 10:40 compact_monitor_1_1776411601686.mp4
-rw-r--r-- 1 lukas staff 5007720 17 Apr 10:45 compact_monitor_1_1776411923026.mp4
-rw-r--r-- 1 lukas staff 2281319 17 Apr 10:50 compact_monitor_1_1776412242015.mp4
-rw-r--r-- 1 lukas staff 3182872 17 Apr 10:56 compact_monitor_1_1776412560658.mp4
-rw-r--r-- 1 lukas staff 3896056 17 Apr 11:01 compact_monitor_1_1776412881181.mp4
-rw-r--r-- 1 lukas staff 6279582 17 Apr 11:06 compact_monitor_1_1776413192507.mp4
-rw-r--r-- 1 lukas staff 6492126 17 Apr 11:12 compact_monitor_1_1776413508291.mp4
-rw-r--r-- 1 lukas staff 6045038 17 Apr 11:17 compact_monitor_1_1776413848971.mp4
-rw-r--r-- 1 lukas staff 4968033 17 Apr 11:23 compact_monitor_1_1776414180658.mp4
-rw-r--r-- 1 lukas staff 7109088 17 Apr 11:28 compact_monitor_1_1776414513921.mp4
-rw-r--r-- 1 lukas staff 9099339 17 Apr 11:34 compact_monitor_1_1776414839842.mp4
-rw-r--r-- 1 lukas staff 926165 17 Apr 11:34 compact_monitor_1_1776414858793.mp4
-rw-r--r-- 1 lukas staff 9246778 17 Apr 11:39 compact_monitor_1_1776415182593.mp4
-rw-r--r-- 1 lukas staff 8361876 17 Apr 11:45 compact_monitor_1_1776415505403.mp4
-rw-r--r-- 1 lukas staff 7215549 17 Apr 11:50 compact_monitor_1_1776415841776.mp4
-rw-r--r-- 1 lukas staff 6234445 17 Apr 11:56 compact_monitor_1_1776416174658.mp4
-rw-r--r-- 1 lukas staff 11694078 17 Apr 12:01 compact_monitor_1_1776416497484.mp4
-rw-r--r-- 1 lukas staff 7033085 17 Apr 12:07 compact_monitor_1_1776416834587.mp4
-rw-r--r-- 1 lukas staff 4309161 17 Apr 12:12 compact_monitor_1_1776417157754.mp4
-rw-r--r-- 1 lukas staff 3782878 17 Apr 12:18 compact_monitor_1_1776417481425.mp4
-rw-r--r-- 1 lukas staff 5597264 17 Apr 12:23 compact_monitor_1_1776417802134.mp4
-rw-r--r-- 1 lukas staff 5667747 17 Apr 12:28 compact_monitor_1_1776418119908.mp4
-rw-r--r-- 1 lukas staff 8840842 17 Apr 12:34 compact_monitor_1_1776418443506.mp4
-rw-r--r-- 1 lukas staff 5442395 17 Apr 12:39 compact_monitor_1_1776418761701.mp4
-rw-r--r-- 1 lukas staff 4054014 17 Apr 12:44 compact_monitor_1_1776419074083.mp4
-rw-r--r-- 1 lukas staff 3734539 17 Apr 12:49 compact_monitor_1_1776419388949.mp4
-rw-r--r-- 1 lukas staff 3137915 17 Apr 12:55 compact_monitor_1_1776419701686.mp4
-rw-r--r-- 1 lukas staff 3064654 17 Apr 13:00 compact_monitor_1_1776420015547.mp4
-rw-r--r-- 1 lukas staff 1189833 17 Apr 13:05 compact_monitor_1_1776420321592.mp4
-rw-r--r-- 1 lukas staff 1862832 17 Apr 13:10 compact_monitor_1_1776420633887.mp4
-rw-r--r-- 1 lukas staff 520517 17 Apr 13:15 compact_monitor_1_1776420947144.mp4
-rw-r--r-- 1 lukas staff 790509 17 Apr 13:20 compact_monitor_1_1776421253865.mp4
-rw-r--r-- 1 lukas staff 1155599 17 Apr 13:26 compact_monitor_1_1776421566995.mp4
-rw-r--r-- 1 lukas staff 626836 17 Apr 13:31 compact_monitor_1_1776421884013.mp4
-rw-r--r-- 1 lukas staff 2709758 17 Apr 13:36 compact_monitor_1_1776422194788.mp4
-rw-r--r-- 1 lukas staff 894214 17 Apr 13:41 compact_monitor_1_1776422513565.mp4
-rw-r--r-- 1 lukas staff 1298826 17 Apr 13:47 compact_monitor_1_1776422829105.mp4
-rw-r--r-- 1 lukas staff 3454896 17 Apr 13:52 compact_monitor_1_1776423143916.mp4
-rw-r--r-- 1 lukas staff 1369217 17 Apr 13:57 compact_monitor_1_1776423466196.mp4
-rw-r--r-- 1 lukas staff 1677163 17 Apr 14:03 compact_monitor_1_1776423783420.mp4
-rw-r--r-- 1 lukas staff 556702 17 Apr 14:08 compact_monitor_1_1776424109344.mp4
-rw-r--r-- 1 lukas staff 1001886 17 Apr 14:13 compact_monitor_1_1776424416957.mp4
-rw-r--r-- 1 lukas staff 1485547 17 Apr 14:18 compact_monitor_1_1776424730536.mp4
-rw-r--r-- 1 lukas staff 935536 17 Apr 14:24 compact_monitor_1_1776425050631.mp4
-rw-r--r-- 1 lukas staff 1119642 17 Apr 14:29 compact_monitor_1_1776425372446.mp4
-rw-r--r-- 1 lukas staff 430883 17 Apr 14:34 compact_monitor_1_1776425690857.mp4
-rw-r--r-- 1 lukas staff 427035 17 Apr 14:40 compact_monitor_1_1776426003278.mp4
-rw-r--r-- 1 lukas staff 654605 17 Apr 14:45 compact_monitor_1_1776426312497.mp4
-rw-r--r-- 1 lukas staff 440539 17 Apr 14:50 compact_monitor_1_1776426625506.mp4
-rw-r--r-- 1 lukas staff 439802 17 Apr 14:55 compact_monitor_1_1776426939895.mp4
-rw-r--r-- 1 lukas staff 557755 17 Apr 15:01 compact_monitor_1_1776427261945.mp4
-rw-r--r-- 1 lukas staff 1071442 17 Apr 15:06 compact_monitor_1_1776427571985.mp4
-rw-r--r-- 1 lukas staff 2606361 17 Apr 15:11 compact_monitor_1_1776427882803.mp4
-rw-r--r-- 1 lukas staff 951201 17 Apr 15:16 compact_monitor_1_1776428192090.mp4
-rw-r--r-- 1 lukas staff 322306 17 Apr 15:21 compact_monitor_1_1776428505150.mp4
-rw-r--r-- 1 lukas staff 331163 17 Apr 15:26 compact_monitor_1_1776428811953.mp4
-rw-r--r-- 1 lukas staff 737469 17 Apr 15:32 compact_monitor_1_1776429127526.mp4
-rw-r--r-- 1 lukas staff 352621 17 Apr 15:37 compact_monitor_1_1776429442374.mp4
-rw-r--r-- 1 lukas staff 444203 17 Apr 15:42 compact_monitor_1_1776429752217.mp4
-rw-r--r-- 1 lukas staff 1407505 17 Apr 15:47 compact_monitor_1_1776430066920.mp4
-rw-r--r-- 1 lukas staff 360974 17 Apr 15:53 compact_monitor_1_1776430376918.mp4
-rw-r--r-- 1 lukas staff 321565 17 Apr 15:58 compact_monitor_1_1776430691588.mp4
-rw-r--r-- 1 lukas staff 317048 17 Apr 16:03 compact_monitor_1_1776431003504.mp4
-rw-r--r-- 1 lukas staff 321894 17 Apr 16:08 compact_monitor_1_1776431317637.mp4
-rw-r--r-- 1 lukas staff 333513 17 Apr 16:13 compact_monitor_1_1776431629041.mp4
-rw-r--r-- 1 lukas staff 326264 17 Apr 16:19 compact_monitor_1_1776431942238.mp4
-rw-r--r-- 1 lukas staff 366336 17 Apr 16:24 compact_monitor_1_1776432254490.mp4
-rw-r--r-- 1 lukas staff 327825 17 Apr 16:29 compact_monitor_1_1776432574989.mp4
-rw-r--r-- 1 lukas staff 1048363 17 Apr 16:34 compact_monitor_1_1776432882794.mp4
-rw-r--r-- 1 lukas staff 1668969 17 Apr 16:39 compact_monitor_1_1776433188842.mp4
-rw-r--r-- 1 lukas staff 1283899 17 Apr 16:44 compact_monitor_1_1776433493858.mp4
-rw-r--r-- 1 lukas staff 314118 17 Apr 16:50 compact_monitor_1_1776433800642.mp4
-rw-r--r-- 1 lukas staff 547478 17 Apr 16:55 compact_monitor_1_1776434111371.mp4
-rw-r--r-- 1 lukas staff 868654 17 Apr 17:00 compact_monitor_1_1776434420728.mp4
-rw-r--r-- 1 lukas staff 885215 17 Apr 17:05 compact_monitor_1_1776434723901.mp4
-rw-r--r-- 1 lukas staff 508905 17 Apr 17:10 compact_monitor_1_1776435038035.mp4
-rw-r--r-- 1 lukas staff 591766 17 Apr 17:16 compact_monitor_1_1776435363044.mp4
-rw-r--r-- 1 lukas staff 2031034 17 Apr 17:21 compact_monitor_1_1776435683729.mp4
-rw-r--r-- 1 lukas staff 2136043 17 Apr 17:26 compact_monitor_1_1776436005076.mp4
-rw-r--r-- 1 lukas staff 578716 17 Apr 17:32 compact_monitor_1_1776436319163.mp4
-rw-r--r-- 1 lukas staff 1308705 17 Apr 17:37 compact_monitor_1_1776436630439.mp4
-rw-r--r-- 1 lukas staff 958771 17 Apr 17:42 compact_monitor_1_1776436939049.mp4
-rw-r--r-- 1 lukas staff 797771 17 Apr 17:47 compact_monitor_1_1776437247467.mp4
-rw-r--r-- 1 lukas staff 1230186 17 Apr 17:52 compact_monitor_1_1776437554897.mp4
-rw-r--r-- 1 lukas staff 862632 17 Apr 17:57 compact_monitor_1_1776437862465.mp4
-rw-r--r-- 1 lukas staff 757441 17 Apr 18:02 compact_monitor_1_1776438171931.mp4
-rw-r--r-- 1 lukas staff 686680 17 Apr 18:08 compact_monitor_1_1776438479816.mp4
-rw-r--r-- 1 lukas staff 1078524 17 Apr 18:13 compact_monitor_1_1776438783339.mp4
-rw-r--r-- 1 lukas staff 496616 17 Apr 18:18 compact_monitor_1_1776439090720.mp4
-rw-r--r-- 1 lukas staff 774571 17 Apr 18:23 compact_monitor_1_1776439396975.mp4
-rw-r--r-- 1 lukas staff 1160291 17 Apr 18:28 compact_monitor_1_1776439703924.mp4
-rw-r--r-- 1 lukas staff 632541 17 Apr 18:34 compact_monitor_1_1776440053428.mp4
-rw-r--r-- 1 lukas staff 3291212 17 Apr 21:05 compact_monitor_1_1776449135667.mp4
-rw-r--r-- 1 lukas staff 768306 17 Apr 09:07 compact_monitor_2_1776406035126.mp4
-rw-r--r-- 1 lukas staff 9277508 17 Apr 09:12 compact_monitor_2_1776406343152.mp4
-rw-r--r-- 1 lukas staff 627114 17 Apr 09:12 compact_monitor_2_1776406349962.mp4
-rw-r--r-- 1 lukas staff 11129246 17 Apr 09:17 compact_monitor_2_1776406653780.mp4
-rw-r--r-- 1 lukas staff 8352174 17 Apr 09:22 compact_monitor_2_1776406964880.mp4
-rw-r--r-- 1 lukas staff 8551960 17 Apr 09:28 compact_monitor_2_1776407277493.mp4
-rw-r--r-- 1 lukas staff 679244 17 Apr 09:28 compact_monitor_2_1776407283693.mp4
-rw-r--r-- 1 lukas staff 12641011 17 Apr 09:33 compact_monitor_2_1776407588804.mp4
-rw-r--r-- 1 lukas staff 9384615 17 Apr 09:38 compact_monitor_2_1776407900099.mp4
-rw-r--r-- 1 lukas staff 4024767 17 Apr 09:43 compact_monitor_2_1776408207652.mp4
-rw-r--r-- 1 lukas staff 2627851 17 Apr 09:48 compact_monitor_2_1776408517311.mp4
-rw-r--r-- 1 lukas staff 4877190 17 Apr 09:53 compact_monitor_2_1776408826734.mp4
-rw-r--r-- 1 lukas staff 3807909 17 Apr 09:59 compact_monitor_2_1776409142638.mp4
-rw-r--r-- 1 lukas staff 4217716 17 Apr 10:04 compact_monitor_2_1776409454184.mp4
-rw-r--r-- 1 lukas staff 1717578 17 Apr 10:09 compact_monitor_2_1776409763153.mp4
-rw-r--r-- 1 lukas staff 1067064 17 Apr 10:14 compact_monitor_2_1776410070480.mp4
-rw-r--r-- 1 lukas staff 442425 17 Apr 10:19 compact_monitor_2_1776410373664.mp4
-rw-r--r-- 1 lukas staff 444497 17 Apr 10:24 compact_monitor_2_1776410676126.mp4
-rw-r--r-- 1 lukas staff 3670025 17 Apr 10:29 compact_monitor_2_1776410986705.mp4
-rw-r--r-- 1 lukas staff 448939 17 Apr 10:35 compact_monitor_2_1776411299875.mp4
-rw-r--r-- 1 lukas staff 4490377 17 Apr 10:40 compact_monitor_2_1776411611306.mp4
-rw-r--r-- 1 lukas staff 7437798 17 Apr 10:45 compact_monitor_2_1776411929615.mp4
-rw-r--r-- 1 lukas staff 6915447 17 Apr 10:50 compact_monitor_2_1776412245368.mp4
-rw-r--r-- 1 lukas staff 7988703 17 Apr 10:56 compact_monitor_2_1776412568330.mp4
-rw-r--r-- 1 lukas staff 5512416 17 Apr 11:01 compact_monitor_2_1776412886253.mp4
-rw-r--r-- 1 lukas staff 3107875 17 Apr 11:06 compact_monitor_2_1776413199096.mp4
-rw-r--r-- 1 lukas staff 4158550 17 Apr 11:12 compact_monitor_2_1776413529707.mp4
-rw-r--r-- 1 lukas staff 4756064 17 Apr 11:17 compact_monitor_2_1776413863997.mp4
-rw-r--r-- 1 lukas staff 5281060 17 Apr 11:23 compact_monitor_2_1776414194026.mp4
-rw-r--r-- 1 lukas staff 2605046 17 Apr 11:28 compact_monitor_2_1776414528521.mp4
-rw-r--r-- 1 lukas staff 5473302 17 Apr 11:34 compact_monitor_2_1776414861255.mp4
-rw-r--r-- 1 lukas staff 2791759 17 Apr 11:40 compact_monitor_2_1776415194836.mp4
-rw-r--r-- 1 lukas staff 5494699 17 Apr 11:45 compact_monitor_2_1776415523929.mp4
-rw-r--r-- 1 lukas staff 4025150 17 Apr 11:51 compact_monitor_2_1776415859261.mp4
-rw-r--r-- 1 lukas staff 2583684 17 Apr 11:56 compact_monitor_2_1776416187267.mp4
-rw-r--r-- 1 lukas staff 5240195 17 Apr 12:02 compact_monitor_2_1776416514967.mp4
-rw-r--r-- 1 lukas staff 3629687 17 Apr 12:07 compact_monitor_2_1776416846005.mp4
-rw-r--r-- 1 lukas staff 5021721 17 Apr 12:12 compact_monitor_2_1776417172355.mp4
-rw-r--r-- 1 lukas staff 2986447 17 Apr 12:18 compact_monitor_2_1776417492277.mp4
-rw-r--r-- 1 lukas staff 3976942 17 Apr 12:23 compact_monitor_2_1776417810578.mp4
-rw-r--r-- 1 lukas staff 4294715 17 Apr 12:29 compact_monitor_2_1776418132304.mp4
-rw-r--r-- 1 lukas staff 4698998 17 Apr 12:34 compact_monitor_2_1776418452374.mp4
-rw-r--r-- 1 lukas staff 3160886 17 Apr 12:39 compact_monitor_2_1776418768555.mp4
-rw-r--r-- 1 lukas staff 1776908 17 Apr 12:44 compact_monitor_2_1776419082274.mp4
-rw-r--r-- 1 lukas staff 1500725 17 Apr 12:49 compact_monitor_2_1776419394506.mp4
-rw-r--r-- 1 lukas staff 1279602 17 Apr 12:55 compact_monitor_2_1776419709571.mp4
-rw-r--r-- 1 lukas staff 2017894 17 Apr 13:00 compact_monitor_2_1776420018859.mp4
-rw-r--r-- 1 lukas staff 5639690 17 Apr 13:05 compact_monitor_2_1776420324337.mp4
-rw-r--r-- 1 lukas staff 4587635 17 Apr 13:10 compact_monitor_2_1776420636421.mp4
-rw-r--r-- 1 lukas staff 2001162 17 Apr 13:15 compact_monitor_2_1776420949555.mp4
-rw-r--r-- 1 lukas staff 3658362 17 Apr 13:21 compact_monitor_2_1776421256306.mp4
-rw-r--r-- 1 lukas staff 7755716 17 Apr 13:26 compact_monitor_2_1776421570292.mp4
-rw-r--r-- 1 lukas staff 3362766 17 Apr 13:31 compact_monitor_2_1776421886698.mp4
-rw-r--r-- 1 lukas staff 6893513 17 Apr 13:36 compact_monitor_2_1776422197625.mp4
-rw-r--r-- 1 lukas staff 4788146 17 Apr 13:42 compact_monitor_2_1776422516390.mp4
-rw-r--r-- 1 lukas staff 4840848 17 Apr 13:47 compact_monitor_2_1776422832136.mp4
-rw-r--r-- 1 lukas staff 9094075 17 Apr 13:52 compact_monitor_2_1776423148671.mp4
-rw-r--r-- 1 lukas staff 10072846 17 Apr 13:57 compact_monitor_2_1776423469970.mp4
-rw-r--r-- 1 lukas staff 13504297 17 Apr 14:03 compact_monitor_2_1776423787536.mp4
-rw-r--r-- 1 lukas staff 1622612 17 Apr 14:08 compact_monitor_2_1776424110832.mp4
-rw-r--r-- 1 lukas staff 5427700 17 Apr 14:13 compact_monitor_2_1776424419206.mp4
-rw-r--r-- 1 lukas staff 1746789 17 Apr 14:19 compact_monitor_2_1776424736034.mp4
-rw-r--r-- 1 lukas staff 4232204 17 Apr 14:24 compact_monitor_2_1776425054084.mp4
-rw-r--r-- 1 lukas staff 4457408 17 Apr 14:29 compact_monitor_2_1776425375574.mp4
-rw-r--r-- 1 lukas staff 174979 17 Apr 14:34 compact_monitor_2_1776425692307.mp4
-rw-r--r-- 1 lukas staff 169969 17 Apr 14:40 compact_monitor_2_1776426005170.mp4
-rw-r--r-- 1 lukas staff 2723106 17 Apr 14:45 compact_monitor_2_1776426315173.mp4
-rw-r--r-- 1 lukas staff 3313658 17 Apr 14:50 compact_monitor_2_1776426627449.mp4
-rw-r--r-- 1 lukas staff 4720437 17 Apr 14:55 compact_monitor_2_1776426943213.mp4
-rw-r--r-- 1 lukas staff 3589313 17 Apr 15:01 compact_monitor_2_1776427263991.mp4
-rw-r--r-- 1 lukas staff 6295236 17 Apr 15:06 compact_monitor_2_1776427573875.mp4
-rw-r--r-- 1 lukas staff 3390902 17 Apr 15:11 compact_monitor_2_1776427885283.mp4
-rw-r--r-- 1 lukas staff 1637607 17 Apr 15:16 compact_monitor_2_1776428194704.mp4
-rw-r--r-- 1 lukas staff 1355327 17 Apr 15:21 compact_monitor_2_1776428506246.mp4
-rw-r--r-- 1 lukas staff 4897048 17 Apr 15:27 compact_monitor_2_1776428815157.mp4
-rw-r--r-- 1 lukas staff 4930900 17 Apr 15:32 compact_monitor_2_1776429130905.mp4
-rw-r--r-- 1 lukas staff 2581578 17 Apr 15:37 compact_monitor_2_1776429444142.mp4
-rw-r--r-- 1 lukas staff 4764105 17 Apr 15:42 compact_monitor_2_1776429755437.mp4
-rw-r--r-- 1 lukas staff 4039902 17 Apr 15:47 compact_monitor_2_1776430069174.mp4
-rw-r--r-- 1 lukas staff 4735734 17 Apr 15:53 compact_monitor_2_1776430380212.mp4
-rw-r--r-- 1 lukas staff 2195410 17 Apr 15:58 compact_monitor_2_1776430693483.mp4
-rw-r--r-- 1 lukas staff 1857322 17 Apr 16:03 compact_monitor_2_1776431005386.mp4
-rw-r--r-- 1 lukas staff 3412100 17 Apr 16:08 compact_monitor_2_1776431319373.mp4
-rw-r--r-- 1 lukas staff 6928537 17 Apr 16:13 compact_monitor_2_1776431631778.mp4
-rw-r--r-- 1 lukas staff 4990793 17 Apr 16:19 compact_monitor_2_1776431944571.mp4
-rw-r--r-- 1 lukas staff 8242278 17 Apr 16:24 compact_monitor_2_1776432258818.mp4
-rw-r--r-- 1 lukas staff 451999 17 Apr 16:24 compact_monitor_2_1776432269036.mp4
-rw-r--r-- 1 lukas staff 2978452 17 Apr 16:29 compact_monitor_2_1776432577467.mp4
-rw-r--r-- 1 lukas staff 1248291 17 Apr 16:34 compact_monitor_2_1776432884349.mp4
-rw-r--r-- 1 lukas staff 2963525 17 Apr 16:39 compact_monitor_2_1776433190284.mp4
-rw-r--r-- 1 lukas staff 1958858 17 Apr 16:44 compact_monitor_2_1776433495477.mp4
-rw-r--r-- 1 lukas staff 1656966 17 Apr 16:50 compact_monitor_2_1776433802347.mp4
-rw-r--r-- 1 lukas staff 2813856 17 Apr 16:55 compact_monitor_2_1776434112909.mp4
-rw-r--r-- 1 lukas staff 510112 17 Apr 17:00 compact_monitor_2_1776434422384.mp4
-rw-r--r-- 1 lukas staff 4354386 17 Apr 17:05 compact_monitor_2_1776434725886.mp4
-rw-r--r-- 1 lukas staff 9798615 17 Apr 17:10 compact_monitor_2_1776435041115.mp4
-rw-r--r-- 1 lukas staff 4503179 17 Apr 17:16 compact_monitor_2_1776435368020.mp4
-rw-r--r-- 1 lukas staff 857002 17 Apr 17:16 compact_monitor_2_1776435376040.mp4
-rw-r--r-- 1 lukas staff 8587996 17 Apr 17:21 compact_monitor_2_1776435687051.mp4
-rw-r--r-- 1 lukas staff 5052247 17 Apr 17:26 compact_monitor_2_1776436009787.mp4
-rw-r--r-- 1 lukas staff 2947924 17 Apr 17:32 compact_monitor_2_1776436320877.mp4
-rw-r--r-- 1 lukas staff 689465 17 Apr 17:37 compact_monitor_2_1776436632536.mp4
-rw-r--r-- 1 lukas staff 1353469 17 Apr 17:42 compact_monitor_2_1776436940788.mp4
-rw-r--r-- 1 lukas staff 870893 17 Apr 17:47 compact_monitor_2_1776437249077.mp4
-rw-r--r-- 1 lukas staff 2653839 17 Apr 17:52 compact_monitor_2_1776437556659.mp4
-rw-r--r-- 1 lukas staff 4310138 17 Apr 17:57 compact_monitor_2_1776437864727.mp4
-rw-r--r-- 1 lukas staff 3683875 17 Apr 18:02 compact_monitor_2_1776438173313.mp4
-rw-r--r-- 1 lukas staff 1916129 17 Apr 18:08 compact_monitor_2_1776438481043.mp4
-rw-r--r-- 1 lukas staff 2349626 17 Apr 18:13 compact_monitor_2_1776438785553.mp4
-rw-r--r-- 1 lukas staff 641202 17 Apr 18:18 compact_monitor_2_1776439092011.mp4
-rw-r--r-- 1 lukas staff 3006319 17 Apr 18:23 compact_monitor_2_1776439398485.mp4
-rw-r--r-- 1 lukas staff 1675776 17 Apr 18:28 compact_monitor_2_1776439705765.mp4
-rw-r--r-- 1 lukas staff 4465225 17 Apr 18:34 compact_monitor_2_1776440055922.mp4
-rw-r--r-- 1 lukas staff 2351472 17 Apr 21:05 compact_monitor_2_1776449140917.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ rsync -av --ignore-existing \
~/.screenpipe/data/data/2026-04-14/ \
/Volumes/Test/screenpipe/data/2026-04-14/
building file list ... done
./
compact_monitor_1_1776236348162.mp4
compact_monitor_1_1776236355103.mp4
compact_monitor_2_1776236357169.mp4
compact_monitor_2_1776236373794.mp4
sent 41217485 bytes received 114 bytes 4338694.63 bytes/sec
total size is 1085072596 speedup is 26.33
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ cd ..
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-14
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ll
total 2120256
drwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 .
drwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..
-rw-r--r--@ 1 lukas staff 581687 14 Apr 09:34 compact_monitor_1_1776148466581.mp4
-rw-r--r--@ 1 lukas staff 702153 14 Apr 09:39 compact_monitor_1_1776148768082.mp4
-rw-r--r--@ 1 lukas staff 251978 14 Apr 09:44 compact_monitor_1_1776149071467.mp4
-rw-r--r-- 1 lukas staff 1717429 14 Apr 09:49 compact_monitor_1_1776149373136.mp4
-rw-r--r-- 1 lukas staff 3477530 14 Apr 09:54 compact_monitor_1_1776149679747.mp4
-rw-r--r-- 1 lukas staff 4579266 14 Apr 09:59 compact_monitor_1_1776149991618.mp4
-rw-r--r-- 1 lukas staff 2305892 14 Apr 10:05 compact_monitor_1_1776150305479.mp4
-rw-r--r-- 1 lukas staff 2464098 14 Apr 10:10 compact_monitor_1_1776150611148.mp4
-rw-r--r-- 1 lukas staff 2640699 14 Apr 10:15 compact_monitor_1_1776150917977.mp4
-rw-r--r-- 1 lukas staff 2938324 14 Apr 10:20 compact_monitor_1_1776151225175.mp4
-rw-r--r-- 1 lukas staff 5734426 14 Apr 10:25 compact_monitor_1_1776151533655.mp4
-rw-r--r-- 1 lukas staff 711441 14 Apr 10:30 compact_monitor_1_1776151841776.mp4
-rw-r--r-- 1 lukas staff 373214 14 Apr 10:35 compact_monitor_1_1776152149591.mp4
-rw-r--r-- 1 lukas staff 259200 14 Apr 10:40 compact_monitor_1_1776152456802.mp4
-rw-r--r-- 1 lukas staff 563549 14 Apr 10:46 compact_monitor_1_1776152770846.mp4
-rw-r--r-- 1 lukas staff 1085034 14 Apr 10:51 compact_monitor_1_1776153081304.mp4
-rw-r--r-- 1 lukas staff 5856145 14 Apr 10:56 compact_monitor_1_1776153389824.mp4
-rw-r--r-- 1 lukas staff 3729206 14 Apr 11:01 compact_monitor_1_1776153702196.mp4
-rw-r--r-- 1 lukas staff 1381857 14 Apr 11:06 compact_monitor_1_1776154011626.mp4
-rw-r--r-- 1 lukas staff 590718 14 Apr 11:12 compact_monitor_1_1776154319547.mp4
-rw-r--r-- 1 lukas staff 1306438 14 Apr 11:17 compact_monitor_1_1776154623893.mp4
-rw-r--r-- 1 lukas staff 216930 14 Apr 11:22 compact_monitor_1_1776154930014.mp4
-rw-r--r-- 1 lukas staff 473698 14 Apr 11:27 compact_monitor_1_1776155238144.mp4
-rw-r--r-- 1 lukas staff 3051314 14 Apr 11:32 compact_monitor_1_1776155547239.mp4
-rw-r--r-- 1 lukas staff 253380 14 Apr 11:37 compact_monitor_1_1776155850943.mp4
-rw-r--r-- 1 lukas staff 258154 14 Apr 11:42 compact_monitor_1_1776156154229.mp4
-rw-r--r-- 1 lukas staff 962893 14 Apr 11:47 compact_monitor_1_1776156458244.mp4
-rw-r--r-- 1 lukas staff 1806149 14 Apr 11:52 compact_monitor_1_1776156762972.mp4
-rw-r--r-- 1 lukas staff 2280711 14 Apr 11:57 compact_monitor_1_1776157067935.mp4
-rw-r--r-- 1 lukas staff 1779777 14 Apr 12:03 compact_monitor_1_1776157380235.mp4
-rw-r--r-- 1 lukas staff 792745 14 Apr 12:08 compact_monitor_1_1776157700511.mp4
-rw-r--r-- 1 lukas staff 290618 14 Apr 12:13 compact_monitor_1_1776158016840.mp4
-rw-r--r-- 1 lukas staff 572761 14 Apr 12:18 compact_monitor_1_1776158333836.mp4
-rw-r--r-- 1 lukas staff 200419 14 Apr 12:24 compact_monitor_1_1776158651565.mp4
-rw-r--r-- 1 lukas staff 190795 14 Apr 12:29 compact_monitor_1_1776158966333.mp4
-rw-r--r-- 1 lukas staff 2126277 14 Apr 12:34 compact_monitor_1_1776159274939.mp4
-rw-r--r-- 1 lukas staff 3747860 14 Apr 12:39 compact_monitor_1_1776159588710.mp4
-rw-r--r-- 1 lukas staff 2152422 14 Apr 12:45 compact_monitor_1_1776159900733.mp4
-rw-r--r-- 1 lukas staff 709258 14 Apr 12:50 compact_monitor_1_1776160204634.mp4
-rw-r--r-- 1 lukas staff 1158847 14 Apr 12:55 compact_monitor_1_1776160508015.mp4
-rw-r--r-- 1 lukas staff 1813578 14 Apr 13:00 compact_monitor_1_1776160811806.mp4
-rw-r--r-- 1 lukas staff 684607 14 Apr 13:05 compact_monitor_1_1776161119981.mp4
-rw-r--r-- 1 lukas staff 636562 14 Apr 13:10 compact_monitor_1_1776161424648.mp4
-rw-r--r-- 1 lukas staff 323432 14 Apr 13:15 compact_monitor_1_1776161728448.mp4
-rw-r--r-- 1 lukas staff 294055 14 Apr 13:20 compact_monitor_1_1776162032394.mp4
-rw-r--r-- 1 lukas staff 296941 14 Apr 13:25 compact_monitor_1_1776162336175.mp4
-rw-r--r-- 1 lukas staff 292219 14 Apr 13:30 compact_monitor_1_1776162640619.mp4
-rw-r--r-- 1 lukas staff 293726 14 Apr 13:35 compact_monitor_1_1776162943050.mp4
-rw-r--r-- 1 lukas staff 832989 14 Apr 13:40 compact_monitor_1_1776163246420.mp4
-rw-r--r-- 1 lukas staff 1068134 14 Apr 13:45 compact_monitor_1_1776163549145.mp4
-rw-r--r-- 1 lukas staff 501189 14 Apr 13:50 compact_monitor_1_1776163853383.mp4
-rw-r--r-- 1 lukas staff 930299 14 Apr 13:55 compact_monitor_1_1776164155311.mp4
-rw-r--r-- 1 lukas staff 2515358 14 Apr 14:01 compact_monitor_1_1776164459131.mp4
-rw-r--r-- 1 lukas staff 1286863 14 Apr 14:06 compact_monitor_1_1776164766940.mp4
-rw-r--r-- 1 lukas staff 1472795 14 Apr 14:15 compact_monitor_1_1776165318512.mp4
-rw-r--r-- 1 lukas staff 439699 14 Apr 14:20 compact_monitor_1_1776165627501.mp4
-rw-r--r-- 1 lukas staff 519424 14 Apr 14:25 compact_monitor_1_1776165931952.mp4
-rw-r--r-- 1 lukas staff 2267443 14 Apr 14:30 compact_monitor_1_1776166235408.mp4
-rw-r--r-- 1 lukas staff 1637916 14 Apr 14:35 compact_monitor_1_1776166551721.mp4
-rw-r--r-- 1 lukas staff 1111434 14 Apr 14:41 compact_monitor_1_1776166862836.mp4
-rw-r--r-- 1 lukas staff 1546177 14 Apr 14:46 compact_monitor_1_1776167176709.mp4
-rw-r--r-- 1 lukas staff 466769 14 Apr 14:51 compact_monitor_1_1776167484535.mp4
-rw-r--r-- 1 lukas staff 993316 14 Apr 14:56 compact_monitor_1_1776167793776.mp4
-rw-r--r-- 1 lukas staff 2902714 14 Apr 15:01 compact_monitor_1_1776168105399.mp4
-rw-r--r-- 1 lukas staff 1279133 14 Apr 15:06 compact_monitor_1_1776168413169.mp4
-rw-r--r-- 1 lukas staff 1132592 14 Apr 15:12 compact_monitor_1_1776168722629.mp4
-rw-r--r-- 1 lukas staff 355416 14 Apr 15:17 compact_monitor_1_1776169031962.mp4
-rw-r--r-- 1 lukas staff 345697 14 Apr 15:22 compact_monitor_1_1776169337693.mp4
-rw-r--r-- 1 lukas staff 3063911 14 Apr 15:27 compact_monitor_1_1776169641353.mp4
-rw-r--r-- 1 lukas staff 5369163 14 Apr 15:32 compact_monitor_1_1776169957193.mp4
-rw-r--r-- 1 lukas staff 3605997 14 Apr 15:38 compact_monitor_1_1776170274586.mp4
-rw-r--r-- 1 lukas staff 1662201 14 Apr 15:43 compact_monitor_1_1776170596259.mp4
-rw-r--r-- 1 lukas staff 2518520 14 Apr 15:48 compact_monitor_1_1776170900299.mp4
-rw-r--r-- 1 lukas staff 2298616 14 Apr 15:53 compact_monitor_1_1776171206621.mp4
-rw-r--r-- 1 lukas staff 252208 14 Apr 15:58 compact_monitor_1_1776171511042.mp4
-rw-r--r-- 1 lukas staff 547163 14 Apr 16:03 compact_monitor_1_1776171816609.mp4
-rw-r--r-- 1 lukas staff 3548604 14 Apr 16:08 compact_monitor_1_1776172119791.mp4
-rw-r--r-- 1 lukas staff 1006390 14 Apr 16:13 compact_monitor_1_1776172427942.mp4
-rw-r--r-- 1 lukas staff 1168310 14 Apr 16:18 compact_monitor_1_1776172735350.mp4
-rw-r--r-- 1 lukas staff 2138214 14 Apr 16:24 compact_monitor_1_1776173046731.mp4
-rw-r--r-- 1 lukas staff 2138875 14 Apr 16:29 compact_monitor_1_1776173354299.mp4
-rw-r--r-- 1 lukas staff 336470 14 Apr 16:34 compact_monitor_1_1776173662610.mp4
-rw-r--r-- 1 lukas staff 330494 14 Apr 16:39 compact_monitor_1_1776173971011.mp4
-rw-r--r-- 1 lukas staff 574889 14 Apr 16:44 compact_monitor_1_1776174275028.mp4
-rw-r--r-- 1 lukas staff 450335 14 Apr 16:49 compact_monitor_1_1776174580719.mp4
-rw-r--r-- 1 lukas staff 452365 14 Apr 16:54 compact_monitor_1_1776174888498.mp4
-rw-r--r-- 1 lukas staff 499947 14 Apr 16:59 compact_monitor_1_1776175195769.mp4
-rw-r--r-- 1 lukas staff 501324 14 Apr 17:05 compact_monitor_1_1776175516084.mp4
-rw-r--r-- 1 lukas staff 1187862 14 Apr 17:10 compact_monitor_1_1776175831658.mp4
-rw-r--r-- 1 lukas staff 4276500 14 Apr 17:15 compact_monitor_1_1776176143265.mp4
-rw-r--r-- 1 lukas staff 3712128 14 Apr 17:21 compact_monitor_1_1776176471641.mp4
-rw-r--r-- 1 lukas staff 3520036 14 Apr 17:26 compact_monitor_1_1776176786477.mp4
-rw-r--r-- 1 lukas staff 4125306 14 Apr 17:31 compact_monitor_1_1776177099043.mp4
-rw-r--r-- 1 lukas staff 3547886 14 Apr 17:37 compact_monitor_1_1776177433201.mp4
-rw-r--r-- 1 lukas staff 2400891 14 Apr 17:42 compact_monitor_1_1776177752872.mp4
-rw-r--r-- 1 lukas staff 4689207 14 Apr 17:47 compact_monitor_1_1776178058207.mp4
-rw-r--r-- 1 lukas staff 1801277 14 Apr 17:53 compact_monitor_1_1776178379517.mp4
-rw-r--r-- 1 lukas staff 3259926 14 Apr 17:58 compact_monitor_1_1776178686281.mp4
-rw-r--r-- 1 lukas staff 1470635 14 Apr 18:03 compact_monitor_1_1776178992046.mp4
-rw-r--r-- 1 lukas staff 3102429 14 Apr 18:08 compact_monitor_1_1776179297527.mp4
-rw-r--r-- 1 lukas staff 223940 14 Apr 18:13 compact_monitor_1_1776179607218.mp4
-rw-r--r-- 1 lukas staff 871065 14 Apr 18:13 compact_monitor_1_1776179613012.mp4
-rw-r--r-- 1 lukas staff 1029083 14 Apr 18:18 compact_monitor_1_1776179929971.mp4
-rw-r--r-- 1 lukas staff 1117436 14 Apr 18:24 compact_monitor_1_1776180248849.mp4
-rw-r--r-- 1 lukas staff 987269 14 Apr 18:29 compact_monitor_1_1776180569996.mp4
-rw-r--r-- 1 lukas staff 896704 14 Apr 18:34 compact_monitor_1_1776180888049.mp4
-rw-r--r-- 1 lukas staff 1945946 14 Apr 18:40 compact_monitor_1_1776181202583.mp4
-rw-r--r-- 1 lukas staff 862072 14 Apr 18:45 compact_monitor_1_1776181526071.mp4
-rw-r--r-- 1 lukas staff 813756 14 Apr 18:50 compact_monitor_1_1776181848713.mp4
-rw-r--r-- 1 lukas staff 813226 14 Apr 18:56 compact_monitor_1_1776182167765.mp4
-rw-r--r-- 1 lukas staff 792289 14 Apr 19:01 compact_monitor_1_1776182486906.mp4
-rw-r--r-- 1 lukas staff 900197 14 Apr 19:06 compact_monitor_1_1776182803477.mp4
-rw-r--r-- 1 lukas staff 903090 14 Apr 19:12 compact_monitor_1_1776183124102.mp4
-rw-r--r-- 1 lukas staff 821885 14 Apr 19:17 compact_monitor_1_1776183446647.mp4
-rw-r--r-- 1 lukas staff 827224 14 Apr 19:22 compact_monitor_1_1776183765602.mp4
-rw-r--r-- 1 lukas staff 844977 14 Apr 19:28 compact_monitor_1_1776184085319.mp4
-rw-r--r-- 1 lukas staff 4160651 15 Apr 09:59 compact_monitor_1_1776236348162.mp4
-rw-r--r-- 1 lukas staff 2257702 15 Apr 09:59 compact_monitor_1_1776236355103.mp4
-rw-r--r-- 1 lukas staff 803789 14 Apr 09:34 compact_monitor_2_1776148467123.mp4
-rw-r--r-- 1 lukas staff 846598 14 Apr 09:39 compact_monitor_2_1776148769344.mp4
-rw-r--r-- 1 lukas staff 380187 14 Apr 09:44 compact_monitor_2_1776149072222.mp4
-rw-r--r-- 1 lukas staff 4330357 14 Apr 09:49 compact_monitor_2_1776149375411.mp4
-rw-r--r-- 1 lukas staff 5979630 14 Apr 09:54 compact_monitor_2_1776149684838.mp4
-rw-r--r-- 1 lukas staff 5685863 14 Apr 10:00 compact_monitor_2_1776149997069.mp4
-rw-r--r-- 1 lukas staff 1817789 14 Apr 10:05 compact_monitor_2_1776150308175.mp4
-rw-r--r-- 1 lukas staff 3734598 14 Apr 10:10 compact_monitor_2_1776150613826.mp4
-rw-r--r-- 1 lukas staff 7824075 14 Apr 10:15 compact_monitor_2_1776150920663.mp4
-rw-r--r-- 1 lukas staff 6299436 14 Apr 10:20 compact_monitor_2_1776151228707.mp4
-rw-r--r-- 1 lukas staff 3269154 14 Apr 10:25 compact_monitor_2_1776151537695.mp4
-rw-r--r-- 1 lukas staff 9004762 14 Apr 10:30 compact_monitor_2_1776151844100.mp4
-rw-r--r-- 1 lukas staff 4710671 14 Apr 10:35 compact_monitor_2_1776152152089.mp4
-rw-r--r-- 1 lukas staff 11173604 14 Apr 10:41 compact_monitor_2_1776152458959.mp4
-rw-r--r-- 1 lukas staff 6761014 14 Apr 10:46 compact_monitor_2_1776152773411.mp4
-rw-r--r-- 1 lukas staff 3510200 14 Apr 10:51 compact_monitor_2_1776153084189.mp4
-rw-r--r-- 1 lukas staff 5292708 14 Apr 10:56 compact_monitor_2_1776153395785.mp4
-rw-r--r-- 1 lukas staff 5487046 14 Apr 11:01 compact_monitor_2_1776153706319.mp4
-rw-r--r-- 1 lukas staff 5305685 14 Apr 11:06 compact_monitor_2_1776154014738.mp4
-rw-r--r-- 1 lukas staff 1963074 14 Apr 11:12 compact_monitor_2_1776154320980.mp4
-rw-r--r-- 1 lukas staff 2513039 14 Apr 11:17 compact_monitor_2_1776154625932.mp4
-rw-r--r-- 1 lukas staff 2532455 14 Apr 11:22 compact_monitor_2_1776154932083.mp4
-rw-r--r-- 1 lukas staff 5825408 14 Apr 11:27 compact_monitor_2_1776155240989.mp4
-rw-r--r-- 1 lukas staff 2066410 14 Apr 11:32 compact_monitor_2_1776155549265.mp4
-rw-r--r-- 1 lukas staff 3082476 14 Apr 11:37 compact_monitor_2_1776155851806.mp4
-rw-r--r-- 1 lukas staff 1587810 14 Apr 11:42 compact_monitor_2_1776156155857.mp4
-rw-r--r-- 1 lukas staff 2346718 14 Apr 11:47 compact_monitor_2_1776156460205.mp4
-rw-r--r-- 1 lukas staff 1579555 14 Apr 11:52 compact_monitor_2_1776156764898.mp4
-rw-r--r-- 1 lukas staff 5481864 14 Apr 11:57 compact_monitor_2_1776157072094.mp4
-rw-r--r-- 1 lukas staff 6527601 14 Apr 12:03 compact_monitor_2_1776157385210.mp4
-rw-r--r-- 1 lukas staff 9023055 14 Apr 12:08 compact_monitor_2_1776157705883.mp4
-rw-r--r-- 1 lukas staff 7566360 14 Apr 12:13 compact_monitor_2_1776158020136.mp4
-rw-r--r-- 1 lukas staff 8801302 14 Apr 12:19 compact_monitor_2_1776158336585.mp4
-rw-r--r-- 1 lukas staff 4139540 14 Apr 12:24 compact_monitor_2_1776158655295.mp4
-rw-r--r-- 1 lukas staff 2987994 14 Apr 12:29 compact_monitor_2_1776158968629.mp4
-rw-r--r-- 1 lukas staff 6323688 14 Apr 12:34 compact_monitor_2_1776159279327.mp4
-rw-r--r-- 1 lukas staff 2684920 14 Apr 12:40 compact_monitor_2_1776159594527.mp4
-rw-r--r-- 1 lukas staff 1646460 14 Apr 12:45 compact_monitor_2_1776159902504.mp4
-rw-r--r-- 1 lukas staff 1767063 14 Apr 12:50 compact_monitor_2_1776160206071.mp4
-rw-r--r-- 1 lukas staff 1910044 14 Apr 12:55 compact_monitor_2_1776160509646.mp4
-rw-r--r-- 1 lukas staff 5101631 14 Apr 13:00 compact_monitor_2_1776160814860.mp4
-rw-r--r-- 1 lukas staff 2487221 14 Apr 13:05 compact_monitor_2_1776161121862.mp4
-rw-r--r-- 1 lukas staff 1452868 14 Apr 13:10 compact_monitor_2_1776161425872.mp4
-rw-r--r-- 1 lukas staff 2963557 14 Apr 13:15 compact_monitor_2_1776161729470.mp4
-rw-r--r-- 1 lukas staff 984939 14 Apr 13:20 compact_monitor_2_1776162033592.mp4
-rw-r--r-- 1 lukas staff 3411829 14 Apr 13:25 compact_monitor_2_1776162337569.mp4
-rw-r--r-- 1 lukas staff 622723 14 Apr 13:30 compact_monitor_2_1776162641477.mp4
-rw-r--r-- 1 lukas staff 2472562 14 Apr 13:35 compact_monitor_2_1776162943983.mp4
-rw-r--r-- 1 lukas staff 1139489 14 Apr 13:40 compact_monitor_2_1776163247509.mp4
-rw-r--r-- 1 lukas staff 862846 14 Apr 13:45 compact_monitor_2_1776163550848.mp4
-rw-r--r-- 1 lukas staff 274959 14 Apr 13:50 compact_monitor_2_1776163854468.mp4
-rw-r--r-- 1 lukas staff 2036659 14 Apr 13:55 compact_monitor_2_1776164156817.mp4
-rw-r--r-- 1 lukas staff 6134905 14 Apr 14:01 compact_monitor_2_1776164461879.mp4
-rw-r--r-- 1 lukas staff 9022378 14 Apr 14:06 compact_monitor_2_1776164770881.mp4
-rw-r--r-- 1 lukas staff 4566763 14 Apr 14:15 compact_monitor_2_1776165320959.mp4
-rw-r--r-- 1 lukas staff 462447 14 Apr 14:20 compact_monitor_2_1776165629627.mp4
-rw-r--r-- 1 lukas staff 709149 14 Apr 14:25 compact_monitor_2_1776165933147.mp4
-rw-r--r-- 1 lukas staff 4478027 14 Apr 14:30 compact_monitor_2_1776166241146.mp4
-rw-r--r-- 1 lukas staff 7488847 14 Apr 14:36 compact_monitor_2_1776166555947.mp4
-rw-r--r-- 1 lukas staff 7883274 14 Apr 14:41 compact_monitor_2_1776166866538.mp4
-rw-r--r-- 1 lukas staff 2869256 14 Apr 14:46 compact_monitor_2_1776167179562.mp4
-rw-r--r-- 1 lukas staff 3068440 14 Apr 14:51 compact_monitor_2_1776167487518.mp4
-rw-r--r-- 1 lukas staff 1816545 14 Apr 14:56 compact_monitor_2_1776167799896.mp4
-rw-r--r-- 1 lukas staff 3180474 14 Apr 15:01 compact_monitor_2_1776168109470.mp4
-rw-r--r-- 1 lukas staff 3774140 14 Apr 15:07 compact_monitor_2_1776168415670.mp4
-rw-r--r-- 1 lukas staff 4536363 14 Apr 15:12 compact_monitor_2_1776168725137.mp4
-rw-r--r-- 1 lukas staff 2387221 14 Apr 15:17 compact_monitor_2_1776169033283.mp4
-rw-r--r-- 1 lukas staff 2605350 14 Apr 15:22 compact_monitor_2_1776169338888.mp4
-rw-r--r-- 1 lukas staff 6906038 14 Apr 15:27 compact_monitor_2_1776169645977.mp4
-rw-r--r-- 1 lukas staff 5738495 14 Apr 15:32 compact_monitor_2_1776169965047.mp4
-rw-r--r-- 1 lukas staff 5595644 14 Apr 15:38 compact_monitor_2_1776170281359.mp4
-rw-r--r-- 1 lukas staff 584749 14 Apr 15:43 compact_monitor_2_1776170598047.mp4
-rw-r--r-- 1 lukas staff 2633541 14 Apr 15:48 compact_monitor_2_1776170903735.mp4
-rw-r--r-- 1 lukas staff 770182 14 Apr 15:53 compact_monitor_2_1776171208825.mp4
-rw-r--r-- 1 lukas staff 1658362 14 Apr 15:58 compact_monitor_2_1776171512473.mp4
-rw-r--r-- 1 lukas staff 295793 14 Apr 16:03 compact_monitor_2_1776171817959.mp4
-rw-r--r-- 1 lukas staff 3540965 14 Apr 16:08 compact_monitor_2_1776172123631.mp4
-rw-r--r-- 1 lukas staff 3589660 14 Apr 16:13 compact_monitor_2_1776172430586.mp4
-rw-r--r-- 1 lukas staff 4735044 14 Apr 16:19 compact_monitor_2_1776172739210.mp4
-rw-r--r-- 1 lukas staff 4951644 14 Apr 16:24 compact_monitor_2_1776173049122.mp4
-rw-r--r-- 1 lukas staff 5939102 14 Apr 16:29 compact_monitor_2_1776173357170.mp4
-rw-r--r-- 1 lukas staff 2549744 14 Apr 16:34 compact_monitor_2_1776173665142.mp4
-rw-r--r-- 1 lukas staff 996149 14 Apr 16:39 compact_monitor_2_1776173972456.mp4
-rw-r--r-- 1 lukas staff 2663346 14 Apr 16:44 compact_monitor_2_1776174276676.mp4
-rw-r--r-- 1 lukas staff 1776844 14 Apr 16:49 compact_monitor_2_1776174582351.mp4
-rw-r--r-- 1 lukas staff 1669202 14 Apr 16:54 compact_monitor_2_1776174889930.mp4
-rw-r--r-- 1 lukas staff 5414828 14 Apr 17:00 compact_monitor_2_1776175198918.mp4
-rw-r--r-- 1 lukas staff 5727100 14 Apr 17:05 compact_monitor_2_1776175518133.mp4
-rw-r--r-- 1 lukas staff 6080220 14 Apr 17:10 compact_monitor_2_1776175835473.mp4
-rw-r--r-- 1 lukas staff 3631681 14 Apr 17:16 compact_monitor_2_1776176159421.mp4
-rw-r--r-- 1 lukas staff 1861818 14 Apr 17:21 compact_monitor_2_1776176479999.mp4
-rw-r--r-- 1 lukas staff 1471229 14 Apr 17:26 compact_monitor_2_1776176794129.mp4
-rw-r--r-- 1 lukas staff 1792667 14 Apr 17:32 compact_monitor_2_1776177119122.mp4
-rw-r--r-- 1 lukas staff 2398088 14 Apr 17:37 compact_monitor_2_1776177447361.mp4
-rw-r--r-- 1 lukas staff 1873376 14 Apr 17:42 compact_monitor_2_1776177755837.mp4
-rw-r--r-- 1 lukas staff 3686281 14 Apr 17:47 compact_monitor_2_1776178069540.mp4
-rw-r--r-- 1 lukas staff 1842517 14 Apr 17:53 compact_monitor_2_1776178382342.mp4
-rw-r--r-- 1 lukas staff 2595005 14 Apr 17:58 compact_monitor_2_1776178688999.mp4
-rw-r--r-- 1 lukas staff 3352578 14 Apr 18:03 compact_monitor_2_1776178994368.mp4
-rw-r--r-- 1 lukas staff 7474140 14 Apr 18:08 compact_monitor_2_1776179301874.mp4
-rw-r--r-- 1 lukas staff 18300640 14 Apr 18:13 compact_monitor_2_1776179614376.mp4
-rw-r--r-- 1 lukas staff 8302944 14 Apr 18:13 compact_monitor_2_1776179625270.mp4
-rw-r--r-- 1 lukas staff 27338956 14 Apr 18:19 compact_monitor_2_1776179934590.mp4
-rw-r--r-- 1 lukas staff 1061768 14 Apr 18:19 compact_monitor_2_1776179947276.mp4
-rw-r--r-- 1 lukas staff 24282145 14 Apr 18:24 compact_monitor_2_1776180254284.mp4
-rw-r--r-- 1 lukas staff 5647384 14 Apr 18:24 compact_monitor_2_1776180266890.mp4
-rw-r--r-- 1 lukas staff 32748524 14 Apr 18:29 compact_monitor_2_1776180574284.mp4
-rw-r--r-- 1 lukas staff 25769571 14 Apr 18:35 compact_monitor_2_1776180892046.mp4
-rw-r--r-- 1 lukas staff 41983533 14 Apr 18:40 compact_monitor_2_1776181207025.mp4
-rw-r--r-- 1 lukas staff 3365850 14 Apr 18:40 compact_monitor_2_1776181223864.mp4
-rw-r--r-- 1 lukas staff 40919053 14 Apr 18:45 compact_monitor_2_1776181530742.mp4
-rw-r--r-- 1 lukas staff 3870375 14 Apr 18:45 compact_monitor_2_1776181546619.mp4
-rw-r--r-- 1 lukas staff 36175005 14 Apr 18:51 compact_monitor_2_1776181853124.mp4
-rw-r--r-- 1 lukas staff 36717883 14 Apr 18:56 compact_monitor_2_1776182171990.mp4
-rw-r--r-- 1 lukas staff 27140350 14 Apr 19:01 compact_monitor_2_1776182491150.mp4
-rw-r--r-- 1 lukas staff 20914618 14 Apr 19:06 compact_monitor_2_1776182808796.mp4
-rw-r--r-- 1 lukas staff 4716229 14 Apr 19:07 compact_monitor_2_1776182820060.mp4
-rw-r--r-- 1 lukas staff 24788277 14 Apr 19:12 compact_monitor_2_1776183129006.mp4
-rw-r--r-- 1 lukas staff 7974655 14 Apr 19:12 compact_monitor_2_1776183141483.mp4
-rw-r--r-- 1 lukas staff 22872307 14 Apr 19:17 compact_monitor_2_1776183451042.mp4
-rw-r--r-- 1 lukas staff 3283631 14 Apr 19:17 compact_monitor_2_1776183462827.mp4
-rw-r--r-- 1 lukas staff 32308259 14 Apr 19:23 compact_monitor_2_1776183769519.mp4
-rw-r--r-- 1 lukas staff 2847482 14 Apr 19:23 compact_monitor_2_1776183783534.mp4
-rw-r--r-- 1 lukas staff 36823186 14 Apr 19:28 compact_monitor_2_1776184089558.mp4
-rw-r--r-- 1 lukas staff 5825352 14 Apr 19:28 compact_monitor_2_1776184104421.mp4
-rw-r--r-- 1 lukas staff 30437061 15 Apr 09:59 compact_monitor_2_1776236357169.mp4
-rw-r--r-- 1 lukas staff 4350302 15 Apr 09:59 compact_monitor_2_1776236373794.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 11:58:00] ========================================
[2026-04-18 11:58:00] Screenpipe sync starting for: 2026-04-14
[2026-04-18 11:58:00] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 11:58:04] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync
Data dir: OK (245 files, 1.0G)
[+00m04s] ▶ Copying data folder for 2026-04-14
rsync 2026-04-14/ → NAS ✗ 531 / 245 files
[2026-04-18 11:58:09] Archive DB size: 3.0G
[2026-04-18 11:58:09] Total time: 0m9s
[2026-04-18 11:58:09] Sync complete for 2026-04-14
[2026-04-18 11:58:09] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 11:59:41] ========================================
[2026-04-18 11:59:41] Screenpipe sync starting for: 2026-04-14
[2026-04-18 11:59:41] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 11:59:45] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync
Data dir: OK (245 files, 1.0G)
[+00m04s] ▶ Copying data folder for 2026-04-14
rsync 2026-04-14/ → NAS ✓ 2m07s (245 files, 1.0G)
[2026-04-18 12:01:52] Archive DB size: 3.0G
[2026-04-18 12:01:52] Total time: 2m11s
[2026-04-18 12:01:52] Sync complete for 2026-04-14
[2026-04-18 12:01:52] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 12:03:13] ========================================
[2026-04-18 12:03:13] Screenpipe sync starting for: 2026-04-14
[2026-04-18 12:03:13] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/screenpipe
Archive DB: will be created
Data dir: OK (245 files, 1.0G)
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)
Parse error near line 3: unknown database nas
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames
error here ---^
Parse error near line 4: unknown database nas
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements
error here ---^
Parse error near line 5: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events
error here ---^
Parse error near line 6: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text
error here ---^
Parse error near line 7: unknown database nas
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks
error here ---^
Parse error near line 8: unknown database nas
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings
error here ---^
Runtime error near line 9: no such database: nas
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ls /Volumes/screenpipe/
ls: /Volumes/screenpipe/: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ cd /Volumes
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 96
drwxr-xr-x 6 root wheel 192 18 Apr 11:17 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
lrwxr-xr-x 1 root wheel 1 16 Apr 15:43 Macintosh HD -> /
drwx------ 1 lukas staff 16384 11 Apr 15:46 Test
drwx------ 1 lukas staff 16384 13 Mar 10:17 Work
drwx------ 1 lukas staff 16384 17 Apr 21:29 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls -la /Volumes/screenpipe/
total 0
ls: /Volumes/screenpipe/: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ mount | grep screenpipe
//Adm1n@DXP4800PLUS-B5F8/screenpipe on /Volumes/screenpipe (smbfs, nodev, nosuid, mounted by lukas)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ umount /Volumes/screenpipe
umount: unmount(/Volumes/screenpipe): Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 12:06:45] ========================================
[2026-04-18 12:06:45] Screenpipe sync starting for: 2026-04-14
[2026-04-18 12:06:45] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/screenpipe
Archive DB: will be created
Data dir: OK (245 files, 1.0G)
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)
Parse error near line 3: unknown database nas
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames
error here ---^
Parse error near line 4: unknown database nas
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements
error here ---^
Parse error near line 5: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events
error here ---^
Parse error near line 6: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text
error here ---^
Parse error near line 7: unknown database nas
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks
error here ---^
Parse error near line 8: unknown database nas
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings
error here ---^
Runtime error near line 9: no such database: nas
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 12:06:51] ========================================
[2026-04-18 12:06:51] Screenpipe sync starting for: 2026-04-14
[2026-04-18 12:06:51] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 12:06:55] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync
Data dir: OK (245 files, 1.0G)
[+00m05s] ▶ Copying data folder for 2026-04-14
rsync 2026-04-14/ → NAS ✓ 0m04s (245 files, 1.0G)
[2026-04-18 12:07:00] Archive DB size: 3.0G
[2026-04-18 12:07:00] Total time: 0m9s
[2026-04-18 12:07:00] Sync complete for 2026-04-14
[2026-04-18 12:07:00] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15
[2026-04-18 12:07:03] ========================================
[2026-04-18 12:07:03] Screenpipe sync starting for: 2026-04-15
[2026-04-18 12:07:03] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 12:07:07] Date 2026-04-15 already has 12874 frames in archive — skipping DB sync
Data dir: OK (241 files, 2.0G)
[+00m04s] ▶ Copying data folder for 2026-04-15
rsync 2026-04-15/ → NAS ✓ 3m22s (241 files, 2.0G)
[2026-04-18 12:10:30] Archive DB size: 3.0G
[2026-04-18 12:10:30] Total time: 3m27s
[2026-04-18 12:10:30] Sync complete for 2026-04-15
[2026-04-18 12:10:30] ============...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"-rw-r--r-- 1 lukas staff 361011 17 Apr 09:53 compact_monitor_1_1776408824270.mp4\n-rw-r--r-- 1 lukas staff 3365373 17 Apr 09:59 compact_monitor_1_1776409136717.mp4\n-rw-r--r-- 1 lukas staff 2601020 17 Apr 10:04 compact_monitor_1_1776409450395.mp4\n-rw-r--r-- 1 lukas staff 3497066 17 Apr 10:09 compact_monitor_1_1776409759172.mp4\n-rw-r--r-- 1 lukas staff 1507571 17 Apr 10:14 compact_monitor_1_1776410067944.mp4\n-rw-r--r-- 1 lukas staff 943396 17 Apr 10:19 compact_monitor_1_1776410372484.mp4\n-rw-r--r-- 1 lukas staff 1225040 17 Apr 10:24 compact_monitor_1_1776410674629.mp4\n-rw-r--r-- 1 lukas staff 2224229 17 Apr 10:29 compact_monitor_1_1776410981487.mp4\n-rw-r--r-- 1 lukas staff 398291 17 Apr 10:34 compact_monitor_1_1776411298373.mp4\n-rw-r--r-- 1 lukas staff 4376235 17 Apr 10:40 compact_monitor_1_1776411601686.mp4\n-rw-r--r-- 1 lukas staff 5007720 17 Apr 10:45 compact_monitor_1_1776411923026.mp4\n-rw-r--r-- 1 lukas staff 2281319 17 Apr 10:50 compact_monitor_1_1776412242015.mp4\n-rw-r--r-- 1 lukas staff 3182872 17 Apr 10:56 compact_monitor_1_1776412560658.mp4\n-rw-r--r-- 1 lukas staff 3896056 17 Apr 11:01 compact_monitor_1_1776412881181.mp4\n-rw-r--r-- 1 lukas staff 6279582 17 Apr 11:06 compact_monitor_1_1776413192507.mp4\n-rw-r--r-- 1 lukas staff 6492126 17 Apr 11:12 compact_monitor_1_1776413508291.mp4\n-rw-r--r-- 1 lukas staff 6045038 17 Apr 11:17 compact_monitor_1_1776413848971.mp4\n-rw-r--r-- 1 lukas staff 4968033 17 Apr 11:23 compact_monitor_1_1776414180658.mp4\n-rw-r--r-- 1 lukas staff 7109088 17 Apr 11:28 compact_monitor_1_1776414513921.mp4\n-rw-r--r-- 1 lukas staff 9099339 17 Apr 11:34 compact_monitor_1_1776414839842.mp4\n-rw-r--r-- 1 lukas staff 926165 17 Apr 11:34 compact_monitor_1_1776414858793.mp4\n-rw-r--r-- 1 lukas staff 9246778 17 Apr 11:39 compact_monitor_1_1776415182593.mp4\n-rw-r--r-- 1 lukas staff 8361876 17 Apr 11:45 compact_monitor_1_1776415505403.mp4\n-rw-r--r-- 1 lukas staff 7215549 17 Apr 11:50 compact_monitor_1_1776415841776.mp4\n-rw-r--r-- 1 lukas staff 6234445 17 Apr 11:56 compact_monitor_1_1776416174658.mp4\n-rw-r--r-- 1 lukas staff 11694078 17 Apr 12:01 compact_monitor_1_1776416497484.mp4\n-rw-r--r-- 1 lukas staff 7033085 17 Apr 12:07 compact_monitor_1_1776416834587.mp4\n-rw-r--r-- 1 lukas staff 4309161 17 Apr 12:12 compact_monitor_1_1776417157754.mp4\n-rw-r--r-- 1 lukas staff 3782878 17 Apr 12:18 compact_monitor_1_1776417481425.mp4\n-rw-r--r-- 1 lukas staff 5597264 17 Apr 12:23 compact_monitor_1_1776417802134.mp4\n-rw-r--r-- 1 lukas staff 5667747 17 Apr 12:28 compact_monitor_1_1776418119908.mp4\n-rw-r--r-- 1 lukas staff 8840842 17 Apr 12:34 compact_monitor_1_1776418443506.mp4\n-rw-r--r-- 1 lukas staff 5442395 17 Apr 12:39 compact_monitor_1_1776418761701.mp4\n-rw-r--r-- 1 lukas staff 4054014 17 Apr 12:44 compact_monitor_1_1776419074083.mp4\n-rw-r--r-- 1 lukas staff 3734539 17 Apr 12:49 compact_monitor_1_1776419388949.mp4\n-rw-r--r-- 1 lukas staff 3137915 17 Apr 12:55 compact_monitor_1_1776419701686.mp4\n-rw-r--r-- 1 lukas staff 3064654 17 Apr 13:00 compact_monitor_1_1776420015547.mp4\n-rw-r--r-- 1 lukas staff 1189833 17 Apr 13:05 compact_monitor_1_1776420321592.mp4\n-rw-r--r-- 1 lukas staff 1862832 17 Apr 13:10 compact_monitor_1_1776420633887.mp4\n-rw-r--r-- 1 lukas staff 520517 17 Apr 13:15 compact_monitor_1_1776420947144.mp4\n-rw-r--r-- 1 lukas staff 790509 17 Apr 13:20 compact_monitor_1_1776421253865.mp4\n-rw-r--r-- 1 lukas staff 1155599 17 Apr 13:26 compact_monitor_1_1776421566995.mp4\n-rw-r--r-- 1 lukas staff 626836 17 Apr 13:31 compact_monitor_1_1776421884013.mp4\n-rw-r--r-- 1 lukas staff 2709758 17 Apr 13:36 compact_monitor_1_1776422194788.mp4\n-rw-r--r-- 1 lukas staff 894214 17 Apr 13:41 compact_monitor_1_1776422513565.mp4\n-rw-r--r-- 1 lukas staff 1298826 17 Apr 13:47 compact_monitor_1_1776422829105.mp4\n-rw-r--r-- 1 lukas staff 3454896 17 Apr 13:52 compact_monitor_1_1776423143916.mp4\n-rw-r--r-- 1 lukas staff 1369217 17 Apr 13:57 compact_monitor_1_1776423466196.mp4\n-rw-r--r-- 1 lukas staff 1677163 17 Apr 14:03 compact_monitor_1_1776423783420.mp4\n-rw-r--r-- 1 lukas staff 556702 17 Apr 14:08 compact_monitor_1_1776424109344.mp4\n-rw-r--r-- 1 lukas staff 1001886 17 Apr 14:13 compact_monitor_1_1776424416957.mp4\n-rw-r--r-- 1 lukas staff 1485547 17 Apr 14:18 compact_monitor_1_1776424730536.mp4\n-rw-r--r-- 1 lukas staff 935536 17 Apr 14:24 compact_monitor_1_1776425050631.mp4\n-rw-r--r-- 1 lukas staff 1119642 17 Apr 14:29 compact_monitor_1_1776425372446.mp4\n-rw-r--r-- 1 lukas staff 430883 17 Apr 14:34 compact_monitor_1_1776425690857.mp4\n-rw-r--r-- 1 lukas staff 427035 17 Apr 14:40 compact_monitor_1_1776426003278.mp4\n-rw-r--r-- 1 lukas staff 654605 17 Apr 14:45 compact_monitor_1_1776426312497.mp4\n-rw-r--r-- 1 lukas staff 440539 17 Apr 14:50 compact_monitor_1_1776426625506.mp4\n-rw-r--r-- 1 lukas staff 439802 17 Apr 14:55 compact_monitor_1_1776426939895.mp4\n-rw-r--r-- 1 lukas staff 557755 17 Apr 15:01 compact_monitor_1_1776427261945.mp4\n-rw-r--r-- 1 lukas staff 1071442 17 Apr 15:06 compact_monitor_1_1776427571985.mp4\n-rw-r--r-- 1 lukas staff 2606361 17 Apr 15:11 compact_monitor_1_1776427882803.mp4\n-rw-r--r-- 1 lukas staff 951201 17 Apr 15:16 compact_monitor_1_1776428192090.mp4\n-rw-r--r-- 1 lukas staff 322306 17 Apr 15:21 compact_monitor_1_1776428505150.mp4\n-rw-r--r-- 1 lukas staff 331163 17 Apr 15:26 compact_monitor_1_1776428811953.mp4\n-rw-r--r-- 1 lukas staff 737469 17 Apr 15:32 compact_monitor_1_1776429127526.mp4\n-rw-r--r-- 1 lukas staff 352621 17 Apr 15:37 compact_monitor_1_1776429442374.mp4\n-rw-r--r-- 1 lukas staff 444203 17 Apr 15:42 compact_monitor_1_1776429752217.mp4\n-rw-r--r-- 1 lukas staff 1407505 17 Apr 15:47 compact_monitor_1_1776430066920.mp4\n-rw-r--r-- 1 lukas staff 360974 17 Apr 15:53 compact_monitor_1_1776430376918.mp4\n-rw-r--r-- 1 lukas staff 321565 17 Apr 15:58 compact_monitor_1_1776430691588.mp4\n-rw-r--r-- 1 lukas staff 317048 17 Apr 16:03 compact_monitor_1_1776431003504.mp4\n-rw-r--r-- 1 lukas staff 321894 17 Apr 16:08 compact_monitor_1_1776431317637.mp4\n-rw-r--r-- 1 lukas staff 333513 17 Apr 16:13 compact_monitor_1_1776431629041.mp4\n-rw-r--r-- 1 lukas staff 326264 17 Apr 16:19 compact_monitor_1_1776431942238.mp4\n-rw-r--r-- 1 lukas staff 366336 17 Apr 16:24 compact_monitor_1_1776432254490.mp4\n-rw-r--r-- 1 lukas staff 327825 17 Apr 16:29 compact_monitor_1_1776432574989.mp4\n-rw-r--r-- 1 lukas staff 1048363 17 Apr 16:34 compact_monitor_1_1776432882794.mp4\n-rw-r--r-- 1 lukas staff 1668969 17 Apr 16:39 compact_monitor_1_1776433188842.mp4\n-rw-r--r-- 1 lukas staff 1283899 17 Apr 16:44 compact_monitor_1_1776433493858.mp4\n-rw-r--r-- 1 lukas staff 314118 17 Apr 16:50 compact_monitor_1_1776433800642.mp4\n-rw-r--r-- 1 lukas staff 547478 17 Apr 16:55 compact_monitor_1_1776434111371.mp4\n-rw-r--r-- 1 lukas staff 868654 17 Apr 17:00 compact_monitor_1_1776434420728.mp4\n-rw-r--r-- 1 lukas staff 885215 17 Apr 17:05 compact_monitor_1_1776434723901.mp4\n-rw-r--r-- 1 lukas staff 508905 17 Apr 17:10 compact_monitor_1_1776435038035.mp4\n-rw-r--r-- 1 lukas staff 591766 17 Apr 17:16 compact_monitor_1_1776435363044.mp4\n-rw-r--r-- 1 lukas staff 2031034 17 Apr 17:21 compact_monitor_1_1776435683729.mp4\n-rw-r--r-- 1 lukas staff 2136043 17 Apr 17:26 compact_monitor_1_1776436005076.mp4\n-rw-r--r-- 1 lukas staff 578716 17 Apr 17:32 compact_monitor_1_1776436319163.mp4\n-rw-r--r-- 1 lukas staff 1308705 17 Apr 17:37 compact_monitor_1_1776436630439.mp4\n-rw-r--r-- 1 lukas staff 958771 17 Apr 17:42 compact_monitor_1_1776436939049.mp4\n-rw-r--r-- 1 lukas staff 797771 17 Apr 17:47 compact_monitor_1_1776437247467.mp4\n-rw-r--r-- 1 lukas staff 1230186 17 Apr 17:52 compact_monitor_1_1776437554897.mp4\n-rw-r--r-- 1 lukas staff 862632 17 Apr 17:57 compact_monitor_1_1776437862465.mp4\n-rw-r--r-- 1 lukas staff 757441 17 Apr 18:02 compact_monitor_1_1776438171931.mp4\n-rw-r--r-- 1 lukas staff 686680 17 Apr 18:08 compact_monitor_1_1776438479816.mp4\n-rw-r--r-- 1 lukas staff 1078524 17 Apr 18:13 compact_monitor_1_1776438783339.mp4\n-rw-r--r-- 1 lukas staff 496616 17 Apr 18:18 compact_monitor_1_1776439090720.mp4\n-rw-r--r-- 1 lukas staff 774571 17 Apr 18:23 compact_monitor_1_1776439396975.mp4\n-rw-r--r-- 1 lukas staff 1160291 17 Apr 18:28 compact_monitor_1_1776439703924.mp4\n-rw-r--r-- 1 lukas staff 632541 17 Apr 18:34 compact_monitor_1_1776440053428.mp4\n-rw-r--r-- 1 lukas staff 3291212 17 Apr 21:05 compact_monitor_1_1776449135667.mp4\n-rw-r--r-- 1 lukas staff 768306 17 Apr 09:07 compact_monitor_2_1776406035126.mp4\n-rw-r--r-- 1 lukas staff 9277508 17 Apr 09:12 compact_monitor_2_1776406343152.mp4\n-rw-r--r-- 1 lukas staff 627114 17 Apr 09:12 compact_monitor_2_1776406349962.mp4\n-rw-r--r-- 1 lukas staff 11129246 17 Apr 09:17 compact_monitor_2_1776406653780.mp4\n-rw-r--r-- 1 lukas staff 8352174 17 Apr 09:22 compact_monitor_2_1776406964880.mp4\n-rw-r--r-- 1 lukas staff 8551960 17 Apr 09:28 compact_monitor_2_1776407277493.mp4\n-rw-r--r-- 1 lukas staff 679244 17 Apr 09:28 compact_monitor_2_1776407283693.mp4\n-rw-r--r-- 1 lukas staff 12641011 17 Apr 09:33 compact_monitor_2_1776407588804.mp4\n-rw-r--r-- 1 lukas staff 9384615 17 Apr 09:38 compact_monitor_2_1776407900099.mp4\n-rw-r--r-- 1 lukas staff 4024767 17 Apr 09:43 compact_monitor_2_1776408207652.mp4\n-rw-r--r-- 1 lukas staff 2627851 17 Apr 09:48 compact_monitor_2_1776408517311.mp4\n-rw-r--r-- 1 lukas staff 4877190 17 Apr 09:53 compact_monitor_2_1776408826734.mp4\n-rw-r--r-- 1 lukas staff 3807909 17 Apr 09:59 compact_monitor_2_1776409142638.mp4\n-rw-r--r-- 1 lukas staff 4217716 17 Apr 10:04 compact_monitor_2_1776409454184.mp4\n-rw-r--r-- 1 lukas staff 1717578 17 Apr 10:09 compact_monitor_2_1776409763153.mp4\n-rw-r--r-- 1 lukas staff 1067064 17 Apr 10:14 compact_monitor_2_1776410070480.mp4\n-rw-r--r-- 1 lukas staff 442425 17 Apr 10:19 compact_monitor_2_1776410373664.mp4\n-rw-r--r-- 1 lukas staff 444497 17 Apr 10:24 compact_monitor_2_1776410676126.mp4\n-rw-r--r-- 1 lukas staff 3670025 17 Apr 10:29 compact_monitor_2_1776410986705.mp4\n-rw-r--r-- 1 lukas staff 448939 17 Apr 10:35 compact_monitor_2_1776411299875.mp4\n-rw-r--r-- 1 lukas staff 4490377 17 Apr 10:40 compact_monitor_2_1776411611306.mp4\n-rw-r--r-- 1 lukas staff 7437798 17 Apr 10:45 compact_monitor_2_1776411929615.mp4\n-rw-r--r-- 1 lukas staff 6915447 17 Apr 10:50 compact_monitor_2_1776412245368.mp4\n-rw-r--r-- 1 lukas staff 7988703 17 Apr 10:56 compact_monitor_2_1776412568330.mp4\n-rw-r--r-- 1 lukas staff 5512416 17 Apr 11:01 compact_monitor_2_1776412886253.mp4\n-rw-r--r-- 1 lukas staff 3107875 17 Apr 11:06 compact_monitor_2_1776413199096.mp4\n-rw-r--r-- 1 lukas staff 4158550 17 Apr 11:12 compact_monitor_2_1776413529707.mp4\n-rw-r--r-- 1 lukas staff 4756064 17 Apr 11:17 compact_monitor_2_1776413863997.mp4\n-rw-r--r-- 1 lukas staff 5281060 17 Apr 11:23 compact_monitor_2_1776414194026.mp4\n-rw-r--r-- 1 lukas staff 2605046 17 Apr 11:28 compact_monitor_2_1776414528521.mp4\n-rw-r--r-- 1 lukas staff 5473302 17 Apr 11:34 compact_monitor_2_1776414861255.mp4\n-rw-r--r-- 1 lukas staff 2791759 17 Apr 11:40 compact_monitor_2_1776415194836.mp4\n-rw-r--r-- 1 lukas staff 5494699 17 Apr 11:45 compact_monitor_2_1776415523929.mp4\n-rw-r--r-- 1 lukas staff 4025150 17 Apr 11:51 compact_monitor_2_1776415859261.mp4\n-rw-r--r-- 1 lukas staff 2583684 17 Apr 11:56 compact_monitor_2_1776416187267.mp4\n-rw-r--r-- 1 lukas staff 5240195 17 Apr 12:02 compact_monitor_2_1776416514967.mp4\n-rw-r--r-- 1 lukas staff 3629687 17 Apr 12:07 compact_monitor_2_1776416846005.mp4\n-rw-r--r-- 1 lukas staff 5021721 17 Apr 12:12 compact_monitor_2_1776417172355.mp4\n-rw-r--r-- 1 lukas staff 2986447 17 Apr 12:18 compact_monitor_2_1776417492277.mp4\n-rw-r--r-- 1 lukas staff 3976942 17 Apr 12:23 compact_monitor_2_1776417810578.mp4\n-rw-r--r-- 1 lukas staff 4294715 17 Apr 12:29 compact_monitor_2_1776418132304.mp4\n-rw-r--r-- 1 lukas staff 4698998 17 Apr 12:34 compact_monitor_2_1776418452374.mp4\n-rw-r--r-- 1 lukas staff 3160886 17 Apr 12:39 compact_monitor_2_1776418768555.mp4\n-rw-r--r-- 1 lukas staff 1776908 17 Apr 12:44 compact_monitor_2_1776419082274.mp4\n-rw-r--r-- 1 lukas staff 1500725 17 Apr 12:49 compact_monitor_2_1776419394506.mp4\n-rw-r--r-- 1 lukas staff 1279602 17 Apr 12:55 compact_monitor_2_1776419709571.mp4\n-rw-r--r-- 1 lukas staff 2017894 17 Apr 13:00 compact_monitor_2_1776420018859.mp4\n-rw-r--r-- 1 lukas staff 5639690 17 Apr 13:05 compact_monitor_2_1776420324337.mp4\n-rw-r--r-- 1 lukas staff 4587635 17 Apr 13:10 compact_monitor_2_1776420636421.mp4\n-rw-r--r-- 1 lukas staff 2001162 17 Apr 13:15 compact_monitor_2_1776420949555.mp4\n-rw-r--r-- 1 lukas staff 3658362 17 Apr 13:21 compact_monitor_2_1776421256306.mp4\n-rw-r--r-- 1 lukas staff 7755716 17 Apr 13:26 compact_monitor_2_1776421570292.mp4\n-rw-r--r-- 1 lukas staff 3362766 17 Apr 13:31 compact_monitor_2_1776421886698.mp4\n-rw-r--r-- 1 lukas staff 6893513 17 Apr 13:36 compact_monitor_2_1776422197625.mp4\n-rw-r--r-- 1 lukas staff 4788146 17 Apr 13:42 compact_monitor_2_1776422516390.mp4\n-rw-r--r-- 1 lukas staff 4840848 17 Apr 13:47 compact_monitor_2_1776422832136.mp4\n-rw-r--r-- 1 lukas staff 9094075 17 Apr 13:52 compact_monitor_2_1776423148671.mp4\n-rw-r--r-- 1 lukas staff 10072846 17 Apr 13:57 compact_monitor_2_1776423469970.mp4\n-rw-r--r-- 1 lukas staff 13504297 17 Apr 14:03 compact_monitor_2_1776423787536.mp4\n-rw-r--r-- 1 lukas staff 1622612 17 Apr 14:08 compact_monitor_2_1776424110832.mp4\n-rw-r--r-- 1 lukas staff 5427700 17 Apr 14:13 compact_monitor_2_1776424419206.mp4\n-rw-r--r-- 1 lukas staff 1746789 17 Apr 14:19 compact_monitor_2_1776424736034.mp4\n-rw-r--r-- 1 lukas staff 4232204 17 Apr 14:24 compact_monitor_2_1776425054084.mp4\n-rw-r--r-- 1 lukas staff 4457408 17 Apr 14:29 compact_monitor_2_1776425375574.mp4\n-rw-r--r-- 1 lukas staff 174979 17 Apr 14:34 compact_monitor_2_1776425692307.mp4\n-rw-r--r-- 1 lukas staff 169969 17 Apr 14:40 compact_monitor_2_1776426005170.mp4\n-rw-r--r-- 1 lukas staff 2723106 17 Apr 14:45 compact_monitor_2_1776426315173.mp4\n-rw-r--r-- 1 lukas staff 3313658 17 Apr 14:50 compact_monitor_2_1776426627449.mp4\n-rw-r--r-- 1 lukas staff 4720437 17 Apr 14:55 compact_monitor_2_1776426943213.mp4\n-rw-r--r-- 1 lukas staff 3589313 17 Apr 15:01 compact_monitor_2_1776427263991.mp4\n-rw-r--r-- 1 lukas staff 6295236 17 Apr 15:06 compact_monitor_2_1776427573875.mp4\n-rw-r--r-- 1 lukas staff 3390902 17 Apr 15:11 compact_monitor_2_1776427885283.mp4\n-rw-r--r-- 1 lukas staff 1637607 17 Apr 15:16 compact_monitor_2_1776428194704.mp4\n-rw-r--r-- 1 lukas staff 1355327 17 Apr 15:21 compact_monitor_2_1776428506246.mp4\n-rw-r--r-- 1 lukas staff 4897048 17 Apr 15:27 compact_monitor_2_1776428815157.mp4\n-rw-r--r-- 1 lukas staff 4930900 17 Apr 15:32 compact_monitor_2_1776429130905.mp4\n-rw-r--r-- 1 lukas staff 2581578 17 Apr 15:37 compact_monitor_2_1776429444142.mp4\n-rw-r--r-- 1 lukas staff 4764105 17 Apr 15:42 compact_monitor_2_1776429755437.mp4\n-rw-r--r-- 1 lukas staff 4039902 17 Apr 15:47 compact_monitor_2_1776430069174.mp4\n-rw-r--r-- 1 lukas staff 4735734 17 Apr 15:53 compact_monitor_2_1776430380212.mp4\n-rw-r--r-- 1 lukas staff 2195410 17 Apr 15:58 compact_monitor_2_1776430693483.mp4\n-rw-r--r-- 1 lukas staff 1857322 17 Apr 16:03 compact_monitor_2_1776431005386.mp4\n-rw-r--r-- 1 lukas staff 3412100 17 Apr 16:08 compact_monitor_2_1776431319373.mp4\n-rw-r--r-- 1 lukas staff 6928537 17 Apr 16:13 compact_monitor_2_1776431631778.mp4\n-rw-r--r-- 1 lukas staff 4990793 17 Apr 16:19 compact_monitor_2_1776431944571.mp4\n-rw-r--r-- 1 lukas staff 8242278 17 Apr 16:24 compact_monitor_2_1776432258818.mp4\n-rw-r--r-- 1 lukas staff 451999 17 Apr 16:24 compact_monitor_2_1776432269036.mp4\n-rw-r--r-- 1 lukas staff 2978452 17 Apr 16:29 compact_monitor_2_1776432577467.mp4\n-rw-r--r-- 1 lukas staff 1248291 17 Apr 16:34 compact_monitor_2_1776432884349.mp4\n-rw-r--r-- 1 lukas staff 2963525 17 Apr 16:39 compact_monitor_2_1776433190284.mp4\n-rw-r--r-- 1 lukas staff 1958858 17 Apr 16:44 compact_monitor_2_1776433495477.mp4\n-rw-r--r-- 1 lukas staff 1656966 17 Apr 16:50 compact_monitor_2_1776433802347.mp4\n-rw-r--r-- 1 lukas staff 2813856 17 Apr 16:55 compact_monitor_2_1776434112909.mp4\n-rw-r--r-- 1 lukas staff 510112 17 Apr 17:00 compact_monitor_2_1776434422384.mp4\n-rw-r--r-- 1 lukas staff 4354386 17 Apr 17:05 compact_monitor_2_1776434725886.mp4\n-rw-r--r-- 1 lukas staff 9798615 17 Apr 17:10 compact_monitor_2_1776435041115.mp4\n-rw-r--r-- 1 lukas staff 4503179 17 Apr 17:16 compact_monitor_2_1776435368020.mp4\n-rw-r--r-- 1 lukas staff 857002 17 Apr 17:16 compact_monitor_2_1776435376040.mp4\n-rw-r--r-- 1 lukas staff 8587996 17 Apr 17:21 compact_monitor_2_1776435687051.mp4\n-rw-r--r-- 1 lukas staff 5052247 17 Apr 17:26 compact_monitor_2_1776436009787.mp4\n-rw-r--r-- 1 lukas staff 2947924 17 Apr 17:32 compact_monitor_2_1776436320877.mp4\n-rw-r--r-- 1 lukas staff 689465 17 Apr 17:37 compact_monitor_2_1776436632536.mp4\n-rw-r--r-- 1 lukas staff 1353469 17 Apr 17:42 compact_monitor_2_1776436940788.mp4\n-rw-r--r-- 1 lukas staff 870893 17 Apr 17:47 compact_monitor_2_1776437249077.mp4\n-rw-r--r-- 1 lukas staff 2653839 17 Apr 17:52 compact_monitor_2_1776437556659.mp4\n-rw-r--r-- 1 lukas staff 4310138 17 Apr 17:57 compact_monitor_2_1776437864727.mp4\n-rw-r--r-- 1 lukas staff 3683875 17 Apr 18:02 compact_monitor_2_1776438173313.mp4\n-rw-r--r-- 1 lukas staff 1916129 17 Apr 18:08 compact_monitor_2_1776438481043.mp4\n-rw-r--r-- 1 lukas staff 2349626 17 Apr 18:13 compact_monitor_2_1776438785553.mp4\n-rw-r--r-- 1 lukas staff 641202 17 Apr 18:18 compact_monitor_2_1776439092011.mp4\n-rw-r--r-- 1 lukas staff 3006319 17 Apr 18:23 compact_monitor_2_1776439398485.mp4\n-rw-r--r-- 1 lukas staff 1675776 17 Apr 18:28 compact_monitor_2_1776439705765.mp4\n-rw-r--r-- 1 lukas staff 4465225 17 Apr 18:34 compact_monitor_2_1776440055922.mp4\n-rw-r--r-- 1 lukas staff 2351472 17 Apr 21:05 compact_monitor_2_1776449140917.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ rsync -av --ignore-existing \\\n ~/.screenpipe/data/data/2026-04-14/ \\\n /Volumes/Test/screenpipe/data/2026-04-14/\nbuilding file list ... done\n./\ncompact_monitor_1_1776236348162.mp4\ncompact_monitor_1_1776236355103.mp4\ncompact_monitor_2_1776236357169.mp4\ncompact_monitor_2_1776236373794.mp4\n\nsent 41217485 bytes received 114 bytes 4338694.63 bytes/sec\ntotal size is 1085072596 speedup is 26.33\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-14\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ll\ntotal 2120256\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 .\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..\n-rw-r--r--@ 1 lukas staff 581687 14 Apr 09:34 compact_monitor_1_1776148466581.mp4\n-rw-r--r--@ 1 lukas staff 702153 14 Apr 09:39 compact_monitor_1_1776148768082.mp4\n-rw-r--r--@ 1 lukas staff 251978 14 Apr 09:44 compact_monitor_1_1776149071467.mp4\n-rw-r--r-- 1 lukas staff 1717429 14 Apr 09:49 compact_monitor_1_1776149373136.mp4\n-rw-r--r-- 1 lukas staff 3477530 14 Apr 09:54 compact_monitor_1_1776149679747.mp4\n-rw-r--r-- 1 lukas staff 4579266 14 Apr 09:59 compact_monitor_1_1776149991618.mp4\n-rw-r--r-- 1 lukas staff 2305892 14 Apr 10:05 compact_monitor_1_1776150305479.mp4\n-rw-r--r-- 1 lukas staff 2464098 14 Apr 10:10 compact_monitor_1_1776150611148.mp4\n-rw-r--r-- 1 lukas staff 2640699 14 Apr 10:15 compact_monitor_1_1776150917977.mp4\n-rw-r--r-- 1 lukas staff 2938324 14 Apr 10:20 compact_monitor_1_1776151225175.mp4\n-rw-r--r-- 1 lukas staff 5734426 14 Apr 10:25 compact_monitor_1_1776151533655.mp4\n-rw-r--r-- 1 lukas staff 711441 14 Apr 10:30 compact_monitor_1_1776151841776.mp4\n-rw-r--r-- 1 lukas staff 373214 14 Apr 10:35 compact_monitor_1_1776152149591.mp4\n-rw-r--r-- 1 lukas staff 259200 14 Apr 10:40 compact_monitor_1_1776152456802.mp4\n-rw-r--r-- 1 lukas staff 563549 14 Apr 10:46 compact_monitor_1_1776152770846.mp4\n-rw-r--r-- 1 lukas staff 1085034 14 Apr 10:51 compact_monitor_1_1776153081304.mp4\n-rw-r--r-- 1 lukas staff 5856145 14 Apr 10:56 compact_monitor_1_1776153389824.mp4\n-rw-r--r-- 1 lukas staff 3729206 14 Apr 11:01 compact_monitor_1_1776153702196.mp4\n-rw-r--r-- 1 lukas staff 1381857 14 Apr 11:06 compact_monitor_1_1776154011626.mp4\n-rw-r--r-- 1 lukas staff 590718 14 Apr 11:12 compact_monitor_1_1776154319547.mp4\n-rw-r--r-- 1 lukas staff 1306438 14 Apr 11:17 compact_monitor_1_1776154623893.mp4\n-rw-r--r-- 1 lukas staff 216930 14 Apr 11:22 compact_monitor_1_1776154930014.mp4\n-rw-r--r-- 1 lukas staff 473698 14 Apr 11:27 compact_monitor_1_1776155238144.mp4\n-rw-r--r-- 1 lukas staff 3051314 14 Apr 11:32 compact_monitor_1_1776155547239.mp4\n-rw-r--r-- 1 lukas staff 253380 14 Apr 11:37 compact_monitor_1_1776155850943.mp4\n-rw-r--r-- 1 lukas staff 258154 14 Apr 11:42 compact_monitor_1_1776156154229.mp4\n-rw-r--r-- 1 lukas staff 962893 14 Apr 11:47 compact_monitor_1_1776156458244.mp4\n-rw-r--r-- 1 lukas staff 1806149 14 Apr 11:52 compact_monitor_1_1776156762972.mp4\n-rw-r--r-- 1 lukas staff 2280711 14 Apr 11:57 compact_monitor_1_1776157067935.mp4\n-rw-r--r-- 1 lukas staff 1779777 14 Apr 12:03 compact_monitor_1_1776157380235.mp4\n-rw-r--r-- 1 lukas staff 792745 14 Apr 12:08 compact_monitor_1_1776157700511.mp4\n-rw-r--r-- 1 lukas staff 290618 14 Apr 12:13 compact_monitor_1_1776158016840.mp4\n-rw-r--r-- 1 lukas staff 572761 14 Apr 12:18 compact_monitor_1_1776158333836.mp4\n-rw-r--r-- 1 lukas staff 200419 14 Apr 12:24 compact_monitor_1_1776158651565.mp4\n-rw-r--r-- 1 lukas staff 190795 14 Apr 12:29 compact_monitor_1_1776158966333.mp4\n-rw-r--r-- 1 lukas staff 2126277 14 Apr 12:34 compact_monitor_1_1776159274939.mp4\n-rw-r--r-- 1 lukas staff 3747860 14 Apr 12:39 compact_monitor_1_1776159588710.mp4\n-rw-r--r-- 1 lukas staff 2152422 14 Apr 12:45 compact_monitor_1_1776159900733.mp4\n-rw-r--r-- 1 lukas staff 709258 14 Apr 12:50 compact_monitor_1_1776160204634.mp4\n-rw-r--r-- 1 lukas staff 1158847 14 Apr 12:55 compact_monitor_1_1776160508015.mp4\n-rw-r--r-- 1 lukas staff 1813578 14 Apr 13:00 compact_monitor_1_1776160811806.mp4\n-rw-r--r-- 1 lukas staff 684607 14 Apr 13:05 compact_monitor_1_1776161119981.mp4\n-rw-r--r-- 1 lukas staff 636562 14 Apr 13:10 compact_monitor_1_1776161424648.mp4\n-rw-r--r-- 1 lukas staff 323432 14 Apr 13:15 compact_monitor_1_1776161728448.mp4\n-rw-r--r-- 1 lukas staff 294055 14 Apr 13:20 compact_monitor_1_1776162032394.mp4\n-rw-r--r-- 1 lukas staff 296941 14 Apr 13:25 compact_monitor_1_1776162336175.mp4\n-rw-r--r-- 1 lukas staff 292219 14 Apr 13:30 compact_monitor_1_1776162640619.mp4\n-rw-r--r-- 1 lukas staff 293726 14 Apr 13:35 compact_monitor_1_1776162943050.mp4\n-rw-r--r-- 1 lukas staff 832989 14 Apr 13:40 compact_monitor_1_1776163246420.mp4\n-rw-r--r-- 1 lukas staff 1068134 14 Apr 13:45 compact_monitor_1_1776163549145.mp4\n-rw-r--r-- 1 lukas staff 501189 14 Apr 13:50 compact_monitor_1_1776163853383.mp4\n-rw-r--r-- 1 lukas staff 930299 14 Apr 13:55 compact_monitor_1_1776164155311.mp4\n-rw-r--r-- 1 lukas staff 2515358 14 Apr 14:01 compact_monitor_1_1776164459131.mp4\n-rw-r--r-- 1 lukas staff 1286863 14 Apr 14:06 compact_monitor_1_1776164766940.mp4\n-rw-r--r-- 1 lukas staff 1472795 14 Apr 14:15 compact_monitor_1_1776165318512.mp4\n-rw-r--r-- 1 lukas staff 439699 14 Apr 14:20 compact_monitor_1_1776165627501.mp4\n-rw-r--r-- 1 lukas staff 519424 14 Apr 14:25 compact_monitor_1_1776165931952.mp4\n-rw-r--r-- 1 lukas staff 2267443 14 Apr 14:30 compact_monitor_1_1776166235408.mp4\n-rw-r--r-- 1 lukas staff 1637916 14 Apr 14:35 compact_monitor_1_1776166551721.mp4\n-rw-r--r-- 1 lukas staff 1111434 14 Apr 14:41 compact_monitor_1_1776166862836.mp4\n-rw-r--r-- 1 lukas staff 1546177 14 Apr 14:46 compact_monitor_1_1776167176709.mp4\n-rw-r--r-- 1 lukas staff 466769 14 Apr 14:51 compact_monitor_1_1776167484535.mp4\n-rw-r--r-- 1 lukas staff 993316 14 Apr 14:56 compact_monitor_1_1776167793776.mp4\n-rw-r--r-- 1 lukas staff 2902714 14 Apr 15:01 compact_monitor_1_1776168105399.mp4\n-rw-r--r-- 1 lukas staff 1279133 14 Apr 15:06 compact_monitor_1_1776168413169.mp4\n-rw-r--r-- 1 lukas staff 1132592 14 Apr 15:12 compact_monitor_1_1776168722629.mp4\n-rw-r--r-- 1 lukas staff 355416 14 Apr 15:17 compact_monitor_1_1776169031962.mp4\n-rw-r--r-- 1 lukas staff 345697 14 Apr 15:22 compact_monitor_1_1776169337693.mp4\n-rw-r--r-- 1 lukas staff 3063911 14 Apr 15:27 compact_monitor_1_1776169641353.mp4\n-rw-r--r-- 1 lukas staff 5369163 14 Apr 15:32 compact_monitor_1_1776169957193.mp4\n-rw-r--r-- 1 lukas staff 3605997 14 Apr 15:38 compact_monitor_1_1776170274586.mp4\n-rw-r--r-- 1 lukas staff 1662201 14 Apr 15:43 compact_monitor_1_1776170596259.mp4\n-rw-r--r-- 1 lukas staff 2518520 14 Apr 15:48 compact_monitor_1_1776170900299.mp4\n-rw-r--r-- 1 lukas staff 2298616 14 Apr 15:53 compact_monitor_1_1776171206621.mp4\n-rw-r--r-- 1 lukas staff 252208 14 Apr 15:58 compact_monitor_1_1776171511042.mp4\n-rw-r--r-- 1 lukas staff 547163 14 Apr 16:03 compact_monitor_1_1776171816609.mp4\n-rw-r--r-- 1 lukas staff 3548604 14 Apr 16:08 compact_monitor_1_1776172119791.mp4\n-rw-r--r-- 1 lukas staff 1006390 14 Apr 16:13 compact_monitor_1_1776172427942.mp4\n-rw-r--r-- 1 lukas staff 1168310 14 Apr 16:18 compact_monitor_1_1776172735350.mp4\n-rw-r--r-- 1 lukas staff 2138214 14 Apr 16:24 compact_monitor_1_1776173046731.mp4\n-rw-r--r-- 1 lukas staff 2138875 14 Apr 16:29 compact_monitor_1_1776173354299.mp4\n-rw-r--r-- 1 lukas staff 336470 14 Apr 16:34 compact_monitor_1_1776173662610.mp4\n-rw-r--r-- 1 lukas staff 330494 14 Apr 16:39 compact_monitor_1_1776173971011.mp4\n-rw-r--r-- 1 lukas staff 574889 14 Apr 16:44 compact_monitor_1_1776174275028.mp4\n-rw-r--r-- 1 lukas staff 450335 14 Apr 16:49 compact_monitor_1_1776174580719.mp4\n-rw-r--r-- 1 lukas staff 452365 14 Apr 16:54 compact_monitor_1_1776174888498.mp4\n-rw-r--r-- 1 lukas staff 499947 14 Apr 16:59 compact_monitor_1_1776175195769.mp4\n-rw-r--r-- 1 lukas staff 501324 14 Apr 17:05 compact_monitor_1_1776175516084.mp4\n-rw-r--r-- 1 lukas staff 1187862 14 Apr 17:10 compact_monitor_1_1776175831658.mp4\n-rw-r--r-- 1 lukas staff 4276500 14 Apr 17:15 compact_monitor_1_1776176143265.mp4\n-rw-r--r-- 1 lukas staff 3712128 14 Apr 17:21 compact_monitor_1_1776176471641.mp4\n-rw-r--r-- 1 lukas staff 3520036 14 Apr 17:26 compact_monitor_1_1776176786477.mp4\n-rw-r--r-- 1 lukas staff 4125306 14 Apr 17:31 compact_monitor_1_1776177099043.mp4\n-rw-r--r-- 1 lukas staff 3547886 14 Apr 17:37 compact_monitor_1_1776177433201.mp4\n-rw-r--r-- 1 lukas staff 2400891 14 Apr 17:42 compact_monitor_1_1776177752872.mp4\n-rw-r--r-- 1 lukas staff 4689207 14 Apr 17:47 compact_monitor_1_1776178058207.mp4\n-rw-r--r-- 1 lukas staff 1801277 14 Apr 17:53 compact_monitor_1_1776178379517.mp4\n-rw-r--r-- 1 lukas staff 3259926 14 Apr 17:58 compact_monitor_1_1776178686281.mp4\n-rw-r--r-- 1 lukas staff 1470635 14 Apr 18:03 compact_monitor_1_1776178992046.mp4\n-rw-r--r-- 1 lukas staff 3102429 14 Apr 18:08 compact_monitor_1_1776179297527.mp4\n-rw-r--r-- 1 lukas staff 223940 14 Apr 18:13 compact_monitor_1_1776179607218.mp4\n-rw-r--r-- 1 lukas staff 871065 14 Apr 18:13 compact_monitor_1_1776179613012.mp4\n-rw-r--r-- 1 lukas staff 1029083 14 Apr 18:18 compact_monitor_1_1776179929971.mp4\n-rw-r--r-- 1 lukas staff 1117436 14 Apr 18:24 compact_monitor_1_1776180248849.mp4\n-rw-r--r-- 1 lukas staff 987269 14 Apr 18:29 compact_monitor_1_1776180569996.mp4\n-rw-r--r-- 1 lukas staff 896704 14 Apr 18:34 compact_monitor_1_1776180888049.mp4\n-rw-r--r-- 1 lukas staff 1945946 14 Apr 18:40 compact_monitor_1_1776181202583.mp4\n-rw-r--r-- 1 lukas staff 862072 14 Apr 18:45 compact_monitor_1_1776181526071.mp4\n-rw-r--r-- 1 lukas staff 813756 14 Apr 18:50 compact_monitor_1_1776181848713.mp4\n-rw-r--r-- 1 lukas staff 813226 14 Apr 18:56 compact_monitor_1_1776182167765.mp4\n-rw-r--r-- 1 lukas staff 792289 14 Apr 19:01 compact_monitor_1_1776182486906.mp4\n-rw-r--r-- 1 lukas staff 900197 14 Apr 19:06 compact_monitor_1_1776182803477.mp4\n-rw-r--r-- 1 lukas staff 903090 14 Apr 19:12 compact_monitor_1_1776183124102.mp4\n-rw-r--r-- 1 lukas staff 821885 14 Apr 19:17 compact_monitor_1_1776183446647.mp4\n-rw-r--r-- 1 lukas staff 827224 14 Apr 19:22 compact_monitor_1_1776183765602.mp4\n-rw-r--r-- 1 lukas staff 844977 14 Apr 19:28 compact_monitor_1_1776184085319.mp4\n-rw-r--r-- 1 lukas staff 4160651 15 Apr 09:59 compact_monitor_1_1776236348162.mp4\n-rw-r--r-- 1 lukas staff 2257702 15 Apr 09:59 compact_monitor_1_1776236355103.mp4\n-rw-r--r-- 1 lukas staff 803789 14 Apr 09:34 compact_monitor_2_1776148467123.mp4\n-rw-r--r-- 1 lukas staff 846598 14 Apr 09:39 compact_monitor_2_1776148769344.mp4\n-rw-r--r-- 1 lukas staff 380187 14 Apr 09:44 compact_monitor_2_1776149072222.mp4\n-rw-r--r-- 1 lukas staff 4330357 14 Apr 09:49 compact_monitor_2_1776149375411.mp4\n-rw-r--r-- 1 lukas staff 5979630 14 Apr 09:54 compact_monitor_2_1776149684838.mp4\n-rw-r--r-- 1 lukas staff 5685863 14 Apr 10:00 compact_monitor_2_1776149997069.mp4\n-rw-r--r-- 1 lukas staff 1817789 14 Apr 10:05 compact_monitor_2_1776150308175.mp4\n-rw-r--r-- 1 lukas staff 3734598 14 Apr 10:10 compact_monitor_2_1776150613826.mp4\n-rw-r--r-- 1 lukas staff 7824075 14 Apr 10:15 compact_monitor_2_1776150920663.mp4\n-rw-r--r-- 1 lukas staff 6299436 14 Apr 10:20 compact_monitor_2_1776151228707.mp4\n-rw-r--r-- 1 lukas staff 3269154 14 Apr 10:25 compact_monitor_2_1776151537695.mp4\n-rw-r--r-- 1 lukas staff 9004762 14 Apr 10:30 compact_monitor_2_1776151844100.mp4\n-rw-r--r-- 1 lukas staff 4710671 14 Apr 10:35 compact_monitor_2_1776152152089.mp4\n-rw-r--r-- 1 lukas staff 11173604 14 Apr 10:41 compact_monitor_2_1776152458959.mp4\n-rw-r--r-- 1 lukas staff 6761014 14 Apr 10:46 compact_monitor_2_1776152773411.mp4\n-rw-r--r-- 1 lukas staff 3510200 14 Apr 10:51 compact_monitor_2_1776153084189.mp4\n-rw-r--r-- 1 lukas staff 5292708 14 Apr 10:56 compact_monitor_2_1776153395785.mp4\n-rw-r--r-- 1 lukas staff 5487046 14 Apr 11:01 compact_monitor_2_1776153706319.mp4\n-rw-r--r-- 1 lukas staff 5305685 14 Apr 11:06 compact_monitor_2_1776154014738.mp4\n-rw-r--r-- 1 lukas staff 1963074 14 Apr 11:12 compact_monitor_2_1776154320980.mp4\n-rw-r--r-- 1 lukas staff 2513039 14 Apr 11:17 compact_monitor_2_1776154625932.mp4\n-rw-r--r-- 1 lukas staff 2532455 14 Apr 11:22 compact_monitor_2_1776154932083.mp4\n-rw-r--r-- 1 lukas staff 5825408 14 Apr 11:27 compact_monitor_2_1776155240989.mp4\n-rw-r--r-- 1 lukas staff 2066410 14 Apr 11:32 compact_monitor_2_1776155549265.mp4\n-rw-r--r-- 1 lukas staff 3082476 14 Apr 11:37 compact_monitor_2_1776155851806.mp4\n-rw-r--r-- 1 lukas staff 1587810 14 Apr 11:42 compact_monitor_2_1776156155857.mp4\n-rw-r--r-- 1 lukas staff 2346718 14 Apr 11:47 compact_monitor_2_1776156460205.mp4\n-rw-r--r-- 1 lukas staff 1579555 14 Apr 11:52 compact_monitor_2_1776156764898.mp4\n-rw-r--r-- 1 lukas staff 5481864 14 Apr 11:57 compact_monitor_2_1776157072094.mp4\n-rw-r--r-- 1 lukas staff 6527601 14 Apr 12:03 compact_monitor_2_1776157385210.mp4\n-rw-r--r-- 1 lukas staff 9023055 14 Apr 12:08 compact_monitor_2_1776157705883.mp4\n-rw-r--r-- 1 lukas staff 7566360 14 Apr 12:13 compact_monitor_2_1776158020136.mp4\n-rw-r--r-- 1 lukas staff 8801302 14 Apr 12:19 compact_monitor_2_1776158336585.mp4\n-rw-r--r-- 1 lukas staff 4139540 14 Apr 12:24 compact_monitor_2_1776158655295.mp4\n-rw-r--r-- 1 lukas staff 2987994 14 Apr 12:29 compact_monitor_2_1776158968629.mp4\n-rw-r--r-- 1 lukas staff 6323688 14 Apr 12:34 compact_monitor_2_1776159279327.mp4\n-rw-r--r-- 1 lukas staff 2684920 14 Apr 12:40 compact_monitor_2_1776159594527.mp4\n-rw-r--r-- 1 lukas staff 1646460 14 Apr 12:45 compact_monitor_2_1776159902504.mp4\n-rw-r--r-- 1 lukas staff 1767063 14 Apr 12:50 compact_monitor_2_1776160206071.mp4\n-rw-r--r-- 1 lukas staff 1910044 14 Apr 12:55 compact_monitor_2_1776160509646.mp4\n-rw-r--r-- 1 lukas staff 5101631 14 Apr 13:00 compact_monitor_2_1776160814860.mp4\n-rw-r--r-- 1 lukas staff 2487221 14 Apr 13:05 compact_monitor_2_1776161121862.mp4\n-rw-r--r-- 1 lukas staff 1452868 14 Apr 13:10 compact_monitor_2_1776161425872.mp4\n-rw-r--r-- 1 lukas staff 2963557 14 Apr 13:15 compact_monitor_2_1776161729470.mp4\n-rw-r--r-- 1 lukas staff 984939 14 Apr 13:20 compact_monitor_2_1776162033592.mp4\n-rw-r--r-- 1 lukas staff 3411829 14 Apr 13:25 compact_monitor_2_1776162337569.mp4\n-rw-r--r-- 1 lukas staff 622723 14 Apr 13:30 compact_monitor_2_1776162641477.mp4\n-rw-r--r-- 1 lukas staff 2472562 14 Apr 13:35 compact_monitor_2_1776162943983.mp4\n-rw-r--r-- 1 lukas staff 1139489 14 Apr 13:40 compact_monitor_2_1776163247509.mp4\n-rw-r--r-- 1 lukas staff 862846 14 Apr 13:45 compact_monitor_2_1776163550848.mp4\n-rw-r--r-- 1 lukas staff 274959 14 Apr 13:50 compact_monitor_2_1776163854468.mp4\n-rw-r--r-- 1 lukas staff 2036659 14 Apr 13:55 compact_monitor_2_1776164156817.mp4\n-rw-r--r-- 1 lukas staff 6134905 14 Apr 14:01 compact_monitor_2_1776164461879.mp4\n-rw-r--r-- 1 lukas staff 9022378 14 Apr 14:06 compact_monitor_2_1776164770881.mp4\n-rw-r--r-- 1 lukas staff 4566763 14 Apr 14:15 compact_monitor_2_1776165320959.mp4\n-rw-r--r-- 1 lukas staff 462447 14 Apr 14:20 compact_monitor_2_1776165629627.mp4\n-rw-r--r-- 1 lukas staff 709149 14 Apr 14:25 compact_monitor_2_1776165933147.mp4\n-rw-r--r-- 1 lukas staff 4478027 14 Apr 14:30 compact_monitor_2_1776166241146.mp4\n-rw-r--r-- 1 lukas staff 7488847 14 Apr 14:36 compact_monitor_2_1776166555947.mp4\n-rw-r--r-- 1 lukas staff 7883274 14 Apr 14:41 compact_monitor_2_1776166866538.mp4\n-rw-r--r-- 1 lukas staff 2869256 14 Apr 14:46 compact_monitor_2_1776167179562.mp4\n-rw-r--r-- 1 lukas staff 3068440 14 Apr 14:51 compact_monitor_2_1776167487518.mp4\n-rw-r--r-- 1 lukas staff 1816545 14 Apr 14:56 compact_monitor_2_1776167799896.mp4\n-rw-r--r-- 1 lukas staff 3180474 14 Apr 15:01 compact_monitor_2_1776168109470.mp4\n-rw-r--r-- 1 lukas staff 3774140 14 Apr 15:07 compact_monitor_2_1776168415670.mp4\n-rw-r--r-- 1 lukas staff 4536363 14 Apr 15:12 compact_monitor_2_1776168725137.mp4\n-rw-r--r-- 1 lukas staff 2387221 14 Apr 15:17 compact_monitor_2_1776169033283.mp4\n-rw-r--r-- 1 lukas staff 2605350 14 Apr 15:22 compact_monitor_2_1776169338888.mp4\n-rw-r--r-- 1 lukas staff 6906038 14 Apr 15:27 compact_monitor_2_1776169645977.mp4\n-rw-r--r-- 1 lukas staff 5738495 14 Apr 15:32 compact_monitor_2_1776169965047.mp4\n-rw-r--r-- 1 lukas staff 5595644 14 Apr 15:38 compact_monitor_2_1776170281359.mp4\n-rw-r--r-- 1 lukas staff 584749 14 Apr 15:43 compact_monitor_2_1776170598047.mp4\n-rw-r--r-- 1 lukas staff 2633541 14 Apr 15:48 compact_monitor_2_1776170903735.mp4\n-rw-r--r-- 1 lukas staff 770182 14 Apr 15:53 compact_monitor_2_1776171208825.mp4\n-rw-r--r-- 1 lukas staff 1658362 14 Apr 15:58 compact_monitor_2_1776171512473.mp4\n-rw-r--r-- 1 lukas staff 295793 14 Apr 16:03 compact_monitor_2_1776171817959.mp4\n-rw-r--r-- 1 lukas staff 3540965 14 Apr 16:08 compact_monitor_2_1776172123631.mp4\n-rw-r--r-- 1 lukas staff 3589660 14 Apr 16:13 compact_monitor_2_1776172430586.mp4\n-rw-r--r-- 1 lukas staff 4735044 14 Apr 16:19 compact_monitor_2_1776172739210.mp4\n-rw-r--r-- 1 lukas staff 4951644 14 Apr 16:24 compact_monitor_2_1776173049122.mp4\n-rw-r--r-- 1 lukas staff 5939102 14 Apr 16:29 compact_monitor_2_1776173357170.mp4\n-rw-r--r-- 1 lukas staff 2549744 14 Apr 16:34 compact_monitor_2_1776173665142.mp4\n-rw-r--r-- 1 lukas staff 996149 14 Apr 16:39 compact_monitor_2_1776173972456.mp4\n-rw-r--r-- 1 lukas staff 2663346 14 Apr 16:44 compact_monitor_2_1776174276676.mp4\n-rw-r--r-- 1 lukas staff 1776844 14 Apr 16:49 compact_monitor_2_1776174582351.mp4\n-rw-r--r-- 1 lukas staff 1669202 14 Apr 16:54 compact_monitor_2_1776174889930.mp4\n-rw-r--r-- 1 lukas staff 5414828 14 Apr 17:00 compact_monitor_2_1776175198918.mp4\n-rw-r--r-- 1 lukas staff 5727100 14 Apr 17:05 compact_monitor_2_1776175518133.mp4\n-rw-r--r-- 1 lukas staff 6080220 14 Apr 17:10 compact_monitor_2_1776175835473.mp4\n-rw-r--r-- 1 lukas staff 3631681 14 Apr 17:16 compact_monitor_2_1776176159421.mp4\n-rw-r--r-- 1 lukas staff 1861818 14 Apr 17:21 compact_monitor_2_1776176479999.mp4\n-rw-r--r-- 1 lukas staff 1471229 14 Apr 17:26 compact_monitor_2_1776176794129.mp4\n-rw-r--r-- 1 lukas staff 1792667 14 Apr 17:32 compact_monitor_2_1776177119122.mp4\n-rw-r--r-- 1 lukas staff 2398088 14 Apr 17:37 compact_monitor_2_1776177447361.mp4\n-rw-r--r-- 1 lukas staff 1873376 14 Apr 17:42 compact_monitor_2_1776177755837.mp4\n-rw-r--r-- 1 lukas staff 3686281 14 Apr 17:47 compact_monitor_2_1776178069540.mp4\n-rw-r--r-- 1 lukas staff 1842517 14 Apr 17:53 compact_monitor_2_1776178382342.mp4\n-rw-r--r-- 1 lukas staff 2595005 14 Apr 17:58 compact_monitor_2_1776178688999.mp4\n-rw-r--r-- 1 lukas staff 3352578 14 Apr 18:03 compact_monitor_2_1776178994368.mp4\n-rw-r--r-- 1 lukas staff 7474140 14 Apr 18:08 compact_monitor_2_1776179301874.mp4\n-rw-r--r-- 1 lukas staff 18300640 14 Apr 18:13 compact_monitor_2_1776179614376.mp4\n-rw-r--r-- 1 lukas staff 8302944 14 Apr 18:13 compact_monitor_2_1776179625270.mp4\n-rw-r--r-- 1 lukas staff 27338956 14 Apr 18:19 compact_monitor_2_1776179934590.mp4\n-rw-r--r-- 1 lukas staff 1061768 14 Apr 18:19 compact_monitor_2_1776179947276.mp4\n-rw-r--r-- 1 lukas staff 24282145 14 Apr 18:24 compact_monitor_2_1776180254284.mp4\n-rw-r--r-- 1 lukas staff 5647384 14 Apr 18:24 compact_monitor_2_1776180266890.mp4\n-rw-r--r-- 1 lukas staff 32748524 14 Apr 18:29 compact_monitor_2_1776180574284.mp4\n-rw-r--r-- 1 lukas staff 25769571 14 Apr 18:35 compact_monitor_2_1776180892046.mp4\n-rw-r--r-- 1 lukas staff 41983533 14 Apr 18:40 compact_monitor_2_1776181207025.mp4\n-rw-r--r-- 1 lukas staff 3365850 14 Apr 18:40 compact_monitor_2_1776181223864.mp4\n-rw-r--r-- 1 lukas staff 40919053 14 Apr 18:45 compact_monitor_2_1776181530742.mp4\n-rw-r--r-- 1 lukas staff 3870375 14 Apr 18:45 compact_monitor_2_1776181546619.mp4\n-rw-r--r-- 1 lukas staff 36175005 14 Apr 18:51 compact_monitor_2_1776181853124.mp4\n-rw-r--r-- 1 lukas staff 36717883 14 Apr 18:56 compact_monitor_2_1776182171990.mp4\n-rw-r--r-- 1 lukas staff 27140350 14 Apr 19:01 compact_monitor_2_1776182491150.mp4\n-rw-r--r-- 1 lukas staff 20914618 14 Apr 19:06 compact_monitor_2_1776182808796.mp4\n-rw-r--r-- 1 lukas staff 4716229 14 Apr 19:07 compact_monitor_2_1776182820060.mp4\n-rw-r--r-- 1 lukas staff 24788277 14 Apr 19:12 compact_monitor_2_1776183129006.mp4\n-rw-r--r-- 1 lukas staff 7974655 14 Apr 19:12 compact_monitor_2_1776183141483.mp4\n-rw-r--r-- 1 lukas staff 22872307 14 Apr 19:17 compact_monitor_2_1776183451042.mp4\n-rw-r--r-- 1 lukas staff 3283631 14 Apr 19:17 compact_monitor_2_1776183462827.mp4\n-rw-r--r-- 1 lukas staff 32308259 14 Apr 19:23 compact_monitor_2_1776183769519.mp4\n-rw-r--r-- 1 lukas staff 2847482 14 Apr 19:23 compact_monitor_2_1776183783534.mp4\n-rw-r--r-- 1 lukas staff 36823186 14 Apr 19:28 compact_monitor_2_1776184089558.mp4\n-rw-r--r-- 1 lukas staff 5825352 14 Apr 19:28 compact_monitor_2_1776184104421.mp4\n-rw-r--r-- 1 lukas staff 30437061 15 Apr 09:59 compact_monitor_2_1776236357169.mp4\n-rw-r--r-- 1 lukas staff 4350302 15 Apr 09:59 compact_monitor_2_1776236373794.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 11:58:00] ========================================\n[2026-04-18 11:58:00] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 11:58:00] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 11:58:04] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✗ 531 / 245 files\n\n[2026-04-18 11:58:09] Archive DB size: 3.0G\n[2026-04-18 11:58:09] Total time: 0m9s\n[2026-04-18 11:58:09] Sync complete for 2026-04-14\n[2026-04-18 11:58:09] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 11:59:41] ========================================\n[2026-04-18 11:59:41] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 11:59:41] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 11:59:45] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✓ 2m07s (245 files, 1.0G)\n\n[2026-04-18 12:01:52] Archive DB size: 3.0G\n[2026-04-18 12:01:52] Total time: 2m11s\n[2026-04-18 12:01:52] Sync complete for 2026-04-14\n[2026-04-18 12:01:52] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:03:13] ========================================\n[2026-04-18 12:03:13] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:03:13] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: will be created\n Data dir: OK (245 files, 1.0G)\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)\nParse error near line 3: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames \n error here ---^\nParse error near line 4: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements \n error here ---^\nParse error near line 5: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events \n error here ---^\nParse error near line 6: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text \n error here ---^\nParse error near line 7: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks\n error here ---^\nParse error near line 8: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings \n error here ---^\nRuntime error near line 9: no such database: nas\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ls /Volumes/screenpipe/\nls: /Volumes/screenpipe/: Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ cd /Volumes \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll\ntotal 96\ndrwxr-xr-x 6 root wheel 192 18 Apr 11:17 .\ndrwxr-xr-x 20 root wheel 640 4 Aug 2024 ..\nlrwxr-xr-x 1 root wheel 1 16 Apr 15:43 Macintosh HD -> /\ndrwx------ 1 lukas staff 16384 11 Apr 15:46 Test\ndrwx------ 1 lukas staff 16384 13 Mar 10:17 Work\ndrwx------ 1 lukas staff 16384 17 Apr 21:29 screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls -la /Volumes/screenpipe/\ntotal 0\nls: /Volumes/screenpipe/: Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ mount | grep screenpipe\n//Adm1n@DXP4800PLUS-B5F8/screenpipe on /Volumes/screenpipe (smbfs, nodev, nosuid, mounted by lukas)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ umount /Volumes/screenpipe\numount: unmount(/Volumes/screenpipe): Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:06:45] ========================================\n[2026-04-18 12:06:45] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:06:45] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: will be created\n Data dir: OK (245 files, 1.0G)\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)\nParse error near line 3: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames \n error here ---^\nParse error near line 4: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements \n error here ---^\nParse error near line 5: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events \n error here ---^\nParse error near line 6: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text \n error here ---^\nParse error near line 7: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks\n error here ---^\nParse error near line 8: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings \n error here ---^\nRuntime error near line 9: no such database: nas\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:06:51] ========================================\n[2026-04-18 12:06:51] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:06:51] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:06:55] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m05s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✓ 0m04s (245 files, 1.0G)\n\n[2026-04-18 12:07:00] Archive DB size: 3.0G\n[2026-04-18 12:07:00] Total time: 0m9s\n[2026-04-18 12:07:00] Sync complete for 2026-04-14\n[2026-04-18 12:07:00] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15\n[2026-04-18 12:07:03] ========================================\n[2026-04-18 12:07:03] Screenpipe sync starting for: 2026-04-15\n[2026-04-18 12:07:03] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:07:07] Date 2026-04-15 already has 12874 frames in archive — skipping DB sync\n Data dir: OK (241 files, 2.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-15\n rsync 2026-04-15/ → NAS ✓ 3m22s (241 files, 2.0G)\n\n[2026-04-18 12:10:30] Archive DB size: 3.0G\n[2026-04-18 12:10:30] Total time: 3m27s\n[2026-04-18 12:10:30] Sync complete for 2026-04-15\n[2026-04-18 12:10:30] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-16\n[2026-04-18 12:16:30] ========================================\n[2026-04-18 12:16:30] Screenpipe sync starting for: 2026-04-16\n[2026-04-18 12:16:30] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:16:33] Date 2026-04-16 already has 9270 frames in archive — skipping DB sync\n Data dir: OK (232 files, 799M)\n\n[+00m03s] ▶ Copying data folder for 2026-04-16\n rsync 2026-04-16/ → NAS ✓ 1m46s (232 files, 799M)\n\n[2026-04-18 12:18:20] Archive DB size: 3.0G\n[2026-04-18 12:18:20] Total time: 1m50s\n[2026-04-18 12:18:20] Sync complete for 2026-04-16\n[2026-04-18 12:18:20] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-17\n[2026-04-18 12:18:38] ========================================\n[2026-04-18 12:18:38] Screenpipe sync starting for: 2026-04-17\n[2026-04-18 12:18:38] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:18:42] Date 2026-04-17 already has 10040 frames in archive — skipping DB sync\n Data dir: OK (250 files, 671M)\n\n[+00m04s] ▶ Copying data folder for 2026-04-17\n rsync 2026-04-17/ → NAS ✓ 1m44s (250 files, 671M)\n\n[2026-04-18 12:20:26] Archive DB size: 3.0G\n[2026-04-18 12:20:26] Total time: 1m48s\n[2026-04-18 12:20:26] Sync complete for 2026-04-17\n[2026-04-18 12:20:26] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sqlite3 ~/.screenpipe/db.sqlite \\\n \"SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '%fts%';\"\nui_events_fts\nui_events_fts_data\nui_events_fts_idx\nui_events_fts_docsize\nui_events_fts_config\nelements_fts\nelements_fts_data\nelements_fts_idx\nelements_fts_docsize\nelements_fts_config\naudio_transcriptions_fts\naudio_transcriptions_fts_data\naudio_transcriptions_fts_idx\naudio_transcriptions_fts_docsize\naudio_transcriptions_fts_config\nmemories_fts\nmemories_fts_data\nmemories_fts_idx\nmemories_fts_docsize\nmemories_fts_config\nframes_fts\nframes_fts_data\nframes_fts_idx\nframes_fts_content\nframes_fts_docsize\nframes_fts_config\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sqlite3 ~/.screenpipe/db.sqlite \\\n \"SELECT name, sql FROM sqlite_master WHERE type='table' AND name='ui_events_fts';\"\nui_events_fts|CREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content,\n app_name,\n window_title,\n element_name,\n content='ui_events',\n content_rowid='id',\n tokenize='unicode61'\n)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls\nconfig.json\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-wal\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-12.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-16.0.log\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpipes\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-13.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-17.0.log\ndb.sqlite\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-09.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-14.0.log\u0000\u0000\u0000\u0000\tscreenpipe_sync.sh\ndb.sqlite-shm\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-11.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-15.0.log\u0000\u0000\u0000\u0000\tsync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ alias sp-start\nsp-start='npx screenpipe@latest record --disable-audio &'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ source ~/.zprofile\n\nPoetry could not find a pyproject.toml file in /Users/lukas/.screenpipe or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ alias sp-start \nsp-start='npx screenpipe@latest record --disable-audio --ignored-windows \"Boosteroid\"'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls ~/.screenpipe/data/\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpending-transcriptions\u0000\tscreenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll \ntotal 7614824\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 .\ndrwx------+ 91 lukas staff 2912 18 Apr 12:53 ..\n-rw-r--r--@ 1 lukas staff 8196 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 358 16 Apr 16:49 config.json\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 data\n-rw-r--r--@ 1 lukas staff 3897454592 17 Apr 21:19 db.sqlite\n-rw-r--r--@ 1 lukas staff 32768 18 Apr 13:13 db.sqlite-shm\n-rw-r--r--@ 1 lukas staff 0 17 Apr 21:19 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 15 Apr 14:53 pipes\n-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log\n-rw-r--r-- 1 lukas staff 95425 11 Apr 23:14 screenpipe.2026-04-11.0.log\n-rw-r--r-- 1 lukas staff 72332 12 Apr 23:55 screenpipe.2026-04-12.0.log\n-rw-r--r-- 1 lukas staff 71555 13 Apr 19:50 screenpipe.2026-04-13.0.log\n-rw-r--r-- 1 lukas staff 162389 14 Apr 19:31 screenpipe.2026-04-14.0.log\n-rw-r--r-- 1 lukas staff 175763 15 Apr 18:55 screenpipe.2026-04-15.0.log\n-rw-r--r-- 1 lukas staff 196994 16 Apr 20:33 screenpipe.2026-04-16.0.log\n-rw-r--r-- 1 lukas staff 208424 17 Apr 21:06 screenpipe.2026-04-17.0.log\n-rwxr-xr-x@ 1 lukas staff 14323 18 Apr 12:06 screenpipe_sync.sh\n-rw-r--r--@ 1 lukas staff 12669 18 Apr 12:20 sync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cd data\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 16\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 .\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 data\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd pending-transcriptions \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/pending-transcriptions $ ll\ntotal 0\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 .\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/pending-transcriptions $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ data\nzsh: command not found: data\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 16\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 .\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 data\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd data \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll\ntotal 40\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 .\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 252 lukas staff 8064 17 Apr 21:06 2026-04-17\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-09 \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-09 $ ll\ntotal 79400\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 .\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..\n-rw-r--r-- 1 lukas staff 2558635 9 Apr 20:04 compact_monitor_1_1775754248190.mp4\n-rw-r--r-- 1 lukas staff 5272347 9 Apr 20:09 compact_monitor_1_1775754549504.mp4\n-rw-r--r-- 1 lukas staff 951943 9 Apr 20:15 compact_monitor_1_1775754928127.mp4\n-rw-r--r-- 1 lukas staff 780343 9 Apr 20:20 compact_monitor_1_1775755253065.mp4\n-rw-r--r-- 1 lukas staff 3129755 9 Apr 20:26 compact_monitor_1_1775755561408.mp4\n-rw-r--r-- 1 lukas staff 2369134 9 Apr 20:29 compact_monitor_1_1775755764874.mp4\n-rw-r--r-- 1 lukas staff 2879527 9 Apr 20:32 compact_monitor_1_1775755951928.mp4\n-rw-r--r-- 1 lukas staff 5597115 9 Apr 20:47 compact_monitor_1_1775756847339.mp4\n-rw-r--r-- 1 lukas staff 3460978 9 Apr 21:15 compact_monitor_1_1775758509024.mp4\n-rw-r--r-- 1 lukas staff 1876809 9 Apr 21:15 compact_monitor_1_1775758515203.mp4\n-rw-r--r-- 1 lukas staff 2813430 9 Apr 21:25 compact_monitor_1_1775759143411.mp4\n-rw-r--r-- 1 lukas staff 8937177 11 Apr 14:53 compact_monitor_1_1775908431491.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-09 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll\ntotal 40\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 .\ndrwxr-xr-x 14 lukas staff 448 18 Apr 13:36 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 229 lukas staff 7328 18 Apr 13:35 2026-04-17\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:36 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ll\ntotal 5696\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:36 .\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 ..\n-rw-r--r-- 1 lukas staff 215433 18 Apr 13:33 1776508419390_m1.jpg\n-rw-r--r-- 1 lukas staff 107206 18 Apr 13:33 1776508419555_m2.jpg\n-rw-r--r-- 1 lukas staff 155997 18 Apr 13:33 1776508422128_m1.jpg\n-rw-r--r-- 1 lukas staff 244304 18 Apr 13:33 1776508428450_m1.jpg\n-rw-r--r-- 1 lukas staff 107203 18 Apr 13:33 1776508428554_m2.jpg\n-rw-r--r-- 1 lukas staff 107202 18 Apr 13:33 1776508429142_m2.jpg\n-rw-r--r-- 1 lukas staff 208296 18 Apr 13:34 1776508453522_m1.jpg\n-rw-r--r-- 1 lukas staff 107122 18 Apr 13:34 1776508453670_m2.jpg\n-rw-r--r-- 1 lukas staff 130447 18 Apr 13:34 1776508456271_m1.jpg\n-rw-r--r-- 1 lukas staff 200633 18 Apr 13:34 1776508465399_m1.jpg\n-rw-r--r-- 1 lukas staff 201006 18 Apr 13:34 1776508479214_m1.jpg\n-rw-r--r-- 1 lukas staff 107315 18 Apr 13:34 1776508479222_m2.jpg\n-rw-r--r-- 1 lukas staff 217542 18 Apr 13:35 1776508510109_m1.jpg\n-rw-r--r-- 1 lukas staff 107558 18 Apr 13:35 1776508520117_m2.jpg\n-rw-r--r-- 1 lukas staff 217529 18 Apr 13:35 1776508540416_m1.jpg\n-rw-r--r-- 1 lukas staff 107438 18 Apr 13:35 1776508550498_m2.jpg\n-rw-r--r-- 1 lukas staff 217565 18 Apr 13:36 1776508570741_m1.jpg\n-rw-r--r-- 1 lukas staff 107323 18 Apr 13:36 1776508580887_m2.jpg\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ curl -s http://localhost:3030/health | jq '{audio_status, last_audio: .last_audio_timestamp}'\n{\n \"audio_status\": \"ok\",\n \"last_audio\": \"2026-04-18T13:36:57+03:00\"\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ls ~/.screenpipe/data/\nSystem Audio (output)_2026-04-18_10-34-25.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-36-39.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-34-24.mp4\nSystem Audio (output)_2026-04-18_10-34-49.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-37-02.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-34-56.mp4\nSystem Audio (output)_2026-04-18_10-35-11.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-37-24.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-35-26.mp4\nSystem Audio (output)_2026-04-18_10-35-33.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-35-56.mp4\nSystem Audio (output)_2026-04-18_10-35-55.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpending-transcriptions\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-36-26.mp4\nSystem Audio (output)_2026-04-18_10-36-17.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.db\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-36-56.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ll\ntotal 13080\ndrwxr-xr-x 44 lukas staff 1408 18 Apr 13:37 .\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 ..\n-rw-r--r-- 1 lukas staff 215433 18 Apr 13:33 1776508419390_m1.jpg\n-rw-r--r-- 1 lukas staff 107206 18 Apr 13:33 1776508419555_m2.jpg\n-rw-r--r-- 1 lukas staff 155997 18 Apr 13:33 1776508422128_m1.jpg\n-rw-r--r-- 1 lukas staff 244304 18 Apr 13:33 1776508428450_m1.jpg\n-rw-r--r-- 1 lukas staff 107203 18 Apr 13:33 1776508428554_m2.jpg\n-rw-r--r-- 1 lukas staff 107202 18 Apr 13:33 1776508429142_m2.jpg\n-rw-r--r-- 1 lukas staff 208296 18 Apr 13:34 1776508453522_m1.jpg\n-rw-r--r-- 1 lukas staff 107122 18 Apr 13:34 1776508453670_m2.jpg\n-rw-r--r-- 1 lukas staff 130447 18 Apr 13:34 1776508456271_m1.jpg\n-rw-r--r-- 1 lukas staff 200633 18 Apr 13:34 1776508465399_m1.jpg\n-rw-r--r-- 1 lukas staff 201006 18 Apr 13:34 1776508479214_m1.jpg\n-rw-r--r-- 1 lukas staff 107315 18 Apr 13:34 1776508479222_m2.jpg\n-rw-r--r-- 1 lukas staff 217542 18 Apr 13:35 1776508510109_m1.jpg\n-rw-r--r-- 1 lukas staff 107558 18 Apr 13:35 1776508520117_m2.jpg\n-rw-r--r-- 1 lukas staff 217529 18 Apr 13:35 1776508540416_m1.jpg\n-rw-r--r-- 1 lukas staff 107438 18 Apr 13:35 1776508550498_m2.jpg\n-rw-r--r-- 1 lukas staff 217565 18 Apr 13:36 1776508570741_m1.jpg\n-rw-r--r-- 1 lukas staff 107323 18 Apr 13:36 1776508580887_m2.jpg\n-rw-r--r-- 1 lukas staff 223931 18 Apr 13:36 1776508601010_m1.jpg\n-rw-r--r-- 1 lukas staff 110527 18 Apr 13:36 1776508601828_m2.jpg\n-rw-r--r-- 1 lukas staff 220887 18 Apr 13:36 1776508601839_m1.jpg\n-rw-r--r-- 1 lukas staff 110573 18 Apr 13:36 1776508604812_m2.jpg\n-rw-r--r-- 1 lukas staff 219398 18 Apr 13:37 1776508632417_m1.jpg\n-rw-r--r-- 1 lukas staff 83219 18 Apr 13:37 1776508635039_m2.jpg\n-rw-r--r-- 1 lukas staff 219514 18 Apr 13:37 1776508638212_m1.jpg\n-rw-r--r-- 1 lukas staff 87339 18 Apr 13:37 1776508638212_m2.jpg\n-rw-r--r-- 1 lukas staff 221109 18 Apr 13:37 1776508639686_m1.jpg\n-rw-r--r-- 1 lukas staff 84740 18 Apr 13:37 1776508639725_m2.jpg\n-rw-r--r-- 1 lukas staff 224486 18 Apr 13:37 1776508640520_m1.jpg\n-rw-r--r-- 1 lukas staff 84838 18 Apr 13:37 1776508640592_m2.jpg\n-rw-r--r-- 1 lukas staff 84841 18 Apr 13:37 1776508647855_m2.jpg\n-rw-r--r-- 1 lukas staff 217131 18 Apr 13:37 1776508647864_m1.jpg\n-rw-r--r-- 1 lukas staff 223897 18 Apr 13:37 1776508651398_m1.jpg\n-rw-r--r-- 1 lukas staff 85463 18 Apr 13:37 1776508651398_m2.jpg\n-rw-r--r-- 1 lukas staff 219804 18 Apr 13:37 1776508653328_m1.jpg\n-rw-r--r-- 1 lukas staff 97034 18 Apr 13:37 1776508653420_m2.jpg\n-rw-r--r-- 1 lukas staff 82829 18 Apr 13:37 1776508659506_m2.jpg\n-rw-r--r-- 1 lukas staff 91337 18 Apr 13:37 1776508665504_m2.jpg\n-rw-r--r-- 1 lukas staff 219393 18 Apr 13:37 1776508665924_m1.jpg\n-rw-r--r-- 1 lukas staff 221275 18 Apr 13:37 1776508666761_m1.jpg\n-rw-r--r-- 1 lukas staff 88185 18 Apr 13:37 1776508666868_m2.jpg\n-rw-r--r-- 1 lukas staff 218919 18 Apr 13:37 1776508668460_m1.jpg\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll \ntotal 40\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 .\ndrwxr-xr-x 22 lukas staff 704 18 Apr 13:37 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 229 lukas staff 7328 18 Apr 13:35 2026-04-17\ndrwxr-xr-x 44 lukas staff 1408 18 Apr 13:37 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 1776\ndrwxr-xr-x 23 lukas staff 736 18 Apr 13:38 .\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:34 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:34 System Audio (output)_2026-04-18_10-34-25.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-02.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-37-46.mp4\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 data\ndrwxr-xr-x 2 lukas staff 64 18 Apr 13:36 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\n-rw-r--r-- 1 lukas staff 173278 18 Apr 13:34 soundcore AeroClip (input)_2026-04-18_10-34-24.mp4\n-rw-r--r-- 1 lukas staff 134890 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-34-56.mp4\n-rw-r--r-- 1 lukas staff 172333 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-35-26.mp4\n-rw-r--r-- 1 lukas staff 151441 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-35-56.mp4\n-rw-r--r-- 1 lukas staff 71265 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-36-26.mp4\n-rw-r--r-- 1 lukas staff 22227 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-36-56.mp4\n-rw-r--r-- 1 lukas staff 78730 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-37-26.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 2256\ndrwxr-xr-x 30 lukas staff 960 18 Apr 13:39 .\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:34 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:34 System Audio (output)_2026-04-18_10-34-25.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-02.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:39 System Audio (output)_2026-04-18_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 33475 18 Apr 13:39 System Audio (output)_2026-04-18_10-39-15.mp4\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 data\ndrwxr-xr-x 2 lukas staff 64 18 Apr 13:38 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\n-rw-r--r-- 1 lukas staff 173278 18 Apr 13:34 soundcore AeroClip (input)_2026-04-18_10-34-24.mp4\n-rw-r--r-- 1 lukas staff 134890 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-34-56.mp4\n-rw-r--r-- 1 lukas staff 172333 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-35-26.mp4\n-rw-r--r-- 1 lukas staff 151441 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-35-56.mp4\n-rw-r--r-- 1 lukas staff 71265 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-36-26.mp4\n-rw-r--r-- 1 lukas staff 22227 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-36-56.mp4\n-rw-r--r-- 1 lukas staff 78730 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-37-26.mp4\n-rw-r--r-- 1 lukas staff 54903 18 Apr 13:38 soundcore AeroClip (input)_2026-04-18_10-37-55.mp4\n-rw-r--r-- 1 lukas staff 58492 18 Apr 13:38 soundcore AeroClip (input)_2026-04-18_10-38-25.mp4\n-rw-r--r-- 1 lukas staff 64925 18 Apr 13:39 soundcore AeroClip (input)_2026-04-18_10-38-55.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ curl -s http://localhost:3030/health | jq '.pipeline'\n{\n \"avg_db_latency_ms\": 169.36220472440945,\n \"avg_ocr_latency_ms\": 0.0,\n \"capture_fps_actual\": 0.2466395779893504,\n \"frame_drop_rate\": 0.0,\n \"frames_captured\": 127,\n \"frames_db_written\": 127,\n \"frames_dropped\": 0,\n \"ocr_cache_hit_rate\": 0.0,\n \"ocr_queue_depth\": 0,\n \"pipeline_stall_count\": 0,\n \"time_to_first_frame_ms\": 1434.727,\n \"uptime_secs\": 514.921413,\n \"video_queue_depth\": 0\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $","depth":4,"value":"-rw-r--r-- 1 lukas staff 361011 17 Apr 09:53 compact_monitor_1_1776408824270.mp4\n-rw-r--r-- 1 lukas staff 3365373 17 Apr 09:59 compact_monitor_1_1776409136717.mp4\n-rw-r--r-- 1 lukas staff 2601020 17 Apr 10:04 compact_monitor_1_1776409450395.mp4\n-rw-r--r-- 1 lukas staff 3497066 17 Apr 10:09 compact_monitor_1_1776409759172.mp4\n-rw-r--r-- 1 lukas staff 1507571 17 Apr 10:14 compact_monitor_1_1776410067944.mp4\n-rw-r--r-- 1 lukas staff 943396 17 Apr 10:19 compact_monitor_1_1776410372484.mp4\n-rw-r--r-- 1 lukas staff 1225040 17 Apr 10:24 compact_monitor_1_1776410674629.mp4\n-rw-r--r-- 1 lukas staff 2224229 17 Apr 10:29 compact_monitor_1_1776410981487.mp4\n-rw-r--r-- 1 lukas staff 398291 17 Apr 10:34 compact_monitor_1_1776411298373.mp4\n-rw-r--r-- 1 lukas staff 4376235 17 Apr 10:40 compact_monitor_1_1776411601686.mp4\n-rw-r--r-- 1 lukas staff 5007720 17 Apr 10:45 compact_monitor_1_1776411923026.mp4\n-rw-r--r-- 1 lukas staff 2281319 17 Apr 10:50 compact_monitor_1_1776412242015.mp4\n-rw-r--r-- 1 lukas staff 3182872 17 Apr 10:56 compact_monitor_1_1776412560658.mp4\n-rw-r--r-- 1 lukas staff 3896056 17 Apr 11:01 compact_monitor_1_1776412881181.mp4\n-rw-r--r-- 1 lukas staff 6279582 17 Apr 11:06 compact_monitor_1_1776413192507.mp4\n-rw-r--r-- 1 lukas staff 6492126 17 Apr 11:12 compact_monitor_1_1776413508291.mp4\n-rw-r--r-- 1 lukas staff 6045038 17 Apr 11:17 compact_monitor_1_1776413848971.mp4\n-rw-r--r-- 1 lukas staff 4968033 17 Apr 11:23 compact_monitor_1_1776414180658.mp4\n-rw-r--r-- 1 lukas staff 7109088 17 Apr 11:28 compact_monitor_1_1776414513921.mp4\n-rw-r--r-- 1 lukas staff 9099339 17 Apr 11:34 compact_monitor_1_1776414839842.mp4\n-rw-r--r-- 1 lukas staff 926165 17 Apr 11:34 compact_monitor_1_1776414858793.mp4\n-rw-r--r-- 1 lukas staff 9246778 17 Apr 11:39 compact_monitor_1_1776415182593.mp4\n-rw-r--r-- 1 lukas staff 8361876 17 Apr 11:45 compact_monitor_1_1776415505403.mp4\n-rw-r--r-- 1 lukas staff 7215549 17 Apr 11:50 compact_monitor_1_1776415841776.mp4\n-rw-r--r-- 1 lukas staff 6234445 17 Apr 11:56 compact_monitor_1_1776416174658.mp4\n-rw-r--r-- 1 lukas staff 11694078 17 Apr 12:01 compact_monitor_1_1776416497484.mp4\n-rw-r--r-- 1 lukas staff 7033085 17 Apr 12:07 compact_monitor_1_1776416834587.mp4\n-rw-r--r-- 1 lukas staff 4309161 17 Apr 12:12 compact_monitor_1_1776417157754.mp4\n-rw-r--r-- 1 lukas staff 3782878 17 Apr 12:18 compact_monitor_1_1776417481425.mp4\n-rw-r--r-- 1 lukas staff 5597264 17 Apr 12:23 compact_monitor_1_1776417802134.mp4\n-rw-r--r-- 1 lukas staff 5667747 17 Apr 12:28 compact_monitor_1_1776418119908.mp4\n-rw-r--r-- 1 lukas staff 8840842 17 Apr 12:34 compact_monitor_1_1776418443506.mp4\n-rw-r--r-- 1 lukas staff 5442395 17 Apr 12:39 compact_monitor_1_1776418761701.mp4\n-rw-r--r-- 1 lukas staff 4054014 17 Apr 12:44 compact_monitor_1_1776419074083.mp4\n-rw-r--r-- 1 lukas staff 3734539 17 Apr 12:49 compact_monitor_1_1776419388949.mp4\n-rw-r--r-- 1 lukas staff 3137915 17 Apr 12:55 compact_monitor_1_1776419701686.mp4\n-rw-r--r-- 1 lukas staff 3064654 17 Apr 13:00 compact_monitor_1_1776420015547.mp4\n-rw-r--r-- 1 lukas staff 1189833 17 Apr 13:05 compact_monitor_1_1776420321592.mp4\n-rw-r--r-- 1 lukas staff 1862832 17 Apr 13:10 compact_monitor_1_1776420633887.mp4\n-rw-r--r-- 1 lukas staff 520517 17 Apr 13:15 compact_monitor_1_1776420947144.mp4\n-rw-r--r-- 1 lukas staff 790509 17 Apr 13:20 compact_monitor_1_1776421253865.mp4\n-rw-r--r-- 1 lukas staff 1155599 17 Apr 13:26 compact_monitor_1_1776421566995.mp4\n-rw-r--r-- 1 lukas staff 626836 17 Apr 13:31 compact_monitor_1_1776421884013.mp4\n-rw-r--r-- 1 lukas staff 2709758 17 Apr 13:36 compact_monitor_1_1776422194788.mp4\n-rw-r--r-- 1 lukas staff 894214 17 Apr 13:41 compact_monitor_1_1776422513565.mp4\n-rw-r--r-- 1 lukas staff 1298826 17 Apr 13:47 compact_monitor_1_1776422829105.mp4\n-rw-r--r-- 1 lukas staff 3454896 17 Apr 13:52 compact_monitor_1_1776423143916.mp4\n-rw-r--r-- 1 lukas staff 1369217 17 Apr 13:57 compact_monitor_1_1776423466196.mp4\n-rw-r--r-- 1 lukas staff 1677163 17 Apr 14:03 compact_monitor_1_1776423783420.mp4\n-rw-r--r-- 1 lukas staff 556702 17 Apr 14:08 compact_monitor_1_1776424109344.mp4\n-rw-r--r-- 1 lukas staff 1001886 17 Apr 14:13 compact_monitor_1_1776424416957.mp4\n-rw-r--r-- 1 lukas staff 1485547 17 Apr 14:18 compact_monitor_1_1776424730536.mp4\n-rw-r--r-- 1 lukas staff 935536 17 Apr 14:24 compact_monitor_1_1776425050631.mp4\n-rw-r--r-- 1 lukas staff 1119642 17 Apr 14:29 compact_monitor_1_1776425372446.mp4\n-rw-r--r-- 1 lukas staff 430883 17 Apr 14:34 compact_monitor_1_1776425690857.mp4\n-rw-r--r-- 1 lukas staff 427035 17 Apr 14:40 compact_monitor_1_1776426003278.mp4\n-rw-r--r-- 1 lukas staff 654605 17 Apr 14:45 compact_monitor_1_1776426312497.mp4\n-rw-r--r-- 1 lukas staff 440539 17 Apr 14:50 compact_monitor_1_1776426625506.mp4\n-rw-r--r-- 1 lukas staff 439802 17 Apr 14:55 compact_monitor_1_1776426939895.mp4\n-rw-r--r-- 1 lukas staff 557755 17 Apr 15:01 compact_monitor_1_1776427261945.mp4\n-rw-r--r-- 1 lukas staff 1071442 17 Apr 15:06 compact_monitor_1_1776427571985.mp4\n-rw-r--r-- 1 lukas staff 2606361 17 Apr 15:11 compact_monitor_1_1776427882803.mp4\n-rw-r--r-- 1 lukas staff 951201 17 Apr 15:16 compact_monitor_1_1776428192090.mp4\n-rw-r--r-- 1 lukas staff 322306 17 Apr 15:21 compact_monitor_1_1776428505150.mp4\n-rw-r--r-- 1 lukas staff 331163 17 Apr 15:26 compact_monitor_1_1776428811953.mp4\n-rw-r--r-- 1 lukas staff 737469 17 Apr 15:32 compact_monitor_1_1776429127526.mp4\n-rw-r--r-- 1 lukas staff 352621 17 Apr 15:37 compact_monitor_1_1776429442374.mp4\n-rw-r--r-- 1 lukas staff 444203 17 Apr 15:42 compact_monitor_1_1776429752217.mp4\n-rw-r--r-- 1 lukas staff 1407505 17 Apr 15:47 compact_monitor_1_1776430066920.mp4\n-rw-r--r-- 1 lukas staff 360974 17 Apr 15:53 compact_monitor_1_1776430376918.mp4\n-rw-r--r-- 1 lukas staff 321565 17 Apr 15:58 compact_monitor_1_1776430691588.mp4\n-rw-r--r-- 1 lukas staff 317048 17 Apr 16:03 compact_monitor_1_1776431003504.mp4\n-rw-r--r-- 1 lukas staff 321894 17 Apr 16:08 compact_monitor_1_1776431317637.mp4\n-rw-r--r-- 1 lukas staff 333513 17 Apr 16:13 compact_monitor_1_1776431629041.mp4\n-rw-r--r-- 1 lukas staff 326264 17 Apr 16:19 compact_monitor_1_1776431942238.mp4\n-rw-r--r-- 1 lukas staff 366336 17 Apr 16:24 compact_monitor_1_1776432254490.mp4\n-rw-r--r-- 1 lukas staff 327825 17 Apr 16:29 compact_monitor_1_1776432574989.mp4\n-rw-r--r-- 1 lukas staff 1048363 17 Apr 16:34 compact_monitor_1_1776432882794.mp4\n-rw-r--r-- 1 lukas staff 1668969 17 Apr 16:39 compact_monitor_1_1776433188842.mp4\n-rw-r--r-- 1 lukas staff 1283899 17 Apr 16:44 compact_monitor_1_1776433493858.mp4\n-rw-r--r-- 1 lukas staff 314118 17 Apr 16:50 compact_monitor_1_1776433800642.mp4\n-rw-r--r-- 1 lukas staff 547478 17 Apr 16:55 compact_monitor_1_1776434111371.mp4\n-rw-r--r-- 1 lukas staff 868654 17 Apr 17:00 compact_monitor_1_1776434420728.mp4\n-rw-r--r-- 1 lukas staff 885215 17 Apr 17:05 compact_monitor_1_1776434723901.mp4\n-rw-r--r-- 1 lukas staff 508905 17 Apr 17:10 compact_monitor_1_1776435038035.mp4\n-rw-r--r-- 1 lukas staff 591766 17 Apr 17:16 compact_monitor_1_1776435363044.mp4\n-rw-r--r-- 1 lukas staff 2031034 17 Apr 17:21 compact_monitor_1_1776435683729.mp4\n-rw-r--r-- 1 lukas staff 2136043 17 Apr 17:26 compact_monitor_1_1776436005076.mp4\n-rw-r--r-- 1 lukas staff 578716 17 Apr 17:32 compact_monitor_1_1776436319163.mp4\n-rw-r--r-- 1 lukas staff 1308705 17 Apr 17:37 compact_monitor_1_1776436630439.mp4\n-rw-r--r-- 1 lukas staff 958771 17 Apr 17:42 compact_monitor_1_1776436939049.mp4\n-rw-r--r-- 1 lukas staff 797771 17 Apr 17:47 compact_monitor_1_1776437247467.mp4\n-rw-r--r-- 1 lukas staff 1230186 17 Apr 17:52 compact_monitor_1_1776437554897.mp4\n-rw-r--r-- 1 lukas staff 862632 17 Apr 17:57 compact_monitor_1_1776437862465.mp4\n-rw-r--r-- 1 lukas staff 757441 17 Apr 18:02 compact_monitor_1_1776438171931.mp4\n-rw-r--r-- 1 lukas staff 686680 17 Apr 18:08 compact_monitor_1_1776438479816.mp4\n-rw-r--r-- 1 lukas staff 1078524 17 Apr 18:13 compact_monitor_1_1776438783339.mp4\n-rw-r--r-- 1 lukas staff 496616 17 Apr 18:18 compact_monitor_1_1776439090720.mp4\n-rw-r--r-- 1 lukas staff 774571 17 Apr 18:23 compact_monitor_1_1776439396975.mp4\n-rw-r--r-- 1 lukas staff 1160291 17 Apr 18:28 compact_monitor_1_1776439703924.mp4\n-rw-r--r-- 1 lukas staff 632541 17 Apr 18:34 compact_monitor_1_1776440053428.mp4\n-rw-r--r-- 1 lukas staff 3291212 17 Apr 21:05 compact_monitor_1_1776449135667.mp4\n-rw-r--r-- 1 lukas staff 768306 17 Apr 09:07 compact_monitor_2_1776406035126.mp4\n-rw-r--r-- 1 lukas staff 9277508 17 Apr 09:12 compact_monitor_2_1776406343152.mp4\n-rw-r--r-- 1 lukas staff 627114 17 Apr 09:12 compact_monitor_2_1776406349962.mp4\n-rw-r--r-- 1 lukas staff 11129246 17 Apr 09:17 compact_monitor_2_1776406653780.mp4\n-rw-r--r-- 1 lukas staff 8352174 17 Apr 09:22 compact_monitor_2_1776406964880.mp4\n-rw-r--r-- 1 lukas staff 8551960 17 Apr 09:28 compact_monitor_2_1776407277493.mp4\n-rw-r--r-- 1 lukas staff 679244 17 Apr 09:28 compact_monitor_2_1776407283693.mp4\n-rw-r--r-- 1 lukas staff 12641011 17 Apr 09:33 compact_monitor_2_1776407588804.mp4\n-rw-r--r-- 1 lukas staff 9384615 17 Apr 09:38 compact_monitor_2_1776407900099.mp4\n-rw-r--r-- 1 lukas staff 4024767 17 Apr 09:43 compact_monitor_2_1776408207652.mp4\n-rw-r--r-- 1 lukas staff 2627851 17 Apr 09:48 compact_monitor_2_1776408517311.mp4\n-rw-r--r-- 1 lukas staff 4877190 17 Apr 09:53 compact_monitor_2_1776408826734.mp4\n-rw-r--r-- 1 lukas staff 3807909 17 Apr 09:59 compact_monitor_2_1776409142638.mp4\n-rw-r--r-- 1 lukas staff 4217716 17 Apr 10:04 compact_monitor_2_1776409454184.mp4\n-rw-r--r-- 1 lukas staff 1717578 17 Apr 10:09 compact_monitor_2_1776409763153.mp4\n-rw-r--r-- 1 lukas staff 1067064 17 Apr 10:14 compact_monitor_2_1776410070480.mp4\n-rw-r--r-- 1 lukas staff 442425 17 Apr 10:19 compact_monitor_2_1776410373664.mp4\n-rw-r--r-- 1 lukas staff 444497 17 Apr 10:24 compact_monitor_2_1776410676126.mp4\n-rw-r--r-- 1 lukas staff 3670025 17 Apr 10:29 compact_monitor_2_1776410986705.mp4\n-rw-r--r-- 1 lukas staff 448939 17 Apr 10:35 compact_monitor_2_1776411299875.mp4\n-rw-r--r-- 1 lukas staff 4490377 17 Apr 10:40 compact_monitor_2_1776411611306.mp4\n-rw-r--r-- 1 lukas staff 7437798 17 Apr 10:45 compact_monitor_2_1776411929615.mp4\n-rw-r--r-- 1 lukas staff 6915447 17 Apr 10:50 compact_monitor_2_1776412245368.mp4\n-rw-r--r-- 1 lukas staff 7988703 17 Apr 10:56 compact_monitor_2_1776412568330.mp4\n-rw-r--r-- 1 lukas staff 5512416 17 Apr 11:01 compact_monitor_2_1776412886253.mp4\n-rw-r--r-- 1 lukas staff 3107875 17 Apr 11:06 compact_monitor_2_1776413199096.mp4\n-rw-r--r-- 1 lukas staff 4158550 17 Apr 11:12 compact_monitor_2_1776413529707.mp4\n-rw-r--r-- 1 lukas staff 4756064 17 Apr 11:17 compact_monitor_2_1776413863997.mp4\n-rw-r--r-- 1 lukas staff 5281060 17 Apr 11:23 compact_monitor_2_1776414194026.mp4\n-rw-r--r-- 1 lukas staff 2605046 17 Apr 11:28 compact_monitor_2_1776414528521.mp4\n-rw-r--r-- 1 lukas staff 5473302 17 Apr 11:34 compact_monitor_2_1776414861255.mp4\n-rw-r--r-- 1 lukas staff 2791759 17 Apr 11:40 compact_monitor_2_1776415194836.mp4\n-rw-r--r-- 1 lukas staff 5494699 17 Apr 11:45 compact_monitor_2_1776415523929.mp4\n-rw-r--r-- 1 lukas staff 4025150 17 Apr 11:51 compact_monitor_2_1776415859261.mp4\n-rw-r--r-- 1 lukas staff 2583684 17 Apr 11:56 compact_monitor_2_1776416187267.mp4\n-rw-r--r-- 1 lukas staff 5240195 17 Apr 12:02 compact_monitor_2_1776416514967.mp4\n-rw-r--r-- 1 lukas staff 3629687 17 Apr 12:07 compact_monitor_2_1776416846005.mp4\n-rw-r--r-- 1 lukas staff 5021721 17 Apr 12:12 compact_monitor_2_1776417172355.mp4\n-rw-r--r-- 1 lukas staff 2986447 17 Apr 12:18 compact_monitor_2_1776417492277.mp4\n-rw-r--r-- 1 lukas staff 3976942 17 Apr 12:23 compact_monitor_2_1776417810578.mp4\n-rw-r--r-- 1 lukas staff 4294715 17 Apr 12:29 compact_monitor_2_1776418132304.mp4\n-rw-r--r-- 1 lukas staff 4698998 17 Apr 12:34 compact_monitor_2_1776418452374.mp4\n-rw-r--r-- 1 lukas staff 3160886 17 Apr 12:39 compact_monitor_2_1776418768555.mp4\n-rw-r--r-- 1 lukas staff 1776908 17 Apr 12:44 compact_monitor_2_1776419082274.mp4\n-rw-r--r-- 1 lukas staff 1500725 17 Apr 12:49 compact_monitor_2_1776419394506.mp4\n-rw-r--r-- 1 lukas staff 1279602 17 Apr 12:55 compact_monitor_2_1776419709571.mp4\n-rw-r--r-- 1 lukas staff 2017894 17 Apr 13:00 compact_monitor_2_1776420018859.mp4\n-rw-r--r-- 1 lukas staff 5639690 17 Apr 13:05 compact_monitor_2_1776420324337.mp4\n-rw-r--r-- 1 lukas staff 4587635 17 Apr 13:10 compact_monitor_2_1776420636421.mp4\n-rw-r--r-- 1 lukas staff 2001162 17 Apr 13:15 compact_monitor_2_1776420949555.mp4\n-rw-r--r-- 1 lukas staff 3658362 17 Apr 13:21 compact_monitor_2_1776421256306.mp4\n-rw-r--r-- 1 lukas staff 7755716 17 Apr 13:26 compact_monitor_2_1776421570292.mp4\n-rw-r--r-- 1 lukas staff 3362766 17 Apr 13:31 compact_monitor_2_1776421886698.mp4\n-rw-r--r-- 1 lukas staff 6893513 17 Apr 13:36 compact_monitor_2_1776422197625.mp4\n-rw-r--r-- 1 lukas staff 4788146 17 Apr 13:42 compact_monitor_2_1776422516390.mp4\n-rw-r--r-- 1 lukas staff 4840848 17 Apr 13:47 compact_monitor_2_1776422832136.mp4\n-rw-r--r-- 1 lukas staff 9094075 17 Apr 13:52 compact_monitor_2_1776423148671.mp4\n-rw-r--r-- 1 lukas staff 10072846 17 Apr 13:57 compact_monitor_2_1776423469970.mp4\n-rw-r--r-- 1 lukas staff 13504297 17 Apr 14:03 compact_monitor_2_1776423787536.mp4\n-rw-r--r-- 1 lukas staff 1622612 17 Apr 14:08 compact_monitor_2_1776424110832.mp4\n-rw-r--r-- 1 lukas staff 5427700 17 Apr 14:13 compact_monitor_2_1776424419206.mp4\n-rw-r--r-- 1 lukas staff 1746789 17 Apr 14:19 compact_monitor_2_1776424736034.mp4\n-rw-r--r-- 1 lukas staff 4232204 17 Apr 14:24 compact_monitor_2_1776425054084.mp4\n-rw-r--r-- 1 lukas staff 4457408 17 Apr 14:29 compact_monitor_2_1776425375574.mp4\n-rw-r--r-- 1 lukas staff 174979 17 Apr 14:34 compact_monitor_2_1776425692307.mp4\n-rw-r--r-- 1 lukas staff 169969 17 Apr 14:40 compact_monitor_2_1776426005170.mp4\n-rw-r--r-- 1 lukas staff 2723106 17 Apr 14:45 compact_monitor_2_1776426315173.mp4\n-rw-r--r-- 1 lukas staff 3313658 17 Apr 14:50 compact_monitor_2_1776426627449.mp4\n-rw-r--r-- 1 lukas staff 4720437 17 Apr 14:55 compact_monitor_2_1776426943213.mp4\n-rw-r--r-- 1 lukas staff 3589313 17 Apr 15:01 compact_monitor_2_1776427263991.mp4\n-rw-r--r-- 1 lukas staff 6295236 17 Apr 15:06 compact_monitor_2_1776427573875.mp4\n-rw-r--r-- 1 lukas staff 3390902 17 Apr 15:11 compact_monitor_2_1776427885283.mp4\n-rw-r--r-- 1 lukas staff 1637607 17 Apr 15:16 compact_monitor_2_1776428194704.mp4\n-rw-r--r-- 1 lukas staff 1355327 17 Apr 15:21 compact_monitor_2_1776428506246.mp4\n-rw-r--r-- 1 lukas staff 4897048 17 Apr 15:27 compact_monitor_2_1776428815157.mp4\n-rw-r--r-- 1 lukas staff 4930900 17 Apr 15:32 compact_monitor_2_1776429130905.mp4\n-rw-r--r-- 1 lukas staff 2581578 17 Apr 15:37 compact_monitor_2_1776429444142.mp4\n-rw-r--r-- 1 lukas staff 4764105 17 Apr 15:42 compact_monitor_2_1776429755437.mp4\n-rw-r--r-- 1 lukas staff 4039902 17 Apr 15:47 compact_monitor_2_1776430069174.mp4\n-rw-r--r-- 1 lukas staff 4735734 17 Apr 15:53 compact_monitor_2_1776430380212.mp4\n-rw-r--r-- 1 lukas staff 2195410 17 Apr 15:58 compact_monitor_2_1776430693483.mp4\n-rw-r--r-- 1 lukas staff 1857322 17 Apr 16:03 compact_monitor_2_1776431005386.mp4\n-rw-r--r-- 1 lukas staff 3412100 17 Apr 16:08 compact_monitor_2_1776431319373.mp4\n-rw-r--r-- 1 lukas staff 6928537 17 Apr 16:13 compact_monitor_2_1776431631778.mp4\n-rw-r--r-- 1 lukas staff 4990793 17 Apr 16:19 compact_monitor_2_1776431944571.mp4\n-rw-r--r-- 1 lukas staff 8242278 17 Apr 16:24 compact_monitor_2_1776432258818.mp4\n-rw-r--r-- 1 lukas staff 451999 17 Apr 16:24 compact_monitor_2_1776432269036.mp4\n-rw-r--r-- 1 lukas staff 2978452 17 Apr 16:29 compact_monitor_2_1776432577467.mp4\n-rw-r--r-- 1 lukas staff 1248291 17 Apr 16:34 compact_monitor_2_1776432884349.mp4\n-rw-r--r-- 1 lukas staff 2963525 17 Apr 16:39 compact_monitor_2_1776433190284.mp4\n-rw-r--r-- 1 lukas staff 1958858 17 Apr 16:44 compact_monitor_2_1776433495477.mp4\n-rw-r--r-- 1 lukas staff 1656966 17 Apr 16:50 compact_monitor_2_1776433802347.mp4\n-rw-r--r-- 1 lukas staff 2813856 17 Apr 16:55 compact_monitor_2_1776434112909.mp4\n-rw-r--r-- 1 lukas staff 510112 17 Apr 17:00 compact_monitor_2_1776434422384.mp4\n-rw-r--r-- 1 lukas staff 4354386 17 Apr 17:05 compact_monitor_2_1776434725886.mp4\n-rw-r--r-- 1 lukas staff 9798615 17 Apr 17:10 compact_monitor_2_1776435041115.mp4\n-rw-r--r-- 1 lukas staff 4503179 17 Apr 17:16 compact_monitor_2_1776435368020.mp4\n-rw-r--r-- 1 lukas staff 857002 17 Apr 17:16 compact_monitor_2_1776435376040.mp4\n-rw-r--r-- 1 lukas staff 8587996 17 Apr 17:21 compact_monitor_2_1776435687051.mp4\n-rw-r--r-- 1 lukas staff 5052247 17 Apr 17:26 compact_monitor_2_1776436009787.mp4\n-rw-r--r-- 1 lukas staff 2947924 17 Apr 17:32 compact_monitor_2_1776436320877.mp4\n-rw-r--r-- 1 lukas staff 689465 17 Apr 17:37 compact_monitor_2_1776436632536.mp4\n-rw-r--r-- 1 lukas staff 1353469 17 Apr 17:42 compact_monitor_2_1776436940788.mp4\n-rw-r--r-- 1 lukas staff 870893 17 Apr 17:47 compact_monitor_2_1776437249077.mp4\n-rw-r--r-- 1 lukas staff 2653839 17 Apr 17:52 compact_monitor_2_1776437556659.mp4\n-rw-r--r-- 1 lukas staff 4310138 17 Apr 17:57 compact_monitor_2_1776437864727.mp4\n-rw-r--r-- 1 lukas staff 3683875 17 Apr 18:02 compact_monitor_2_1776438173313.mp4\n-rw-r--r-- 1 lukas staff 1916129 17 Apr 18:08 compact_monitor_2_1776438481043.mp4\n-rw-r--r-- 1 lukas staff 2349626 17 Apr 18:13 compact_monitor_2_1776438785553.mp4\n-rw-r--r-- 1 lukas staff 641202 17 Apr 18:18 compact_monitor_2_1776439092011.mp4\n-rw-r--r-- 1 lukas staff 3006319 17 Apr 18:23 compact_monitor_2_1776439398485.mp4\n-rw-r--r-- 1 lukas staff 1675776 17 Apr 18:28 compact_monitor_2_1776439705765.mp4\n-rw-r--r-- 1 lukas staff 4465225 17 Apr 18:34 compact_monitor_2_1776440055922.mp4\n-rw-r--r-- 1 lukas staff 2351472 17 Apr 21:05 compact_monitor_2_1776449140917.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ rsync -av --ignore-existing \\\n ~/.screenpipe/data/data/2026-04-14/ \\\n /Volumes/Test/screenpipe/data/2026-04-14/\nbuilding file list ... done\n./\ncompact_monitor_1_1776236348162.mp4\ncompact_monitor_1_1776236355103.mp4\ncompact_monitor_2_1776236357169.mp4\ncompact_monitor_2_1776236373794.mp4\n\nsent 41217485 bytes received 114 bytes 4338694.63 bytes/sec\ntotal size is 1085072596 speedup is 26.33\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-14\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ll\ntotal 2120256\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 .\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..\n-rw-r--r--@ 1 lukas staff 581687 14 Apr 09:34 compact_monitor_1_1776148466581.mp4\n-rw-r--r--@ 1 lukas staff 702153 14 Apr 09:39 compact_monitor_1_1776148768082.mp4\n-rw-r--r--@ 1 lukas staff 251978 14 Apr 09:44 compact_monitor_1_1776149071467.mp4\n-rw-r--r-- 1 lukas staff 1717429 14 Apr 09:49 compact_monitor_1_1776149373136.mp4\n-rw-r--r-- 1 lukas staff 3477530 14 Apr 09:54 compact_monitor_1_1776149679747.mp4\n-rw-r--r-- 1 lukas staff 4579266 14 Apr 09:59 compact_monitor_1_1776149991618.mp4\n-rw-r--r-- 1 lukas staff 2305892 14 Apr 10:05 compact_monitor_1_1776150305479.mp4\n-rw-r--r-- 1 lukas staff 2464098 14 Apr 10:10 compact_monitor_1_1776150611148.mp4\n-rw-r--r-- 1 lukas staff 2640699 14 Apr 10:15 compact_monitor_1_1776150917977.mp4\n-rw-r--r-- 1 lukas staff 2938324 14 Apr 10:20 compact_monitor_1_1776151225175.mp4\n-rw-r--r-- 1 lukas staff 5734426 14 Apr 10:25 compact_monitor_1_1776151533655.mp4\n-rw-r--r-- 1 lukas staff 711441 14 Apr 10:30 compact_monitor_1_1776151841776.mp4\n-rw-r--r-- 1 lukas staff 373214 14 Apr 10:35 compact_monitor_1_1776152149591.mp4\n-rw-r--r-- 1 lukas staff 259200 14 Apr 10:40 compact_monitor_1_1776152456802.mp4\n-rw-r--r-- 1 lukas staff 563549 14 Apr 10:46 compact_monitor_1_1776152770846.mp4\n-rw-r--r-- 1 lukas staff 1085034 14 Apr 10:51 compact_monitor_1_1776153081304.mp4\n-rw-r--r-- 1 lukas staff 5856145 14 Apr 10:56 compact_monitor_1_1776153389824.mp4\n-rw-r--r-- 1 lukas staff 3729206 14 Apr 11:01 compact_monitor_1_1776153702196.mp4\n-rw-r--r-- 1 lukas staff 1381857 14 Apr 11:06 compact_monitor_1_1776154011626.mp4\n-rw-r--r-- 1 lukas staff 590718 14 Apr 11:12 compact_monitor_1_1776154319547.mp4\n-rw-r--r-- 1 lukas staff 1306438 14 Apr 11:17 compact_monitor_1_1776154623893.mp4\n-rw-r--r-- 1 lukas staff 216930 14 Apr 11:22 compact_monitor_1_1776154930014.mp4\n-rw-r--r-- 1 lukas staff 473698 14 Apr 11:27 compact_monitor_1_1776155238144.mp4\n-rw-r--r-- 1 lukas staff 3051314 14 Apr 11:32 compact_monitor_1_1776155547239.mp4\n-rw-r--r-- 1 lukas staff 253380 14 Apr 11:37 compact_monitor_1_1776155850943.mp4\n-rw-r--r-- 1 lukas staff 258154 14 Apr 11:42 compact_monitor_1_1776156154229.mp4\n-rw-r--r-- 1 lukas staff 962893 14 Apr 11:47 compact_monitor_1_1776156458244.mp4\n-rw-r--r-- 1 lukas staff 1806149 14 Apr 11:52 compact_monitor_1_1776156762972.mp4\n-rw-r--r-- 1 lukas staff 2280711 14 Apr 11:57 compact_monitor_1_1776157067935.mp4\n-rw-r--r-- 1 lukas staff 1779777 14 Apr 12:03 compact_monitor_1_1776157380235.mp4\n-rw-r--r-- 1 lukas staff 792745 14 Apr 12:08 compact_monitor_1_1776157700511.mp4\n-rw-r--r-- 1 lukas staff 290618 14 Apr 12:13 compact_monitor_1_1776158016840.mp4\n-rw-r--r-- 1 lukas staff 572761 14 Apr 12:18 compact_monitor_1_1776158333836.mp4\n-rw-r--r-- 1 lukas staff 200419 14 Apr 12:24 compact_monitor_1_1776158651565.mp4\n-rw-r--r-- 1 lukas staff 190795 14 Apr 12:29 compact_monitor_1_1776158966333.mp4\n-rw-r--r-- 1 lukas staff 2126277 14 Apr 12:34 compact_monitor_1_1776159274939.mp4\n-rw-r--r-- 1 lukas staff 3747860 14 Apr 12:39 compact_monitor_1_1776159588710.mp4\n-rw-r--r-- 1 lukas staff 2152422 14 Apr 12:45 compact_monitor_1_1776159900733.mp4\n-rw-r--r-- 1 lukas staff 709258 14 Apr 12:50 compact_monitor_1_1776160204634.mp4\n-rw-r--r-- 1 lukas staff 1158847 14 Apr 12:55 compact_monitor_1_1776160508015.mp4\n-rw-r--r-- 1 lukas staff 1813578 14 Apr 13:00 compact_monitor_1_1776160811806.mp4\n-rw-r--r-- 1 lukas staff 684607 14 Apr 13:05 compact_monitor_1_1776161119981.mp4\n-rw-r--r-- 1 lukas staff 636562 14 Apr 13:10 compact_monitor_1_1776161424648.mp4\n-rw-r--r-- 1 lukas staff 323432 14 Apr 13:15 compact_monitor_1_1776161728448.mp4\n-rw-r--r-- 1 lukas staff 294055 14 Apr 13:20 compact_monitor_1_1776162032394.mp4\n-rw-r--r-- 1 lukas staff 296941 14 Apr 13:25 compact_monitor_1_1776162336175.mp4\n-rw-r--r-- 1 lukas staff 292219 14 Apr 13:30 compact_monitor_1_1776162640619.mp4\n-rw-r--r-- 1 lukas staff 293726 14 Apr 13:35 compact_monitor_1_1776162943050.mp4\n-rw-r--r-- 1 lukas staff 832989 14 Apr 13:40 compact_monitor_1_1776163246420.mp4\n-rw-r--r-- 1 lukas staff 1068134 14 Apr 13:45 compact_monitor_1_1776163549145.mp4\n-rw-r--r-- 1 lukas staff 501189 14 Apr 13:50 compact_monitor_1_1776163853383.mp4\n-rw-r--r-- 1 lukas staff 930299 14 Apr 13:55 compact_monitor_1_1776164155311.mp4\n-rw-r--r-- 1 lukas staff 2515358 14 Apr 14:01 compact_monitor_1_1776164459131.mp4\n-rw-r--r-- 1 lukas staff 1286863 14 Apr 14:06 compact_monitor_1_1776164766940.mp4\n-rw-r--r-- 1 lukas staff 1472795 14 Apr 14:15 compact_monitor_1_1776165318512.mp4\n-rw-r--r-- 1 lukas staff 439699 14 Apr 14:20 compact_monitor_1_1776165627501.mp4\n-rw-r--r-- 1 lukas staff 519424 14 Apr 14:25 compact_monitor_1_1776165931952.mp4\n-rw-r--r-- 1 lukas staff 2267443 14 Apr 14:30 compact_monitor_1_1776166235408.mp4\n-rw-r--r-- 1 lukas staff 1637916 14 Apr 14:35 compact_monitor_1_1776166551721.mp4\n-rw-r--r-- 1 lukas staff 1111434 14 Apr 14:41 compact_monitor_1_1776166862836.mp4\n-rw-r--r-- 1 lukas staff 1546177 14 Apr 14:46 compact_monitor_1_1776167176709.mp4\n-rw-r--r-- 1 lukas staff 466769 14 Apr 14:51 compact_monitor_1_1776167484535.mp4\n-rw-r--r-- 1 lukas staff 993316 14 Apr 14:56 compact_monitor_1_1776167793776.mp4\n-rw-r--r-- 1 lukas staff 2902714 14 Apr 15:01 compact_monitor_1_1776168105399.mp4\n-rw-r--r-- 1 lukas staff 1279133 14 Apr 15:06 compact_monitor_1_1776168413169.mp4\n-rw-r--r-- 1 lukas staff 1132592 14 Apr 15:12 compact_monitor_1_1776168722629.mp4\n-rw-r--r-- 1 lukas staff 355416 14 Apr 15:17 compact_monitor_1_1776169031962.mp4\n-rw-r--r-- 1 lukas staff 345697 14 Apr 15:22 compact_monitor_1_1776169337693.mp4\n-rw-r--r-- 1 lukas staff 3063911 14 Apr 15:27 compact_monitor_1_1776169641353.mp4\n-rw-r--r-- 1 lukas staff 5369163 14 Apr 15:32 compact_monitor_1_1776169957193.mp4\n-rw-r--r-- 1 lukas staff 3605997 14 Apr 15:38 compact_monitor_1_1776170274586.mp4\n-rw-r--r-- 1 lukas staff 1662201 14 Apr 15:43 compact_monitor_1_1776170596259.mp4\n-rw-r--r-- 1 lukas staff 2518520 14 Apr 15:48 compact_monitor_1_1776170900299.mp4\n-rw-r--r-- 1 lukas staff 2298616 14 Apr 15:53 compact_monitor_1_1776171206621.mp4\n-rw-r--r-- 1 lukas staff 252208 14 Apr 15:58 compact_monitor_1_1776171511042.mp4\n-rw-r--r-- 1 lukas staff 547163 14 Apr 16:03 compact_monitor_1_1776171816609.mp4\n-rw-r--r-- 1 lukas staff 3548604 14 Apr 16:08 compact_monitor_1_1776172119791.mp4\n-rw-r--r-- 1 lukas staff 1006390 14 Apr 16:13 compact_monitor_1_1776172427942.mp4\n-rw-r--r-- 1 lukas staff 1168310 14 Apr 16:18 compact_monitor_1_1776172735350.mp4\n-rw-r--r-- 1 lukas staff 2138214 14 Apr 16:24 compact_monitor_1_1776173046731.mp4\n-rw-r--r-- 1 lukas staff 2138875 14 Apr 16:29 compact_monitor_1_1776173354299.mp4\n-rw-r--r-- 1 lukas staff 336470 14 Apr 16:34 compact_monitor_1_1776173662610.mp4\n-rw-r--r-- 1 lukas staff 330494 14 Apr 16:39 compact_monitor_1_1776173971011.mp4\n-rw-r--r-- 1 lukas staff 574889 14 Apr 16:44 compact_monitor_1_1776174275028.mp4\n-rw-r--r-- 1 lukas staff 450335 14 Apr 16:49 compact_monitor_1_1776174580719.mp4\n-rw-r--r-- 1 lukas staff 452365 14 Apr 16:54 compact_monitor_1_1776174888498.mp4\n-rw-r--r-- 1 lukas staff 499947 14 Apr 16:59 compact_monitor_1_1776175195769.mp4\n-rw-r--r-- 1 lukas staff 501324 14 Apr 17:05 compact_monitor_1_1776175516084.mp4\n-rw-r--r-- 1 lukas staff 1187862 14 Apr 17:10 compact_monitor_1_1776175831658.mp4\n-rw-r--r-- 1 lukas staff 4276500 14 Apr 17:15 compact_monitor_1_1776176143265.mp4\n-rw-r--r-- 1 lukas staff 3712128 14 Apr 17:21 compact_monitor_1_1776176471641.mp4\n-rw-r--r-- 1 lukas staff 3520036 14 Apr 17:26 compact_monitor_1_1776176786477.mp4\n-rw-r--r-- 1 lukas staff 4125306 14 Apr 17:31 compact_monitor_1_1776177099043.mp4\n-rw-r--r-- 1 lukas staff 3547886 14 Apr 17:37 compact_monitor_1_1776177433201.mp4\n-rw-r--r-- 1 lukas staff 2400891 14 Apr 17:42 compact_monitor_1_1776177752872.mp4\n-rw-r--r-- 1 lukas staff 4689207 14 Apr 17:47 compact_monitor_1_1776178058207.mp4\n-rw-r--r-- 1 lukas staff 1801277 14 Apr 17:53 compact_monitor_1_1776178379517.mp4\n-rw-r--r-- 1 lukas staff 3259926 14 Apr 17:58 compact_monitor_1_1776178686281.mp4\n-rw-r--r-- 1 lukas staff 1470635 14 Apr 18:03 compact_monitor_1_1776178992046.mp4\n-rw-r--r-- 1 lukas staff 3102429 14 Apr 18:08 compact_monitor_1_1776179297527.mp4\n-rw-r--r-- 1 lukas staff 223940 14 Apr 18:13 compact_monitor_1_1776179607218.mp4\n-rw-r--r-- 1 lukas staff 871065 14 Apr 18:13 compact_monitor_1_1776179613012.mp4\n-rw-r--r-- 1 lukas staff 1029083 14 Apr 18:18 compact_monitor_1_1776179929971.mp4\n-rw-r--r-- 1 lukas staff 1117436 14 Apr 18:24 compact_monitor_1_1776180248849.mp4\n-rw-r--r-- 1 lukas staff 987269 14 Apr 18:29 compact_monitor_1_1776180569996.mp4\n-rw-r--r-- 1 lukas staff 896704 14 Apr 18:34 compact_monitor_1_1776180888049.mp4\n-rw-r--r-- 1 lukas staff 1945946 14 Apr 18:40 compact_monitor_1_1776181202583.mp4\n-rw-r--r-- 1 lukas staff 862072 14 Apr 18:45 compact_monitor_1_1776181526071.mp4\n-rw-r--r-- 1 lukas staff 813756 14 Apr 18:50 compact_monitor_1_1776181848713.mp4\n-rw-r--r-- 1 lukas staff 813226 14 Apr 18:56 compact_monitor_1_1776182167765.mp4\n-rw-r--r-- 1 lukas staff 792289 14 Apr 19:01 compact_monitor_1_1776182486906.mp4\n-rw-r--r-- 1 lukas staff 900197 14 Apr 19:06 compact_monitor_1_1776182803477.mp4\n-rw-r--r-- 1 lukas staff 903090 14 Apr 19:12 compact_monitor_1_1776183124102.mp4\n-rw-r--r-- 1 lukas staff 821885 14 Apr 19:17 compact_monitor_1_1776183446647.mp4\n-rw-r--r-- 1 lukas staff 827224 14 Apr 19:22 compact_monitor_1_1776183765602.mp4\n-rw-r--r-- 1 lukas staff 844977 14 Apr 19:28 compact_monitor_1_1776184085319.mp4\n-rw-r--r-- 1 lukas staff 4160651 15 Apr 09:59 compact_monitor_1_1776236348162.mp4\n-rw-r--r-- 1 lukas staff 2257702 15 Apr 09:59 compact_monitor_1_1776236355103.mp4\n-rw-r--r-- 1 lukas staff 803789 14 Apr 09:34 compact_monitor_2_1776148467123.mp4\n-rw-r--r-- 1 lukas staff 846598 14 Apr 09:39 compact_monitor_2_1776148769344.mp4\n-rw-r--r-- 1 lukas staff 380187 14 Apr 09:44 compact_monitor_2_1776149072222.mp4\n-rw-r--r-- 1 lukas staff 4330357 14 Apr 09:49 compact_monitor_2_1776149375411.mp4\n-rw-r--r-- 1 lukas staff 5979630 14 Apr 09:54 compact_monitor_2_1776149684838.mp4\n-rw-r--r-- 1 lukas staff 5685863 14 Apr 10:00 compact_monitor_2_1776149997069.mp4\n-rw-r--r-- 1 lukas staff 1817789 14 Apr 10:05 compact_monitor_2_1776150308175.mp4\n-rw-r--r-- 1 lukas staff 3734598 14 Apr 10:10 compact_monitor_2_1776150613826.mp4\n-rw-r--r-- 1 lukas staff 7824075 14 Apr 10:15 compact_monitor_2_1776150920663.mp4\n-rw-r--r-- 1 lukas staff 6299436 14 Apr 10:20 compact_monitor_2_1776151228707.mp4\n-rw-r--r-- 1 lukas staff 3269154 14 Apr 10:25 compact_monitor_2_1776151537695.mp4\n-rw-r--r-- 1 lukas staff 9004762 14 Apr 10:30 compact_monitor_2_1776151844100.mp4\n-rw-r--r-- 1 lukas staff 4710671 14 Apr 10:35 compact_monitor_2_1776152152089.mp4\n-rw-r--r-- 1 lukas staff 11173604 14 Apr 10:41 compact_monitor_2_1776152458959.mp4\n-rw-r--r-- 1 lukas staff 6761014 14 Apr 10:46 compact_monitor_2_1776152773411.mp4\n-rw-r--r-- 1 lukas staff 3510200 14 Apr 10:51 compact_monitor_2_1776153084189.mp4\n-rw-r--r-- 1 lukas staff 5292708 14 Apr 10:56 compact_monitor_2_1776153395785.mp4\n-rw-r--r-- 1 lukas staff 5487046 14 Apr 11:01 compact_monitor_2_1776153706319.mp4\n-rw-r--r-- 1 lukas staff 5305685 14 Apr 11:06 compact_monitor_2_1776154014738.mp4\n-rw-r--r-- 1 lukas staff 1963074 14 Apr 11:12 compact_monitor_2_1776154320980.mp4\n-rw-r--r-- 1 lukas staff 2513039 14 Apr 11:17 compact_monitor_2_1776154625932.mp4\n-rw-r--r-- 1 lukas staff 2532455 14 Apr 11:22 compact_monitor_2_1776154932083.mp4\n-rw-r--r-- 1 lukas staff 5825408 14 Apr 11:27 compact_monitor_2_1776155240989.mp4\n-rw-r--r-- 1 lukas staff 2066410 14 Apr 11:32 compact_monitor_2_1776155549265.mp4\n-rw-r--r-- 1 lukas staff 3082476 14 Apr 11:37 compact_monitor_2_1776155851806.mp4\n-rw-r--r-- 1 lukas staff 1587810 14 Apr 11:42 compact_monitor_2_1776156155857.mp4\n-rw-r--r-- 1 lukas staff 2346718 14 Apr 11:47 compact_monitor_2_1776156460205.mp4\n-rw-r--r-- 1 lukas staff 1579555 14 Apr 11:52 compact_monitor_2_1776156764898.mp4\n-rw-r--r-- 1 lukas staff 5481864 14 Apr 11:57 compact_monitor_2_1776157072094.mp4\n-rw-r--r-- 1 lukas staff 6527601 14 Apr 12:03 compact_monitor_2_1776157385210.mp4\n-rw-r--r-- 1 lukas staff 9023055 14 Apr 12:08 compact_monitor_2_1776157705883.mp4\n-rw-r--r-- 1 lukas staff 7566360 14 Apr 12:13 compact_monitor_2_1776158020136.mp4\n-rw-r--r-- 1 lukas staff 8801302 14 Apr 12:19 compact_monitor_2_1776158336585.mp4\n-rw-r--r-- 1 lukas staff 4139540 14 Apr 12:24 compact_monitor_2_1776158655295.mp4\n-rw-r--r-- 1 lukas staff 2987994 14 Apr 12:29 compact_monitor_2_1776158968629.mp4\n-rw-r--r-- 1 lukas staff 6323688 14 Apr 12:34 compact_monitor_2_1776159279327.mp4\n-rw-r--r-- 1 lukas staff 2684920 14 Apr 12:40 compact_monitor_2_1776159594527.mp4\n-rw-r--r-- 1 lukas staff 1646460 14 Apr 12:45 compact_monitor_2_1776159902504.mp4\n-rw-r--r-- 1 lukas staff 1767063 14 Apr 12:50 compact_monitor_2_1776160206071.mp4\n-rw-r--r-- 1 lukas staff 1910044 14 Apr 12:55 compact_monitor_2_1776160509646.mp4\n-rw-r--r-- 1 lukas staff 5101631 14 Apr 13:00 compact_monitor_2_1776160814860.mp4\n-rw-r--r-- 1 lukas staff 2487221 14 Apr 13:05 compact_monitor_2_1776161121862.mp4\n-rw-r--r-- 1 lukas staff 1452868 14 Apr 13:10 compact_monitor_2_1776161425872.mp4\n-rw-r--r-- 1 lukas staff 2963557 14 Apr 13:15 compact_monitor_2_1776161729470.mp4\n-rw-r--r-- 1 lukas staff 984939 14 Apr 13:20 compact_monitor_2_1776162033592.mp4\n-rw-r--r-- 1 lukas staff 3411829 14 Apr 13:25 compact_monitor_2_1776162337569.mp4\n-rw-r--r-- 1 lukas staff 622723 14 Apr 13:30 compact_monitor_2_1776162641477.mp4\n-rw-r--r-- 1 lukas staff 2472562 14 Apr 13:35 compact_monitor_2_1776162943983.mp4\n-rw-r--r-- 1 lukas staff 1139489 14 Apr 13:40 compact_monitor_2_1776163247509.mp4\n-rw-r--r-- 1 lukas staff 862846 14 Apr 13:45 compact_monitor_2_1776163550848.mp4\n-rw-r--r-- 1 lukas staff 274959 14 Apr 13:50 compact_monitor_2_1776163854468.mp4\n-rw-r--r-- 1 lukas staff 2036659 14 Apr 13:55 compact_monitor_2_1776164156817.mp4\n-rw-r--r-- 1 lukas staff 6134905 14 Apr 14:01 compact_monitor_2_1776164461879.mp4\n-rw-r--r-- 1 lukas staff 9022378 14 Apr 14:06 compact_monitor_2_1776164770881.mp4\n-rw-r--r-- 1 lukas staff 4566763 14 Apr 14:15 compact_monitor_2_1776165320959.mp4\n-rw-r--r-- 1 lukas staff 462447 14 Apr 14:20 compact_monitor_2_1776165629627.mp4\n-rw-r--r-- 1 lukas staff 709149 14 Apr 14:25 compact_monitor_2_1776165933147.mp4\n-rw-r--r-- 1 lukas staff 4478027 14 Apr 14:30 compact_monitor_2_1776166241146.mp4\n-rw-r--r-- 1 lukas staff 7488847 14 Apr 14:36 compact_monitor_2_1776166555947.mp4\n-rw-r--r-- 1 lukas staff 7883274 14 Apr 14:41 compact_monitor_2_1776166866538.mp4\n-rw-r--r-- 1 lukas staff 2869256 14 Apr 14:46 compact_monitor_2_1776167179562.mp4\n-rw-r--r-- 1 lukas staff 3068440 14 Apr 14:51 compact_monitor_2_1776167487518.mp4\n-rw-r--r-- 1 lukas staff 1816545 14 Apr 14:56 compact_monitor_2_1776167799896.mp4\n-rw-r--r-- 1 lukas staff 3180474 14 Apr 15:01 compact_monitor_2_1776168109470.mp4\n-rw-r--r-- 1 lukas staff 3774140 14 Apr 15:07 compact_monitor_2_1776168415670.mp4\n-rw-r--r-- 1 lukas staff 4536363 14 Apr 15:12 compact_monitor_2_1776168725137.mp4\n-rw-r--r-- 1 lukas staff 2387221 14 Apr 15:17 compact_monitor_2_1776169033283.mp4\n-rw-r--r-- 1 lukas staff 2605350 14 Apr 15:22 compact_monitor_2_1776169338888.mp4\n-rw-r--r-- 1 lukas staff 6906038 14 Apr 15:27 compact_monitor_2_1776169645977.mp4\n-rw-r--r-- 1 lukas staff 5738495 14 Apr 15:32 compact_monitor_2_1776169965047.mp4\n-rw-r--r-- 1 lukas staff 5595644 14 Apr 15:38 compact_monitor_2_1776170281359.mp4\n-rw-r--r-- 1 lukas staff 584749 14 Apr 15:43 compact_monitor_2_1776170598047.mp4\n-rw-r--r-- 1 lukas staff 2633541 14 Apr 15:48 compact_monitor_2_1776170903735.mp4\n-rw-r--r-- 1 lukas staff 770182 14 Apr 15:53 compact_monitor_2_1776171208825.mp4\n-rw-r--r-- 1 lukas staff 1658362 14 Apr 15:58 compact_monitor_2_1776171512473.mp4\n-rw-r--r-- 1 lukas staff 295793 14 Apr 16:03 compact_monitor_2_1776171817959.mp4\n-rw-r--r-- 1 lukas staff 3540965 14 Apr 16:08 compact_monitor_2_1776172123631.mp4\n-rw-r--r-- 1 lukas staff 3589660 14 Apr 16:13 compact_monitor_2_1776172430586.mp4\n-rw-r--r-- 1 lukas staff 4735044 14 Apr 16:19 compact_monitor_2_1776172739210.mp4\n-rw-r--r-- 1 lukas staff 4951644 14 Apr 16:24 compact_monitor_2_1776173049122.mp4\n-rw-r--r-- 1 lukas staff 5939102 14 Apr 16:29 compact_monitor_2_1776173357170.mp4\n-rw-r--r-- 1 lukas staff 2549744 14 Apr 16:34 compact_monitor_2_1776173665142.mp4\n-rw-r--r-- 1 lukas staff 996149 14 Apr 16:39 compact_monitor_2_1776173972456.mp4\n-rw-r--r-- 1 lukas staff 2663346 14 Apr 16:44 compact_monitor_2_1776174276676.mp4\n-rw-r--r-- 1 lukas staff 1776844 14 Apr 16:49 compact_monitor_2_1776174582351.mp4\n-rw-r--r-- 1 lukas staff 1669202 14 Apr 16:54 compact_monitor_2_1776174889930.mp4\n-rw-r--r-- 1 lukas staff 5414828 14 Apr 17:00 compact_monitor_2_1776175198918.mp4\n-rw-r--r-- 1 lukas staff 5727100 14 Apr 17:05 compact_monitor_2_1776175518133.mp4\n-rw-r--r-- 1 lukas staff 6080220 14 Apr 17:10 compact_monitor_2_1776175835473.mp4\n-rw-r--r-- 1 lukas staff 3631681 14 Apr 17:16 compact_monitor_2_1776176159421.mp4\n-rw-r--r-- 1 lukas staff 1861818 14 Apr 17:21 compact_monitor_2_1776176479999.mp4\n-rw-r--r-- 1 lukas staff 1471229 14 Apr 17:26 compact_monitor_2_1776176794129.mp4\n-rw-r--r-- 1 lukas staff 1792667 14 Apr 17:32 compact_monitor_2_1776177119122.mp4\n-rw-r--r-- 1 lukas staff 2398088 14 Apr 17:37 compact_monitor_2_1776177447361.mp4\n-rw-r--r-- 1 lukas staff 1873376 14 Apr 17:42 compact_monitor_2_1776177755837.mp4\n-rw-r--r-- 1 lukas staff 3686281 14 Apr 17:47 compact_monitor_2_1776178069540.mp4\n-rw-r--r-- 1 lukas staff 1842517 14 Apr 17:53 compact_monitor_2_1776178382342.mp4\n-rw-r--r-- 1 lukas staff 2595005 14 Apr 17:58 compact_monitor_2_1776178688999.mp4\n-rw-r--r-- 1 lukas staff 3352578 14 Apr 18:03 compact_monitor_2_1776178994368.mp4\n-rw-r--r-- 1 lukas staff 7474140 14 Apr 18:08 compact_monitor_2_1776179301874.mp4\n-rw-r--r-- 1 lukas staff 18300640 14 Apr 18:13 compact_monitor_2_1776179614376.mp4\n-rw-r--r-- 1 lukas staff 8302944 14 Apr 18:13 compact_monitor_2_1776179625270.mp4\n-rw-r--r-- 1 lukas staff 27338956 14 Apr 18:19 compact_monitor_2_1776179934590.mp4\n-rw-r--r-- 1 lukas staff 1061768 14 Apr 18:19 compact_monitor_2_1776179947276.mp4\n-rw-r--r-- 1 lukas staff 24282145 14 Apr 18:24 compact_monitor_2_1776180254284.mp4\n-rw-r--r-- 1 lukas staff 5647384 14 Apr 18:24 compact_monitor_2_1776180266890.mp4\n-rw-r--r-- 1 lukas staff 32748524 14 Apr 18:29 compact_monitor_2_1776180574284.mp4\n-rw-r--r-- 1 lukas staff 25769571 14 Apr 18:35 compact_monitor_2_1776180892046.mp4\n-rw-r--r-- 1 lukas staff 41983533 14 Apr 18:40 compact_monitor_2_1776181207025.mp4\n-rw-r--r-- 1 lukas staff 3365850 14 Apr 18:40 compact_monitor_2_1776181223864.mp4\n-rw-r--r-- 1 lukas staff 40919053 14 Apr 18:45 compact_monitor_2_1776181530742.mp4\n-rw-r--r-- 1 lukas staff 3870375 14 Apr 18:45 compact_monitor_2_1776181546619.mp4\n-rw-r--r-- 1 lukas staff 36175005 14 Apr 18:51 compact_monitor_2_1776181853124.mp4\n-rw-r--r-- 1 lukas staff 36717883 14 Apr 18:56 compact_monitor_2_1776182171990.mp4\n-rw-r--r-- 1 lukas staff 27140350 14 Apr 19:01 compact_monitor_2_1776182491150.mp4\n-rw-r--r-- 1 lukas staff 20914618 14 Apr 19:06 compact_monitor_2_1776182808796.mp4\n-rw-r--r-- 1 lukas staff 4716229 14 Apr 19:07 compact_monitor_2_1776182820060.mp4\n-rw-r--r-- 1 lukas staff 24788277 14 Apr 19:12 compact_monitor_2_1776183129006.mp4\n-rw-r--r-- 1 lukas staff 7974655 14 Apr 19:12 compact_monitor_2_1776183141483.mp4\n-rw-r--r-- 1 lukas staff 22872307 14 Apr 19:17 compact_monitor_2_1776183451042.mp4\n-rw-r--r-- 1 lukas staff 3283631 14 Apr 19:17 compact_monitor_2_1776183462827.mp4\n-rw-r--r-- 1 lukas staff 32308259 14 Apr 19:23 compact_monitor_2_1776183769519.mp4\n-rw-r--r-- 1 lukas staff 2847482 14 Apr 19:23 compact_monitor_2_1776183783534.mp4\n-rw-r--r-- 1 lukas staff 36823186 14 Apr 19:28 compact_monitor_2_1776184089558.mp4\n-rw-r--r-- 1 lukas staff 5825352 14 Apr 19:28 compact_monitor_2_1776184104421.mp4\n-rw-r--r-- 1 lukas staff 30437061 15 Apr 09:59 compact_monitor_2_1776236357169.mp4\n-rw-r--r-- 1 lukas staff 4350302 15 Apr 09:59 compact_monitor_2_1776236373794.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 11:58:00] ========================================\n[2026-04-18 11:58:00] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 11:58:00] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 11:58:04] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✗ 531 / 245 files\n\n[2026-04-18 11:58:09] Archive DB size: 3.0G\n[2026-04-18 11:58:09] Total time: 0m9s\n[2026-04-18 11:58:09] Sync complete for 2026-04-14\n[2026-04-18 11:58:09] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 11:59:41] ========================================\n[2026-04-18 11:59:41] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 11:59:41] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 11:59:45] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✓ 2m07s (245 files, 1.0G)\n\n[2026-04-18 12:01:52] Archive DB size: 3.0G\n[2026-04-18 12:01:52] Total time: 2m11s\n[2026-04-18 12:01:52] Sync complete for 2026-04-14\n[2026-04-18 12:01:52] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:03:13] ========================================\n[2026-04-18 12:03:13] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:03:13] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: will be created\n Data dir: OK (245 files, 1.0G)\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)\nParse error near line 3: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames \n error here ---^\nParse error near line 4: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements \n error here ---^\nParse error near line 5: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events \n error here ---^\nParse error near line 6: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text \n error here ---^\nParse error near line 7: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks\n error here ---^\nParse error near line 8: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings \n error here ---^\nRuntime error near line 9: no such database: nas\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ls /Volumes/screenpipe/\nls: /Volumes/screenpipe/: Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ cd /Volumes \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll\ntotal 96\ndrwxr-xr-x 6 root wheel 192 18 Apr 11:17 .\ndrwxr-xr-x 20 root wheel 640 4 Aug 2024 ..\nlrwxr-xr-x 1 root wheel 1 16 Apr 15:43 Macintosh HD -> /\ndrwx------ 1 lukas staff 16384 11 Apr 15:46 Test\ndrwx------ 1 lukas staff 16384 13 Mar 10:17 Work\ndrwx------ 1 lukas staff 16384 17 Apr 21:29 screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls -la /Volumes/screenpipe/\ntotal 0\nls: /Volumes/screenpipe/: Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ mount | grep screenpipe\n//Adm1n@DXP4800PLUS-B5F8/screenpipe on /Volumes/screenpipe (smbfs, nodev, nosuid, mounted by lukas)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ umount /Volumes/screenpipe\numount: unmount(/Volumes/screenpipe): Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:06:45] ========================================\n[2026-04-18 12:06:45] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:06:45] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: will be created\n Data dir: OK (245 files, 1.0G)\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)\nParse error near line 3: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames \n error here ---^\nParse error near line 4: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements \n error here ---^\nParse error near line 5: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events \n error here ---^\nParse error near line 6: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text \n error here ---^\nParse error near line 7: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks\n error here ---^\nParse error near line 8: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings \n error here ---^\nRuntime error near line 9: no such database: nas\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:06:51] ========================================\n[2026-04-18 12:06:51] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:06:51] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:06:55] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m05s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✓ 0m04s (245 files, 1.0G)\n\n[2026-04-18 12:07:00] Archive DB size: 3.0G\n[2026-04-18 12:07:00] Total time: 0m9s\n[2026-04-18 12:07:00] Sync complete for 2026-04-14\n[2026-04-18 12:07:00] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15\n[2026-04-18 12:07:03] ========================================\n[2026-04-18 12:07:03] Screenpipe sync starting for: 2026-04-15\n[2026-04-18 12:07:03] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:07:07] Date 2026-04-15 already has 12874 frames in archive — skipping DB sync\n Data dir: OK (241 files, 2.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-15\n rsync 2026-04-15/ → NAS ✓ 3m22s (241 files, 2.0G)\n\n[2026-04-18 12:10:30] Archive DB size: 3.0G\n[2026-04-18 12:10:30] Total time: 3m27s\n[2026-04-18 12:10:30] Sync complete for 2026-04-15\n[2026-04-18 12:10:30] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-16\n[2026-04-18 12:16:30] ========================================\n[2026-04-18 12:16:30] Screenpipe sync starting for: 2026-04-16\n[2026-04-18 12:16:30] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:16:33] Date 2026-04-16 already has 9270 frames in archive — skipping DB sync\n Data dir: OK (232 files, 799M)\n\n[+00m03s] ▶ Copying data folder for 2026-04-16\n rsync 2026-04-16/ → NAS ✓ 1m46s (232 files, 799M)\n\n[2026-04-18 12:18:20] Archive DB size: 3.0G\n[2026-04-18 12:18:20] Total time: 1m50s\n[2026-04-18 12:18:20] Sync complete for 2026-04-16\n[2026-04-18 12:18:20] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-17\n[2026-04-18 12:18:38] ========================================\n[2026-04-18 12:18:38] Screenpipe sync starting for: 2026-04-17\n[2026-04-18 12:18:38] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:18:42] Date 2026-04-17 already has 10040 frames in archive — skipping DB sync\n Data dir: OK (250 files, 671M)\n\n[+00m04s] ▶ Copying data folder for 2026-04-17\n rsync 2026-04-17/ → NAS ✓ 1m44s (250 files, 671M)\n\n[2026-04-18 12:20:26] Archive DB size: 3.0G\n[2026-04-18 12:20:26] Total time: 1m48s\n[2026-04-18 12:20:26] Sync complete for 2026-04-17\n[2026-04-18 12:20:26] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sqlite3 ~/.screenpipe/db.sqlite \\\n \"SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '%fts%';\"\nui_events_fts\nui_events_fts_data\nui_events_fts_idx\nui_events_fts_docsize\nui_events_fts_config\nelements_fts\nelements_fts_data\nelements_fts_idx\nelements_fts_docsize\nelements_fts_config\naudio_transcriptions_fts\naudio_transcriptions_fts_data\naudio_transcriptions_fts_idx\naudio_transcriptions_fts_docsize\naudio_transcriptions_fts_config\nmemories_fts\nmemories_fts_data\nmemories_fts_idx\nmemories_fts_docsize\nmemories_fts_config\nframes_fts\nframes_fts_data\nframes_fts_idx\nframes_fts_content\nframes_fts_docsize\nframes_fts_config\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sqlite3 ~/.screenpipe/db.sqlite \\\n \"SELECT name, sql FROM sqlite_master WHERE type='table' AND name='ui_events_fts';\"\nui_events_fts|CREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content,\n app_name,\n window_title,\n element_name,\n content='ui_events',\n content_rowid='id',\n tokenize='unicode61'\n)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls\nconfig.json\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-wal\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-12.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-16.0.log\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpipes\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-13.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-17.0.log\ndb.sqlite\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-09.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-14.0.log\u0000\u0000\u0000\u0000\tscreenpipe_sync.sh\ndb.sqlite-shm\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-11.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-15.0.log\u0000\u0000\u0000\u0000\tsync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ alias sp-start\nsp-start='npx screenpipe@latest record --disable-audio &'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ source ~/.zprofile\n\nPoetry could not find a pyproject.toml file in /Users/lukas/.screenpipe or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ alias sp-start \nsp-start='npx screenpipe@latest record --disable-audio --ignored-windows \"Boosteroid\"'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls ~/.screenpipe/data/\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpending-transcriptions\u0000\tscreenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll \ntotal 7614824\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 .\ndrwx------+ 91 lukas staff 2912 18 Apr 12:53 ..\n-rw-r--r--@ 1 lukas staff 8196 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 358 16 Apr 16:49 config.json\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 data\n-rw-r--r--@ 1 lukas staff 3897454592 17 Apr 21:19 db.sqlite\n-rw-r--r--@ 1 lukas staff 32768 18 Apr 13:13 db.sqlite-shm\n-rw-r--r--@ 1 lukas staff 0 17 Apr 21:19 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 15 Apr 14:53 pipes\n-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log\n-rw-r--r-- 1 lukas staff 95425 11 Apr 23:14 screenpipe.2026-04-11.0.log\n-rw-r--r-- 1 lukas staff 72332 12 Apr 23:55 screenpipe.2026-04-12.0.log\n-rw-r--r-- 1 lukas staff 71555 13 Apr 19:50 screenpipe.2026-04-13.0.log\n-rw-r--r-- 1 lukas staff 162389 14 Apr 19:31 screenpipe.2026-04-14.0.log\n-rw-r--r-- 1 lukas staff 175763 15 Apr 18:55 screenpipe.2026-04-15.0.log\n-rw-r--r-- 1 lukas staff 196994 16 Apr 20:33 screenpipe.2026-04-16.0.log\n-rw-r--r-- 1 lukas staff 208424 17 Apr 21:06 screenpipe.2026-04-17.0.log\n-rwxr-xr-x@ 1 lukas staff 14323 18 Apr 12:06 screenpipe_sync.sh\n-rw-r--r--@ 1 lukas staff 12669 18 Apr 12:20 sync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cd data\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 16\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 .\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 data\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd pending-transcriptions \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/pending-transcriptions $ ll\ntotal 0\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 .\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/pending-transcriptions $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ data\nzsh: command not found: data\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 16\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 .\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 data\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd data \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll\ntotal 40\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 .\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 252 lukas staff 8064 17 Apr 21:06 2026-04-17\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-09 \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-09 $ ll\ntotal 79400\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 .\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..\n-rw-r--r-- 1 lukas staff 2558635 9 Apr 20:04 compact_monitor_1_1775754248190.mp4\n-rw-r--r-- 1 lukas staff 5272347 9 Apr 20:09 compact_monitor_1_1775754549504.mp4\n-rw-r--r-- 1 lukas staff 951943 9 Apr 20:15 compact_monitor_1_1775754928127.mp4\n-rw-r--r-- 1 lukas staff 780343 9 Apr 20:20 compact_monitor_1_1775755253065.mp4\n-rw-r--r-- 1 lukas staff 3129755 9 Apr 20:26 compact_monitor_1_1775755561408.mp4\n-rw-r--r-- 1 lukas staff 2369134 9 Apr 20:29 compact_monitor_1_1775755764874.mp4\n-rw-r--r-- 1 lukas staff 2879527 9 Apr 20:32 compact_monitor_1_1775755951928.mp4\n-rw-r--r-- 1 lukas staff 5597115 9 Apr 20:47 compact_monitor_1_1775756847339.mp4\n-rw-r--r-- 1 lukas staff 3460978 9 Apr 21:15 compact_monitor_1_1775758509024.mp4\n-rw-r--r-- 1 lukas staff 1876809 9 Apr 21:15 compact_monitor_1_1775758515203.mp4\n-rw-r--r-- 1 lukas staff 2813430 9 Apr 21:25 compact_monitor_1_1775759143411.mp4\n-rw-r--r-- 1 lukas staff 8937177 11 Apr 14:53 compact_monitor_1_1775908431491.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-09 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll\ntotal 40\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 .\ndrwxr-xr-x 14 lukas staff 448 18 Apr 13:36 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 229 lukas staff 7328 18 Apr 13:35 2026-04-17\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:36 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ll\ntotal 5696\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:36 .\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 ..\n-rw-r--r-- 1 lukas staff 215433 18 Apr 13:33 1776508419390_m1.jpg\n-rw-r--r-- 1 lukas staff 107206 18 Apr 13:33 1776508419555_m2.jpg\n-rw-r--r-- 1 lukas staff 155997 18 Apr 13:33 1776508422128_m1.jpg\n-rw-r--r-- 1 lukas staff 244304 18 Apr 13:33 1776508428450_m1.jpg\n-rw-r--r-- 1 lukas staff 107203 18 Apr 13:33 1776508428554_m2.jpg\n-rw-r--r-- 1 lukas staff 107202 18 Apr 13:33 1776508429142_m2.jpg\n-rw-r--r-- 1 lukas staff 208296 18 Apr 13:34 1776508453522_m1.jpg\n-rw-r--r-- 1 lukas staff 107122 18 Apr 13:34 1776508453670_m2.jpg\n-rw-r--r-- 1 lukas staff 130447 18 Apr 13:34 1776508456271_m1.jpg\n-rw-r--r-- 1 lukas staff 200633 18 Apr 13:34 1776508465399_m1.jpg\n-rw-r--r-- 1 lukas staff 201006 18 Apr 13:34 1776508479214_m1.jpg\n-rw-r--r-- 1 lukas staff 107315 18 Apr 13:34 1776508479222_m2.jpg\n-rw-r--r-- 1 lukas staff 217542 18 Apr 13:35 1776508510109_m1.jpg\n-rw-r--r-- 1 lukas staff 107558 18 Apr 13:35 1776508520117_m2.jpg\n-rw-r--r-- 1 lukas staff 217529 18 Apr 13:35 1776508540416_m1.jpg\n-rw-r--r-- 1 lukas staff 107438 18 Apr 13:35 1776508550498_m2.jpg\n-rw-r--r-- 1 lukas staff 217565 18 Apr 13:36 1776508570741_m1.jpg\n-rw-r--r-- 1 lukas staff 107323 18 Apr 13:36 1776508580887_m2.jpg\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ curl -s http://localhost:3030/health | jq '{audio_status, last_audio: .last_audio_timestamp}'\n{\n \"audio_status\": \"ok\",\n \"last_audio\": \"2026-04-18T13:36:57+03:00\"\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ls ~/.screenpipe/data/\nSystem Audio (output)_2026-04-18_10-34-25.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-36-39.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-34-24.mp4\nSystem Audio (output)_2026-04-18_10-34-49.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-37-02.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-34-56.mp4\nSystem Audio (output)_2026-04-18_10-35-11.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-37-24.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-35-26.mp4\nSystem Audio (output)_2026-04-18_10-35-33.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-35-56.mp4\nSystem Audio (output)_2026-04-18_10-35-55.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpending-transcriptions\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-36-26.mp4\nSystem Audio (output)_2026-04-18_10-36-17.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.db\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-36-56.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ll\ntotal 13080\ndrwxr-xr-x 44 lukas staff 1408 18 Apr 13:37 .\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 ..\n-rw-r--r-- 1 lukas staff 215433 18 Apr 13:33 1776508419390_m1.jpg\n-rw-r--r-- 1 lukas staff 107206 18 Apr 13:33 1776508419555_m2.jpg\n-rw-r--r-- 1 lukas staff 155997 18 Apr 13:33 1776508422128_m1.jpg\n-rw-r--r-- 1 lukas staff 244304 18 Apr 13:33 1776508428450_m1.jpg\n-rw-r--r-- 1 lukas staff 107203 18 Apr 13:33 1776508428554_m2.jpg\n-rw-r--r-- 1 lukas staff 107202 18 Apr 13:33 1776508429142_m2.jpg\n-rw-r--r-- 1 lukas staff 208296 18 Apr 13:34 1776508453522_m1.jpg\n-rw-r--r-- 1 lukas staff 107122 18 Apr 13:34 1776508453670_m2.jpg\n-rw-r--r-- 1 lukas staff 130447 18 Apr 13:34 1776508456271_m1.jpg\n-rw-r--r-- 1 lukas staff 200633 18 Apr 13:34 1776508465399_m1.jpg\n-rw-r--r-- 1 lukas staff 201006 18 Apr 13:34 1776508479214_m1.jpg\n-rw-r--r-- 1 lukas staff 107315 18 Apr 13:34 1776508479222_m2.jpg\n-rw-r--r-- 1 lukas staff 217542 18 Apr 13:35 1776508510109_m1.jpg\n-rw-r--r-- 1 lukas staff 107558 18 Apr 13:35 1776508520117_m2.jpg\n-rw-r--r-- 1 lukas staff 217529 18 Apr 13:35 1776508540416_m1.jpg\n-rw-r--r-- 1 lukas staff 107438 18 Apr 13:35 1776508550498_m2.jpg\n-rw-r--r-- 1 lukas staff 217565 18 Apr 13:36 1776508570741_m1.jpg\n-rw-r--r-- 1 lukas staff 107323 18 Apr 13:36 1776508580887_m2.jpg\n-rw-r--r-- 1 lukas staff 223931 18 Apr 13:36 1776508601010_m1.jpg\n-rw-r--r-- 1 lukas staff 110527 18 Apr 13:36 1776508601828_m2.jpg\n-rw-r--r-- 1 lukas staff 220887 18 Apr 13:36 1776508601839_m1.jpg\n-rw-r--r-- 1 lukas staff 110573 18 Apr 13:36 1776508604812_m2.jpg\n-rw-r--r-- 1 lukas staff 219398 18 Apr 13:37 1776508632417_m1.jpg\n-rw-r--r-- 1 lukas staff 83219 18 Apr 13:37 1776508635039_m2.jpg\n-rw-r--r-- 1 lukas staff 219514 18 Apr 13:37 1776508638212_m1.jpg\n-rw-r--r-- 1 lukas staff 87339 18 Apr 13:37 1776508638212_m2.jpg\n-rw-r--r-- 1 lukas staff 221109 18 Apr 13:37 1776508639686_m1.jpg\n-rw-r--r-- 1 lukas staff 84740 18 Apr 13:37 1776508639725_m2.jpg\n-rw-r--r-- 1 lukas staff 224486 18 Apr 13:37 1776508640520_m1.jpg\n-rw-r--r-- 1 lukas staff 84838 18 Apr 13:37 1776508640592_m2.jpg\n-rw-r--r-- 1 lukas staff 84841 18 Apr 13:37 1776508647855_m2.jpg\n-rw-r--r-- 1 lukas staff 217131 18 Apr 13:37 1776508647864_m1.jpg\n-rw-r--r-- 1 lukas staff 223897 18 Apr 13:37 1776508651398_m1.jpg\n-rw-r--r-- 1 lukas staff 85463 18 Apr 13:37 1776508651398_m2.jpg\n-rw-r--r-- 1 lukas staff 219804 18 Apr 13:37 1776508653328_m1.jpg\n-rw-r--r-- 1 lukas staff 97034 18 Apr 13:37 1776508653420_m2.jpg\n-rw-r--r-- 1 lukas staff 82829 18 Apr 13:37 1776508659506_m2.jpg\n-rw-r--r-- 1 lukas staff 91337 18 Apr 13:37 1776508665504_m2.jpg\n-rw-r--r-- 1 lukas staff 219393 18 Apr 13:37 1776508665924_m1.jpg\n-rw-r--r-- 1 lukas staff 221275 18 Apr 13:37 1776508666761_m1.jpg\n-rw-r--r-- 1 lukas staff 88185 18 Apr 13:37 1776508666868_m2.jpg\n-rw-r--r-- 1 lukas staff 218919 18 Apr 13:37 1776508668460_m1.jpg\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll \ntotal 40\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 .\ndrwxr-xr-x 22 lukas staff 704 18 Apr 13:37 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 229 lukas staff 7328 18 Apr 13:35 2026-04-17\ndrwxr-xr-x 44 lukas staff 1408 18 Apr 13:37 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 1776\ndrwxr-xr-x 23 lukas staff 736 18 Apr 13:38 .\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:34 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:34 System Audio (output)_2026-04-18_10-34-25.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-02.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-37-46.mp4\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 data\ndrwxr-xr-x 2 lukas staff 64 18 Apr 13:36 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\n-rw-r--r-- 1 lukas staff 173278 18 Apr 13:34 soundcore AeroClip (input)_2026-04-18_10-34-24.mp4\n-rw-r--r-- 1 lukas staff 134890 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-34-56.mp4\n-rw-r--r-- 1 lukas staff 172333 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-35-26.mp4\n-rw-r--r-- 1 lukas staff 151441 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-35-56.mp4\n-rw-r--r-- 1 lukas staff 71265 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-36-26.mp4\n-rw-r--r-- 1 lukas staff 22227 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-36-56.mp4\n-rw-r--r-- 1 lukas staff 78730 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-37-26.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 2256\ndrwxr-xr-x 30 lukas staff 960 18 Apr 13:39 .\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:34 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:34 System Audio (output)_2026-04-18_10-34-25.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-02.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:39 System Audio (output)_2026-04-18_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 33475 18 Apr 13:39 System Audio (output)_2026-04-18_10-39-15.mp4\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 data\ndrwxr-xr-x 2 lukas staff 64 18 Apr 13:38 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\n-rw-r--r-- 1 lukas staff 173278 18 Apr 13:34 soundcore AeroClip (input)_2026-04-18_10-34-24.mp4\n-rw-r--r-- 1 lukas staff 134890 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-34-56.mp4\n-rw-r--r-- 1 lukas staff 172333 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-35-26.mp4\n-rw-r--r-- 1 lukas staff 151441 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-35-56.mp4\n-rw-r--r-- 1 lukas staff 71265 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-36-26.mp4\n-rw-r--r-- 1 lukas staff 22227 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-36-56.mp4\n-rw-r--r-- 1 lukas staff 78730 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-37-26.mp4\n-rw-r--r-- 1 lukas staff 54903 18 Apr 13:38 soundcore AeroClip (input)_2026-04-18_10-37-55.mp4\n-rw-r--r-- 1 lukas staff 58492 18 Apr 13:38 soundcore AeroClip (input)_2026-04-18_10-38-25.mp4\n-rw-r--r-- 1 lukas staff 64925 18 Apr 13:39 soundcore AeroClip (input)_2026-04-18_10-38-55.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ curl -s http://localhost:3030/health | jq '.pipeline'\n{\n \"avg_db_latency_ms\": 169.36220472440945,\n \"avg_ocr_latency_ms\": 0.0,\n \"capture_fps_actual\": 0.2466395779893504,\n \"frame_drop_rate\": 0.0,\n \"frames_captured\": 127,\n \"frames_db_written\": 127,\n \"frames_dropped\": 0,\n \"ocr_cache_hit_rate\": 0.0,\n \"ocr_queue_depth\": 0,\n \"pipeline_stall_count\": 0,\n \"time_to_first_frame_ms\": 1434.727,\n \"uptime_secs\": 514.921413,\n \"video_queue_depth\": 0\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (docker)","depth":2,"bounds":{"left":0.109375,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.11354167,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.21875,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.22291666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.328125,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.33229166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.4375,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.44166666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Review screenpipe usage and Boosteroid integration (claude)","depth":2,"bounds":{"left":0.546875,"top":0.05888889,"width":0.109375,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.55104166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-159-186:~ (nc)","depth":2,"bounds":{"left":0.65625,"top":0.05888889,"width":0.10902778,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.66041666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-20-6-111:~ (nc)","depth":2,"bounds":{"left":0.7652778,"top":0.05888889,"width":0.10902778,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.76944447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.87430555,"top":0.05888889,"width":0.10902778,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8784722,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
6026116265553732678
|
-6096010058767810957
|
app_switch
|
accessibility
|
NULL
|
-rw-r--r-- 1 lukas staff 361011 17 Apr 09:5 -rw-r--r-- 1 lukas staff 361011 17 Apr 09:53 compact_monitor_1_1776408824270.mp4
-rw-r--r-- 1 lukas staff 3365373 17 Apr 09:59 compact_monitor_1_1776409136717.mp4
-rw-r--r-- 1 lukas staff 2601020 17 Apr 10:04 compact_monitor_1_1776409450395.mp4
-rw-r--r-- 1 lukas staff 3497066 17 Apr 10:09 compact_monitor_1_1776409759172.mp4
-rw-r--r-- 1 lukas staff 1507571 17 Apr 10:14 compact_monitor_1_1776410067944.mp4
-rw-r--r-- 1 lukas staff 943396 17 Apr 10:19 compact_monitor_1_1776410372484.mp4
-rw-r--r-- 1 lukas staff 1225040 17 Apr 10:24 compact_monitor_1_1776410674629.mp4
-rw-r--r-- 1 lukas staff 2224229 17 Apr 10:29 compact_monitor_1_1776410981487.mp4
-rw-r--r-- 1 lukas staff 398291 17 Apr 10:34 compact_monitor_1_1776411298373.mp4
-rw-r--r-- 1 lukas staff 4376235 17 Apr 10:40 compact_monitor_1_1776411601686.mp4
-rw-r--r-- 1 lukas staff 5007720 17 Apr 10:45 compact_monitor_1_1776411923026.mp4
-rw-r--r-- 1 lukas staff 2281319 17 Apr 10:50 compact_monitor_1_1776412242015.mp4
-rw-r--r-- 1 lukas staff 3182872 17 Apr 10:56 compact_monitor_1_1776412560658.mp4
-rw-r--r-- 1 lukas staff 3896056 17 Apr 11:01 compact_monitor_1_1776412881181.mp4
-rw-r--r-- 1 lukas staff 6279582 17 Apr 11:06 compact_monitor_1_1776413192507.mp4
-rw-r--r-- 1 lukas staff 6492126 17 Apr 11:12 compact_monitor_1_1776413508291.mp4
-rw-r--r-- 1 lukas staff 6045038 17 Apr 11:17 compact_monitor_1_1776413848971.mp4
-rw-r--r-- 1 lukas staff 4968033 17 Apr 11:23 compact_monitor_1_1776414180658.mp4
-rw-r--r-- 1 lukas staff 7109088 17 Apr 11:28 compact_monitor_1_1776414513921.mp4
-rw-r--r-- 1 lukas staff 9099339 17 Apr 11:34 compact_monitor_1_1776414839842.mp4
-rw-r--r-- 1 lukas staff 926165 17 Apr 11:34 compact_monitor_1_1776414858793.mp4
-rw-r--r-- 1 lukas staff 9246778 17 Apr 11:39 compact_monitor_1_1776415182593.mp4
-rw-r--r-- 1 lukas staff 8361876 17 Apr 11:45 compact_monitor_1_1776415505403.mp4
-rw-r--r-- 1 lukas staff 7215549 17 Apr 11:50 compact_monitor_1_1776415841776.mp4
-rw-r--r-- 1 lukas staff 6234445 17 Apr 11:56 compact_monitor_1_1776416174658.mp4
-rw-r--r-- 1 lukas staff 11694078 17 Apr 12:01 compact_monitor_1_1776416497484.mp4
-rw-r--r-- 1 lukas staff 7033085 17 Apr 12:07 compact_monitor_1_1776416834587.mp4
-rw-r--r-- 1 lukas staff 4309161 17 Apr 12:12 compact_monitor_1_1776417157754.mp4
-rw-r--r-- 1 lukas staff 3782878 17 Apr 12:18 compact_monitor_1_1776417481425.mp4
-rw-r--r-- 1 lukas staff 5597264 17 Apr 12:23 compact_monitor_1_1776417802134.mp4
-rw-r--r-- 1 lukas staff 5667747 17 Apr 12:28 compact_monitor_1_1776418119908.mp4
-rw-r--r-- 1 lukas staff 8840842 17 Apr 12:34 compact_monitor_1_1776418443506.mp4
-rw-r--r-- 1 lukas staff 5442395 17 Apr 12:39 compact_monitor_1_1776418761701.mp4
-rw-r--r-- 1 lukas staff 4054014 17 Apr 12:44 compact_monitor_1_1776419074083.mp4
-rw-r--r-- 1 lukas staff 3734539 17 Apr 12:49 compact_monitor_1_1776419388949.mp4
-rw-r--r-- 1 lukas staff 3137915 17 Apr 12:55 compact_monitor_1_1776419701686.mp4
-rw-r--r-- 1 lukas staff 3064654 17 Apr 13:00 compact_monitor_1_1776420015547.mp4
-rw-r--r-- 1 lukas staff 1189833 17 Apr 13:05 compact_monitor_1_1776420321592.mp4
-rw-r--r-- 1 lukas staff 1862832 17 Apr 13:10 compact_monitor_1_1776420633887.mp4
-rw-r--r-- 1 lukas staff 520517 17 Apr 13:15 compact_monitor_1_1776420947144.mp4
-rw-r--r-- 1 lukas staff 790509 17 Apr 13:20 compact_monitor_1_1776421253865.mp4
-rw-r--r-- 1 lukas staff 1155599 17 Apr 13:26 compact_monitor_1_1776421566995.mp4
-rw-r--r-- 1 lukas staff 626836 17 Apr 13:31 compact_monitor_1_1776421884013.mp4
-rw-r--r-- 1 lukas staff 2709758 17 Apr 13:36 compact_monitor_1_1776422194788.mp4
-rw-r--r-- 1 lukas staff 894214 17 Apr 13:41 compact_monitor_1_1776422513565.mp4
-rw-r--r-- 1 lukas staff 1298826 17 Apr 13:47 compact_monitor_1_1776422829105.mp4
-rw-r--r-- 1 lukas staff 3454896 17 Apr 13:52 compact_monitor_1_1776423143916.mp4
-rw-r--r-- 1 lukas staff 1369217 17 Apr 13:57 compact_monitor_1_1776423466196.mp4
-rw-r--r-- 1 lukas staff 1677163 17 Apr 14:03 compact_monitor_1_1776423783420.mp4
-rw-r--r-- 1 lukas staff 556702 17 Apr 14:08 compact_monitor_1_1776424109344.mp4
-rw-r--r-- 1 lukas staff 1001886 17 Apr 14:13 compact_monitor_1_1776424416957.mp4
-rw-r--r-- 1 lukas staff 1485547 17 Apr 14:18 compact_monitor_1_1776424730536.mp4
-rw-r--r-- 1 lukas staff 935536 17 Apr 14:24 compact_monitor_1_1776425050631.mp4
-rw-r--r-- 1 lukas staff 1119642 17 Apr 14:29 compact_monitor_1_1776425372446.mp4
-rw-r--r-- 1 lukas staff 430883 17 Apr 14:34 compact_monitor_1_1776425690857.mp4
-rw-r--r-- 1 lukas staff 427035 17 Apr 14:40 compact_monitor_1_1776426003278.mp4
-rw-r--r-- 1 lukas staff 654605 17 Apr 14:45 compact_monitor_1_1776426312497.mp4
-rw-r--r-- 1 lukas staff 440539 17 Apr 14:50 compact_monitor_1_1776426625506.mp4
-rw-r--r-- 1 lukas staff 439802 17 Apr 14:55 compact_monitor_1_1776426939895.mp4
-rw-r--r-- 1 lukas staff 557755 17 Apr 15:01 compact_monitor_1_1776427261945.mp4
-rw-r--r-- 1 lukas staff 1071442 17 Apr 15:06 compact_monitor_1_1776427571985.mp4
-rw-r--r-- 1 lukas staff 2606361 17 Apr 15:11 compact_monitor_1_1776427882803.mp4
-rw-r--r-- 1 lukas staff 951201 17 Apr 15:16 compact_monitor_1_1776428192090.mp4
-rw-r--r-- 1 lukas staff 322306 17 Apr 15:21 compact_monitor_1_1776428505150.mp4
-rw-r--r-- 1 lukas staff 331163 17 Apr 15:26 compact_monitor_1_1776428811953.mp4
-rw-r--r-- 1 lukas staff 737469 17 Apr 15:32 compact_monitor_1_1776429127526.mp4
-rw-r--r-- 1 lukas staff 352621 17 Apr 15:37 compact_monitor_1_1776429442374.mp4
-rw-r--r-- 1 lukas staff 444203 17 Apr 15:42 compact_monitor_1_1776429752217.mp4
-rw-r--r-- 1 lukas staff 1407505 17 Apr 15:47 compact_monitor_1_1776430066920.mp4
-rw-r--r-- 1 lukas staff 360974 17 Apr 15:53 compact_monitor_1_1776430376918.mp4
-rw-r--r-- 1 lukas staff 321565 17 Apr 15:58 compact_monitor_1_1776430691588.mp4
-rw-r--r-- 1 lukas staff 317048 17 Apr 16:03 compact_monitor_1_1776431003504.mp4
-rw-r--r-- 1 lukas staff 321894 17 Apr 16:08 compact_monitor_1_1776431317637.mp4
-rw-r--r-- 1 lukas staff 333513 17 Apr 16:13 compact_monitor_1_1776431629041.mp4
-rw-r--r-- 1 lukas staff 326264 17 Apr 16:19 compact_monitor_1_1776431942238.mp4
-rw-r--r-- 1 lukas staff 366336 17 Apr 16:24 compact_monitor_1_1776432254490.mp4
-rw-r--r-- 1 lukas staff 327825 17 Apr 16:29 compact_monitor_1_1776432574989.mp4
-rw-r--r-- 1 lukas staff 1048363 17 Apr 16:34 compact_monitor_1_1776432882794.mp4
-rw-r--r-- 1 lukas staff 1668969 17 Apr 16:39 compact_monitor_1_1776433188842.mp4
-rw-r--r-- 1 lukas staff 1283899 17 Apr 16:44 compact_monitor_1_1776433493858.mp4
-rw-r--r-- 1 lukas staff 314118 17 Apr 16:50 compact_monitor_1_1776433800642.mp4
-rw-r--r-- 1 lukas staff 547478 17 Apr 16:55 compact_monitor_1_1776434111371.mp4
-rw-r--r-- 1 lukas staff 868654 17 Apr 17:00 compact_monitor_1_1776434420728.mp4
-rw-r--r-- 1 lukas staff 885215 17 Apr 17:05 compact_monitor_1_1776434723901.mp4
-rw-r--r-- 1 lukas staff 508905 17 Apr 17:10 compact_monitor_1_1776435038035.mp4
-rw-r--r-- 1 lukas staff 591766 17 Apr 17:16 compact_monitor_1_1776435363044.mp4
-rw-r--r-- 1 lukas staff 2031034 17 Apr 17:21 compact_monitor_1_1776435683729.mp4
-rw-r--r-- 1 lukas staff 2136043 17 Apr 17:26 compact_monitor_1_1776436005076.mp4
-rw-r--r-- 1 lukas staff 578716 17 Apr 17:32 compact_monitor_1_1776436319163.mp4
-rw-r--r-- 1 lukas staff 1308705 17 Apr 17:37 compact_monitor_1_1776436630439.mp4
-rw-r--r-- 1 lukas staff 958771 17 Apr 17:42 compact_monitor_1_1776436939049.mp4
-rw-r--r-- 1 lukas staff 797771 17 Apr 17:47 compact_monitor_1_1776437247467.mp4
-rw-r--r-- 1 lukas staff 1230186 17 Apr 17:52 compact_monitor_1_1776437554897.mp4
-rw-r--r-- 1 lukas staff 862632 17 Apr 17:57 compact_monitor_1_1776437862465.mp4
-rw-r--r-- 1 lukas staff 757441 17 Apr 18:02 compact_monitor_1_1776438171931.mp4
-rw-r--r-- 1 lukas staff 686680 17 Apr 18:08 compact_monitor_1_1776438479816.mp4
-rw-r--r-- 1 lukas staff 1078524 17 Apr 18:13 compact_monitor_1_1776438783339.mp4
-rw-r--r-- 1 lukas staff 496616 17 Apr 18:18 compact_monitor_1_1776439090720.mp4
-rw-r--r-- 1 lukas staff 774571 17 Apr 18:23 compact_monitor_1_1776439396975.mp4
-rw-r--r-- 1 lukas staff 1160291 17 Apr 18:28 compact_monitor_1_1776439703924.mp4
-rw-r--r-- 1 lukas staff 632541 17 Apr 18:34 compact_monitor_1_1776440053428.mp4
-rw-r--r-- 1 lukas staff 3291212 17 Apr 21:05 compact_monitor_1_1776449135667.mp4
-rw-r--r-- 1 lukas staff 768306 17 Apr 09:07 compact_monitor_2_1776406035126.mp4
-rw-r--r-- 1 lukas staff 9277508 17 Apr 09:12 compact_monitor_2_1776406343152.mp4
-rw-r--r-- 1 lukas staff 627114 17 Apr 09:12 compact_monitor_2_1776406349962.mp4
-rw-r--r-- 1 lukas staff 11129246 17 Apr 09:17 compact_monitor_2_1776406653780.mp4
-rw-r--r-- 1 lukas staff 8352174 17 Apr 09:22 compact_monitor_2_1776406964880.mp4
-rw-r--r-- 1 lukas staff 8551960 17 Apr 09:28 compact_monitor_2_1776407277493.mp4
-rw-r--r-- 1 lukas staff 679244 17 Apr 09:28 compact_monitor_2_1776407283693.mp4
-rw-r--r-- 1 lukas staff 12641011 17 Apr 09:33 compact_monitor_2_1776407588804.mp4
-rw-r--r-- 1 lukas staff 9384615 17 Apr 09:38 compact_monitor_2_1776407900099.mp4
-rw-r--r-- 1 lukas staff 4024767 17 Apr 09:43 compact_monitor_2_1776408207652.mp4
-rw-r--r-- 1 lukas staff 2627851 17 Apr 09:48 compact_monitor_2_1776408517311.mp4
-rw-r--r-- 1 lukas staff 4877190 17 Apr 09:53 compact_monitor_2_1776408826734.mp4
-rw-r--r-- 1 lukas staff 3807909 17 Apr 09:59 compact_monitor_2_1776409142638.mp4
-rw-r--r-- 1 lukas staff 4217716 17 Apr 10:04 compact_monitor_2_1776409454184.mp4
-rw-r--r-- 1 lukas staff 1717578 17 Apr 10:09 compact_monitor_2_1776409763153.mp4
-rw-r--r-- 1 lukas staff 1067064 17 Apr 10:14 compact_monitor_2_1776410070480.mp4
-rw-r--r-- 1 lukas staff 442425 17 Apr 10:19 compact_monitor_2_1776410373664.mp4
-rw-r--r-- 1 lukas staff 444497 17 Apr 10:24 compact_monitor_2_1776410676126.mp4
-rw-r--r-- 1 lukas staff 3670025 17 Apr 10:29 compact_monitor_2_1776410986705.mp4
-rw-r--r-- 1 lukas staff 448939 17 Apr 10:35 compact_monitor_2_1776411299875.mp4
-rw-r--r-- 1 lukas staff 4490377 17 Apr 10:40 compact_monitor_2_1776411611306.mp4
-rw-r--r-- 1 lukas staff 7437798 17 Apr 10:45 compact_monitor_2_1776411929615.mp4
-rw-r--r-- 1 lukas staff 6915447 17 Apr 10:50 compact_monitor_2_1776412245368.mp4
-rw-r--r-- 1 lukas staff 7988703 17 Apr 10:56 compact_monitor_2_1776412568330.mp4
-rw-r--r-- 1 lukas staff 5512416 17 Apr 11:01 compact_monitor_2_1776412886253.mp4
-rw-r--r-- 1 lukas staff 3107875 17 Apr 11:06 compact_monitor_2_1776413199096.mp4
-rw-r--r-- 1 lukas staff 4158550 17 Apr 11:12 compact_monitor_2_1776413529707.mp4
-rw-r--r-- 1 lukas staff 4756064 17 Apr 11:17 compact_monitor_2_1776413863997.mp4
-rw-r--r-- 1 lukas staff 5281060 17 Apr 11:23 compact_monitor_2_1776414194026.mp4
-rw-r--r-- 1 lukas staff 2605046 17 Apr 11:28 compact_monitor_2_1776414528521.mp4
-rw-r--r-- 1 lukas staff 5473302 17 Apr 11:34 compact_monitor_2_1776414861255.mp4
-rw-r--r-- 1 lukas staff 2791759 17 Apr 11:40 compact_monitor_2_1776415194836.mp4
-rw-r--r-- 1 lukas staff 5494699 17 Apr 11:45 compact_monitor_2_1776415523929.mp4
-rw-r--r-- 1 lukas staff 4025150 17 Apr 11:51 compact_monitor_2_1776415859261.mp4
-rw-r--r-- 1 lukas staff 2583684 17 Apr 11:56 compact_monitor_2_1776416187267.mp4
-rw-r--r-- 1 lukas staff 5240195 17 Apr 12:02 compact_monitor_2_1776416514967.mp4
-rw-r--r-- 1 lukas staff 3629687 17 Apr 12:07 compact_monitor_2_1776416846005.mp4
-rw-r--r-- 1 lukas staff 5021721 17 Apr 12:12 compact_monitor_2_1776417172355.mp4
-rw-r--r-- 1 lukas staff 2986447 17 Apr 12:18 compact_monitor_2_1776417492277.mp4
-rw-r--r-- 1 lukas staff 3976942 17 Apr 12:23 compact_monitor_2_1776417810578.mp4
-rw-r--r-- 1 lukas staff 4294715 17 Apr 12:29 compact_monitor_2_1776418132304.mp4
-rw-r--r-- 1 lukas staff 4698998 17 Apr 12:34 compact_monitor_2_1776418452374.mp4
-rw-r--r-- 1 lukas staff 3160886 17 Apr 12:39 compact_monitor_2_1776418768555.mp4
-rw-r--r-- 1 lukas staff 1776908 17 Apr 12:44 compact_monitor_2_1776419082274.mp4
-rw-r--r-- 1 lukas staff 1500725 17 Apr 12:49 compact_monitor_2_1776419394506.mp4
-rw-r--r-- 1 lukas staff 1279602 17 Apr 12:55 compact_monitor_2_1776419709571.mp4
-rw-r--r-- 1 lukas staff 2017894 17 Apr 13:00 compact_monitor_2_1776420018859.mp4
-rw-r--r-- 1 lukas staff 5639690 17 Apr 13:05 compact_monitor_2_1776420324337.mp4
-rw-r--r-- 1 lukas staff 4587635 17 Apr 13:10 compact_monitor_2_1776420636421.mp4
-rw-r--r-- 1 lukas staff 2001162 17 Apr 13:15 compact_monitor_2_1776420949555.mp4
-rw-r--r-- 1 lukas staff 3658362 17 Apr 13:21 compact_monitor_2_1776421256306.mp4
-rw-r--r-- 1 lukas staff 7755716 17 Apr 13:26 compact_monitor_2_1776421570292.mp4
-rw-r--r-- 1 lukas staff 3362766 17 Apr 13:31 compact_monitor_2_1776421886698.mp4
-rw-r--r-- 1 lukas staff 6893513 17 Apr 13:36 compact_monitor_2_1776422197625.mp4
-rw-r--r-- 1 lukas staff 4788146 17 Apr 13:42 compact_monitor_2_1776422516390.mp4
-rw-r--r-- 1 lukas staff 4840848 17 Apr 13:47 compact_monitor_2_1776422832136.mp4
-rw-r--r-- 1 lukas staff 9094075 17 Apr 13:52 compact_monitor_2_1776423148671.mp4
-rw-r--r-- 1 lukas staff 10072846 17 Apr 13:57 compact_monitor_2_1776423469970.mp4
-rw-r--r-- 1 lukas staff 13504297 17 Apr 14:03 compact_monitor_2_1776423787536.mp4
-rw-r--r-- 1 lukas staff 1622612 17 Apr 14:08 compact_monitor_2_1776424110832.mp4
-rw-r--r-- 1 lukas staff 5427700 17 Apr 14:13 compact_monitor_2_1776424419206.mp4
-rw-r--r-- 1 lukas staff 1746789 17 Apr 14:19 compact_monitor_2_1776424736034.mp4
-rw-r--r-- 1 lukas staff 4232204 17 Apr 14:24 compact_monitor_2_1776425054084.mp4
-rw-r--r-- 1 lukas staff 4457408 17 Apr 14:29 compact_monitor_2_1776425375574.mp4
-rw-r--r-- 1 lukas staff 174979 17 Apr 14:34 compact_monitor_2_1776425692307.mp4
-rw-r--r-- 1 lukas staff 169969 17 Apr 14:40 compact_monitor_2_1776426005170.mp4
-rw-r--r-- 1 lukas staff 2723106 17 Apr 14:45 compact_monitor_2_1776426315173.mp4
-rw-r--r-- 1 lukas staff 3313658 17 Apr 14:50 compact_monitor_2_1776426627449.mp4
-rw-r--r-- 1 lukas staff 4720437 17 Apr 14:55 compact_monitor_2_1776426943213.mp4
-rw-r--r-- 1 lukas staff 3589313 17 Apr 15:01 compact_monitor_2_1776427263991.mp4
-rw-r--r-- 1 lukas staff 6295236 17 Apr 15:06 compact_monitor_2_1776427573875.mp4
-rw-r--r-- 1 lukas staff 3390902 17 Apr 15:11 compact_monitor_2_1776427885283.mp4
-rw-r--r-- 1 lukas staff 1637607 17 Apr 15:16 compact_monitor_2_1776428194704.mp4
-rw-r--r-- 1 lukas staff 1355327 17 Apr 15:21 compact_monitor_2_1776428506246.mp4
-rw-r--r-- 1 lukas staff 4897048 17 Apr 15:27 compact_monitor_2_1776428815157.mp4
-rw-r--r-- 1 lukas staff 4930900 17 Apr 15:32 compact_monitor_2_1776429130905.mp4
-rw-r--r-- 1 lukas staff 2581578 17 Apr 15:37 compact_monitor_2_1776429444142.mp4
-rw-r--r-- 1 lukas staff 4764105 17 Apr 15:42 compact_monitor_2_1776429755437.mp4
-rw-r--r-- 1 lukas staff 4039902 17 Apr 15:47 compact_monitor_2_1776430069174.mp4
-rw-r--r-- 1 lukas staff 4735734 17 Apr 15:53 compact_monitor_2_1776430380212.mp4
-rw-r--r-- 1 lukas staff 2195410 17 Apr 15:58 compact_monitor_2_1776430693483.mp4
-rw-r--r-- 1 lukas staff 1857322 17 Apr 16:03 compact_monitor_2_1776431005386.mp4
-rw-r--r-- 1 lukas staff 3412100 17 Apr 16:08 compact_monitor_2_1776431319373.mp4
-rw-r--r-- 1 lukas staff 6928537 17 Apr 16:13 compact_monitor_2_1776431631778.mp4
-rw-r--r-- 1 lukas staff 4990793 17 Apr 16:19 compact_monitor_2_1776431944571.mp4
-rw-r--r-- 1 lukas staff 8242278 17 Apr 16:24 compact_monitor_2_1776432258818.mp4
-rw-r--r-- 1 lukas staff 451999 17 Apr 16:24 compact_monitor_2_1776432269036.mp4
-rw-r--r-- 1 lukas staff 2978452 17 Apr 16:29 compact_monitor_2_1776432577467.mp4
-rw-r--r-- 1 lukas staff 1248291 17 Apr 16:34 compact_monitor_2_1776432884349.mp4
-rw-r--r-- 1 lukas staff 2963525 17 Apr 16:39 compact_monitor_2_1776433190284.mp4
-rw-r--r-- 1 lukas staff 1958858 17 Apr 16:44 compact_monitor_2_1776433495477.mp4
-rw-r--r-- 1 lukas staff 1656966 17 Apr 16:50 compact_monitor_2_1776433802347.mp4
-rw-r--r-- 1 lukas staff 2813856 17 Apr 16:55 compact_monitor_2_1776434112909.mp4
-rw-r--r-- 1 lukas staff 510112 17 Apr 17:00 compact_monitor_2_1776434422384.mp4
-rw-r--r-- 1 lukas staff 4354386 17 Apr 17:05 compact_monitor_2_1776434725886.mp4
-rw-r--r-- 1 lukas staff 9798615 17 Apr 17:10 compact_monitor_2_1776435041115.mp4
-rw-r--r-- 1 lukas staff 4503179 17 Apr 17:16 compact_monitor_2_1776435368020.mp4
-rw-r--r-- 1 lukas staff 857002 17 Apr 17:16 compact_monitor_2_1776435376040.mp4
-rw-r--r-- 1 lukas staff 8587996 17 Apr 17:21 compact_monitor_2_1776435687051.mp4
-rw-r--r-- 1 lukas staff 5052247 17 Apr 17:26 compact_monitor_2_1776436009787.mp4
-rw-r--r-- 1 lukas staff 2947924 17 Apr 17:32 compact_monitor_2_1776436320877.mp4
-rw-r--r-- 1 lukas staff 689465 17 Apr 17:37 compact_monitor_2_1776436632536.mp4
-rw-r--r-- 1 lukas staff 1353469 17 Apr 17:42 compact_monitor_2_1776436940788.mp4
-rw-r--r-- 1 lukas staff 870893 17 Apr 17:47 compact_monitor_2_1776437249077.mp4
-rw-r--r-- 1 lukas staff 2653839 17 Apr 17:52 compact_monitor_2_1776437556659.mp4
-rw-r--r-- 1 lukas staff 4310138 17 Apr 17:57 compact_monitor_2_1776437864727.mp4
-rw-r--r-- 1 lukas staff 3683875 17 Apr 18:02 compact_monitor_2_1776438173313.mp4
-rw-r--r-- 1 lukas staff 1916129 17 Apr 18:08 compact_monitor_2_1776438481043.mp4
-rw-r--r-- 1 lukas staff 2349626 17 Apr 18:13 compact_monitor_2_1776438785553.mp4
-rw-r--r-- 1 lukas staff 641202 17 Apr 18:18 compact_monitor_2_1776439092011.mp4
-rw-r--r-- 1 lukas staff 3006319 17 Apr 18:23 compact_monitor_2_1776439398485.mp4
-rw-r--r-- 1 lukas staff 1675776 17 Apr 18:28 compact_monitor_2_1776439705765.mp4
-rw-r--r-- 1 lukas staff 4465225 17 Apr 18:34 compact_monitor_2_1776440055922.mp4
-rw-r--r-- 1 lukas staff 2351472 17 Apr 21:05 compact_monitor_2_1776449140917.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ rsync -av --ignore-existing \
~/.screenpipe/data/data/2026-04-14/ \
/Volumes/Test/screenpipe/data/2026-04-14/
building file list ... done
./
compact_monitor_1_1776236348162.mp4
compact_monitor_1_1776236355103.mp4
compact_monitor_2_1776236357169.mp4
compact_monitor_2_1776236373794.mp4
sent 41217485 bytes received 114 bytes 4338694.63 bytes/sec
total size is 1085072596 speedup is 26.33
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ cd ..
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-14
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ll
total 2120256
drwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 .
drwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..
-rw-r--r--@ 1 lukas staff 581687 14 Apr 09:34 compact_monitor_1_1776148466581.mp4
-rw-r--r--@ 1 lukas staff 702153 14 Apr 09:39 compact_monitor_1_1776148768082.mp4
-rw-r--r--@ 1 lukas staff 251978 14 Apr 09:44 compact_monitor_1_1776149071467.mp4
-rw-r--r-- 1 lukas staff 1717429 14 Apr 09:49 compact_monitor_1_1776149373136.mp4
-rw-r--r-- 1 lukas staff 3477530 14 Apr 09:54 compact_monitor_1_1776149679747.mp4
-rw-r--r-- 1 lukas staff 4579266 14 Apr 09:59 compact_monitor_1_1776149991618.mp4
-rw-r--r-- 1 lukas staff 2305892 14 Apr 10:05 compact_monitor_1_1776150305479.mp4
-rw-r--r-- 1 lukas staff 2464098 14 Apr 10:10 compact_monitor_1_1776150611148.mp4
-rw-r--r-- 1 lukas staff 2640699 14 Apr 10:15 compact_monitor_1_1776150917977.mp4
-rw-r--r-- 1 lukas staff 2938324 14 Apr 10:20 compact_monitor_1_1776151225175.mp4
-rw-r--r-- 1 lukas staff 5734426 14 Apr 10:25 compact_monitor_1_1776151533655.mp4
-rw-r--r-- 1 lukas staff 711441 14 Apr 10:30 compact_monitor_1_1776151841776.mp4
-rw-r--r-- 1 lukas staff 373214 14 Apr 10:35 compact_monitor_1_1776152149591.mp4
-rw-r--r-- 1 lukas staff 259200 14 Apr 10:40 compact_monitor_1_1776152456802.mp4
-rw-r--r-- 1 lukas staff 563549 14 Apr 10:46 compact_monitor_1_1776152770846.mp4
-rw-r--r-- 1 lukas staff 1085034 14 Apr 10:51 compact_monitor_1_1776153081304.mp4
-rw-r--r-- 1 lukas staff 5856145 14 Apr 10:56 compact_monitor_1_1776153389824.mp4
-rw-r--r-- 1 lukas staff 3729206 14 Apr 11:01 compact_monitor_1_1776153702196.mp4
-rw-r--r-- 1 lukas staff 1381857 14 Apr 11:06 compact_monitor_1_1776154011626.mp4
-rw-r--r-- 1 lukas staff 590718 14 Apr 11:12 compact_monitor_1_1776154319547.mp4
-rw-r--r-- 1 lukas staff 1306438 14 Apr 11:17 compact_monitor_1_1776154623893.mp4
-rw-r--r-- 1 lukas staff 216930 14 Apr 11:22 compact_monitor_1_1776154930014.mp4
-rw-r--r-- 1 lukas staff 473698 14 Apr 11:27 compact_monitor_1_1776155238144.mp4
-rw-r--r-- 1 lukas staff 3051314 14 Apr 11:32 compact_monitor_1_1776155547239.mp4
-rw-r--r-- 1 lukas staff 253380 14 Apr 11:37 compact_monitor_1_1776155850943.mp4
-rw-r--r-- 1 lukas staff 258154 14 Apr 11:42 compact_monitor_1_1776156154229.mp4
-rw-r--r-- 1 lukas staff 962893 14 Apr 11:47 compact_monitor_1_1776156458244.mp4
-rw-r--r-- 1 lukas staff 1806149 14 Apr 11:52 compact_monitor_1_1776156762972.mp4
-rw-r--r-- 1 lukas staff 2280711 14 Apr 11:57 compact_monitor_1_1776157067935.mp4
-rw-r--r-- 1 lukas staff 1779777 14 Apr 12:03 compact_monitor_1_1776157380235.mp4
-rw-r--r-- 1 lukas staff 792745 14 Apr 12:08 compact_monitor_1_1776157700511.mp4
-rw-r--r-- 1 lukas staff 290618 14 Apr 12:13 compact_monitor_1_1776158016840.mp4
-rw-r--r-- 1 lukas staff 572761 14 Apr 12:18 compact_monitor_1_1776158333836.mp4
-rw-r--r-- 1 lukas staff 200419 14 Apr 12:24 compact_monitor_1_1776158651565.mp4
-rw-r--r-- 1 lukas staff 190795 14 Apr 12:29 compact_monitor_1_1776158966333.mp4
-rw-r--r-- 1 lukas staff 2126277 14 Apr 12:34 compact_monitor_1_1776159274939.mp4
-rw-r--r-- 1 lukas staff 3747860 14 Apr 12:39 compact_monitor_1_1776159588710.mp4
-rw-r--r-- 1 lukas staff 2152422 14 Apr 12:45 compact_monitor_1_1776159900733.mp4
-rw-r--r-- 1 lukas staff 709258 14 Apr 12:50 compact_monitor_1_1776160204634.mp4
-rw-r--r-- 1 lukas staff 1158847 14 Apr 12:55 compact_monitor_1_1776160508015.mp4
-rw-r--r-- 1 lukas staff 1813578 14 Apr 13:00 compact_monitor_1_1776160811806.mp4
-rw-r--r-- 1 lukas staff 684607 14 Apr 13:05 compact_monitor_1_1776161119981.mp4
-rw-r--r-- 1 lukas staff 636562 14 Apr 13:10 compact_monitor_1_1776161424648.mp4
-rw-r--r-- 1 lukas staff 323432 14 Apr 13:15 compact_monitor_1_1776161728448.mp4
-rw-r--r-- 1 lukas staff 294055 14 Apr 13:20 compact_monitor_1_1776162032394.mp4
-rw-r--r-- 1 lukas staff 296941 14 Apr 13:25 compact_monitor_1_1776162336175.mp4
-rw-r--r-- 1 lukas staff 292219 14 Apr 13:30 compact_monitor_1_1776162640619.mp4
-rw-r--r-- 1 lukas staff 293726 14 Apr 13:35 compact_monitor_1_1776162943050.mp4
-rw-r--r-- 1 lukas staff 832989 14 Apr 13:40 compact_monitor_1_1776163246420.mp4
-rw-r--r-- 1 lukas staff 1068134 14 Apr 13:45 compact_monitor_1_1776163549145.mp4
-rw-r--r-- 1 lukas staff 501189 14 Apr 13:50 compact_monitor_1_1776163853383.mp4
-rw-r--r-- 1 lukas staff 930299 14 Apr 13:55 compact_monitor_1_1776164155311.mp4
-rw-r--r-- 1 lukas staff 2515358 14 Apr 14:01 compact_monitor_1_1776164459131.mp4
-rw-r--r-- 1 lukas staff 1286863 14 Apr 14:06 compact_monitor_1_1776164766940.mp4
-rw-r--r-- 1 lukas staff 1472795 14 Apr 14:15 compact_monitor_1_1776165318512.mp4
-rw-r--r-- 1 lukas staff 439699 14 Apr 14:20 compact_monitor_1_1776165627501.mp4
-rw-r--r-- 1 lukas staff 519424 14 Apr 14:25 compact_monitor_1_1776165931952.mp4
-rw-r--r-- 1 lukas staff 2267443 14 Apr 14:30 compact_monitor_1_1776166235408.mp4
-rw-r--r-- 1 lukas staff 1637916 14 Apr 14:35 compact_monitor_1_1776166551721.mp4
-rw-r--r-- 1 lukas staff 1111434 14 Apr 14:41 compact_monitor_1_1776166862836.mp4
-rw-r--r-- 1 lukas staff 1546177 14 Apr 14:46 compact_monitor_1_1776167176709.mp4
-rw-r--r-- 1 lukas staff 466769 14 Apr 14:51 compact_monitor_1_1776167484535.mp4
-rw-r--r-- 1 lukas staff 993316 14 Apr 14:56 compact_monitor_1_1776167793776.mp4
-rw-r--r-- 1 lukas staff 2902714 14 Apr 15:01 compact_monitor_1_1776168105399.mp4
-rw-r--r-- 1 lukas staff 1279133 14 Apr 15:06 compact_monitor_1_1776168413169.mp4
-rw-r--r-- 1 lukas staff 1132592 14 Apr 15:12 compact_monitor_1_1776168722629.mp4
-rw-r--r-- 1 lukas staff 355416 14 Apr 15:17 compact_monitor_1_1776169031962.mp4
-rw-r--r-- 1 lukas staff 345697 14 Apr 15:22 compact_monitor_1_1776169337693.mp4
-rw-r--r-- 1 lukas staff 3063911 14 Apr 15:27 compact_monitor_1_1776169641353.mp4
-rw-r--r-- 1 lukas staff 5369163 14 Apr 15:32 compact_monitor_1_1776169957193.mp4
-rw-r--r-- 1 lukas staff 3605997 14 Apr 15:38 compact_monitor_1_1776170274586.mp4
-rw-r--r-- 1 lukas staff 1662201 14 Apr 15:43 compact_monitor_1_1776170596259.mp4
-rw-r--r-- 1 lukas staff 2518520 14 Apr 15:48 compact_monitor_1_1776170900299.mp4
-rw-r--r-- 1 lukas staff 2298616 14 Apr 15:53 compact_monitor_1_1776171206621.mp4
-rw-r--r-- 1 lukas staff 252208 14 Apr 15:58 compact_monitor_1_1776171511042.mp4
-rw-r--r-- 1 lukas staff 547163 14 Apr 16:03 compact_monitor_1_1776171816609.mp4
-rw-r--r-- 1 lukas staff 3548604 14 Apr 16:08 compact_monitor_1_1776172119791.mp4
-rw-r--r-- 1 lukas staff 1006390 14 Apr 16:13 compact_monitor_1_1776172427942.mp4
-rw-r--r-- 1 lukas staff 1168310 14 Apr 16:18 compact_monitor_1_1776172735350.mp4
-rw-r--r-- 1 lukas staff 2138214 14 Apr 16:24 compact_monitor_1_1776173046731.mp4
-rw-r--r-- 1 lukas staff 2138875 14 Apr 16:29 compact_monitor_1_1776173354299.mp4
-rw-r--r-- 1 lukas staff 336470 14 Apr 16:34 compact_monitor_1_1776173662610.mp4
-rw-r--r-- 1 lukas staff 330494 14 Apr 16:39 compact_monitor_1_1776173971011.mp4
-rw-r--r-- 1 lukas staff 574889 14 Apr 16:44 compact_monitor_1_1776174275028.mp4
-rw-r--r-- 1 lukas staff 450335 14 Apr 16:49 compact_monitor_1_1776174580719.mp4
-rw-r--r-- 1 lukas staff 452365 14 Apr 16:54 compact_monitor_1_1776174888498.mp4
-rw-r--r-- 1 lukas staff 499947 14 Apr 16:59 compact_monitor_1_1776175195769.mp4
-rw-r--r-- 1 lukas staff 501324 14 Apr 17:05 compact_monitor_1_1776175516084.mp4
-rw-r--r-- 1 lukas staff 1187862 14 Apr 17:10 compact_monitor_1_1776175831658.mp4
-rw-r--r-- 1 lukas staff 4276500 14 Apr 17:15 compact_monitor_1_1776176143265.mp4
-rw-r--r-- 1 lukas staff 3712128 14 Apr 17:21 compact_monitor_1_1776176471641.mp4
-rw-r--r-- 1 lukas staff 3520036 14 Apr 17:26 compact_monitor_1_1776176786477.mp4
-rw-r--r-- 1 lukas staff 4125306 14 Apr 17:31 compact_monitor_1_1776177099043.mp4
-rw-r--r-- 1 lukas staff 3547886 14 Apr 17:37 compact_monitor_1_1776177433201.mp4
-rw-r--r-- 1 lukas staff 2400891 14 Apr 17:42 compact_monitor_1_1776177752872.mp4
-rw-r--r-- 1 lukas staff 4689207 14 Apr 17:47 compact_monitor_1_1776178058207.mp4
-rw-r--r-- 1 lukas staff 1801277 14 Apr 17:53 compact_monitor_1_1776178379517.mp4
-rw-r--r-- 1 lukas staff 3259926 14 Apr 17:58 compact_monitor_1_1776178686281.mp4
-rw-r--r-- 1 lukas staff 1470635 14 Apr 18:03 compact_monitor_1_1776178992046.mp4
-rw-r--r-- 1 lukas staff 3102429 14 Apr 18:08 compact_monitor_1_1776179297527.mp4
-rw-r--r-- 1 lukas staff 223940 14 Apr 18:13 compact_monitor_1_1776179607218.mp4
-rw-r--r-- 1 lukas staff 871065 14 Apr 18:13 compact_monitor_1_1776179613012.mp4
-rw-r--r-- 1 lukas staff 1029083 14 Apr 18:18 compact_monitor_1_1776179929971.mp4
-rw-r--r-- 1 lukas staff 1117436 14 Apr 18:24 compact_monitor_1_1776180248849.mp4
-rw-r--r-- 1 lukas staff 987269 14 Apr 18:29 compact_monitor_1_1776180569996.mp4
-rw-r--r-- 1 lukas staff 896704 14 Apr 18:34 compact_monitor_1_1776180888049.mp4
-rw-r--r-- 1 lukas staff 1945946 14 Apr 18:40 compact_monitor_1_1776181202583.mp4
-rw-r--r-- 1 lukas staff 862072 14 Apr 18:45 compact_monitor_1_1776181526071.mp4
-rw-r--r-- 1 lukas staff 813756 14 Apr 18:50 compact_monitor_1_1776181848713.mp4
-rw-r--r-- 1 lukas staff 813226 14 Apr 18:56 compact_monitor_1_1776182167765.mp4
-rw-r--r-- 1 lukas staff 792289 14 Apr 19:01 compact_monitor_1_1776182486906.mp4
-rw-r--r-- 1 lukas staff 900197 14 Apr 19:06 compact_monitor_1_1776182803477.mp4
-rw-r--r-- 1 lukas staff 903090 14 Apr 19:12 compact_monitor_1_1776183124102.mp4
-rw-r--r-- 1 lukas staff 821885 14 Apr 19:17 compact_monitor_1_1776183446647.mp4
-rw-r--r-- 1 lukas staff 827224 14 Apr 19:22 compact_monitor_1_1776183765602.mp4
-rw-r--r-- 1 lukas staff 844977 14 Apr 19:28 compact_monitor_1_1776184085319.mp4
-rw-r--r-- 1 lukas staff 4160651 15 Apr 09:59 compact_monitor_1_1776236348162.mp4
-rw-r--r-- 1 lukas staff 2257702 15 Apr 09:59 compact_monitor_1_1776236355103.mp4
-rw-r--r-- 1 lukas staff 803789 14 Apr 09:34 compact_monitor_2_1776148467123.mp4
-rw-r--r-- 1 lukas staff 846598 14 Apr 09:39 compact_monitor_2_1776148769344.mp4
-rw-r--r-- 1 lukas staff 380187 14 Apr 09:44 compact_monitor_2_1776149072222.mp4
-rw-r--r-- 1 lukas staff 4330357 14 Apr 09:49 compact_monitor_2_1776149375411.mp4
-rw-r--r-- 1 lukas staff 5979630 14 Apr 09:54 compact_monitor_2_1776149684838.mp4
-rw-r--r-- 1 lukas staff 5685863 14 Apr 10:00 compact_monitor_2_1776149997069.mp4
-rw-r--r-- 1 lukas staff 1817789 14 Apr 10:05 compact_monitor_2_1776150308175.mp4
-rw-r--r-- 1 lukas staff 3734598 14 Apr 10:10 compact_monitor_2_1776150613826.mp4
-rw-r--r-- 1 lukas staff 7824075 14 Apr 10:15 compact_monitor_2_1776150920663.mp4
-rw-r--r-- 1 lukas staff 6299436 14 Apr 10:20 compact_monitor_2_1776151228707.mp4
-rw-r--r-- 1 lukas staff 3269154 14 Apr 10:25 compact_monitor_2_1776151537695.mp4
-rw-r--r-- 1 lukas staff 9004762 14 Apr 10:30 compact_monitor_2_1776151844100.mp4
-rw-r--r-- 1 lukas staff 4710671 14 Apr 10:35 compact_monitor_2_1776152152089.mp4
-rw-r--r-- 1 lukas staff 11173604 14 Apr 10:41 compact_monitor_2_1776152458959.mp4
-rw-r--r-- 1 lukas staff 6761014 14 Apr 10:46 compact_monitor_2_1776152773411.mp4
-rw-r--r-- 1 lukas staff 3510200 14 Apr 10:51 compact_monitor_2_1776153084189.mp4
-rw-r--r-- 1 lukas staff 5292708 14 Apr 10:56 compact_monitor_2_1776153395785.mp4
-rw-r--r-- 1 lukas staff 5487046 14 Apr 11:01 compact_monitor_2_1776153706319.mp4
-rw-r--r-- 1 lukas staff 5305685 14 Apr 11:06 compact_monitor_2_1776154014738.mp4
-rw-r--r-- 1 lukas staff 1963074 14 Apr 11:12 compact_monitor_2_1776154320980.mp4
-rw-r--r-- 1 lukas staff 2513039 14 Apr 11:17 compact_monitor_2_1776154625932.mp4
-rw-r--r-- 1 lukas staff 2532455 14 Apr 11:22 compact_monitor_2_1776154932083.mp4
-rw-r--r-- 1 lukas staff 5825408 14 Apr 11:27 compact_monitor_2_1776155240989.mp4
-rw-r--r-- 1 lukas staff 2066410 14 Apr 11:32 compact_monitor_2_1776155549265.mp4
-rw-r--r-- 1 lukas staff 3082476 14 Apr 11:37 compact_monitor_2_1776155851806.mp4
-rw-r--r-- 1 lukas staff 1587810 14 Apr 11:42 compact_monitor_2_1776156155857.mp4
-rw-r--r-- 1 lukas staff 2346718 14 Apr 11:47 compact_monitor_2_1776156460205.mp4
-rw-r--r-- 1 lukas staff 1579555 14 Apr 11:52 compact_monitor_2_1776156764898.mp4
-rw-r--r-- 1 lukas staff 5481864 14 Apr 11:57 compact_monitor_2_1776157072094.mp4
-rw-r--r-- 1 lukas staff 6527601 14 Apr 12:03 compact_monitor_2_1776157385210.mp4
-rw-r--r-- 1 lukas staff 9023055 14 Apr 12:08 compact_monitor_2_1776157705883.mp4
-rw-r--r-- 1 lukas staff 7566360 14 Apr 12:13 compact_monitor_2_1776158020136.mp4
-rw-r--r-- 1 lukas staff 8801302 14 Apr 12:19 compact_monitor_2_1776158336585.mp4
-rw-r--r-- 1 lukas staff 4139540 14 Apr 12:24 compact_monitor_2_1776158655295.mp4
-rw-r--r-- 1 lukas staff 2987994 14 Apr 12:29 compact_monitor_2_1776158968629.mp4
-rw-r--r-- 1 lukas staff 6323688 14 Apr 12:34 compact_monitor_2_1776159279327.mp4
-rw-r--r-- 1 lukas staff 2684920 14 Apr 12:40 compact_monitor_2_1776159594527.mp4
-rw-r--r-- 1 lukas staff 1646460 14 Apr 12:45 compact_monitor_2_1776159902504.mp4
-rw-r--r-- 1 lukas staff 1767063 14 Apr 12:50 compact_monitor_2_1776160206071.mp4
-rw-r--r-- 1 lukas staff 1910044 14 Apr 12:55 compact_monitor_2_1776160509646.mp4
-rw-r--r-- 1 lukas staff 5101631 14 Apr 13:00 compact_monitor_2_1776160814860.mp4
-rw-r--r-- 1 lukas staff 2487221 14 Apr 13:05 compact_monitor_2_1776161121862.mp4
-rw-r--r-- 1 lukas staff 1452868 14 Apr 13:10 compact_monitor_2_1776161425872.mp4
-rw-r--r-- 1 lukas staff 2963557 14 Apr 13:15 compact_monitor_2_1776161729470.mp4
-rw-r--r-- 1 lukas staff 984939 14 Apr 13:20 compact_monitor_2_1776162033592.mp4
-rw-r--r-- 1 lukas staff 3411829 14 Apr 13:25 compact_monitor_2_1776162337569.mp4
-rw-r--r-- 1 lukas staff 622723 14 Apr 13:30 compact_monitor_2_1776162641477.mp4
-rw-r--r-- 1 lukas staff 2472562 14 Apr 13:35 compact_monitor_2_1776162943983.mp4
-rw-r--r-- 1 lukas staff 1139489 14 Apr 13:40 compact_monitor_2_1776163247509.mp4
-rw-r--r-- 1 lukas staff 862846 14 Apr 13:45 compact_monitor_2_1776163550848.mp4
-rw-r--r-- 1 lukas staff 274959 14 Apr 13:50 compact_monitor_2_1776163854468.mp4
-rw-r--r-- 1 lukas staff 2036659 14 Apr 13:55 compact_monitor_2_1776164156817.mp4
-rw-r--r-- 1 lukas staff 6134905 14 Apr 14:01 compact_monitor_2_1776164461879.mp4
-rw-r--r-- 1 lukas staff 9022378 14 Apr 14:06 compact_monitor_2_1776164770881.mp4
-rw-r--r-- 1 lukas staff 4566763 14 Apr 14:15 compact_monitor_2_1776165320959.mp4
-rw-r--r-- 1 lukas staff 462447 14 Apr 14:20 compact_monitor_2_1776165629627.mp4
-rw-r--r-- 1 lukas staff 709149 14 Apr 14:25 compact_monitor_2_1776165933147.mp4
-rw-r--r-- 1 lukas staff 4478027 14 Apr 14:30 compact_monitor_2_1776166241146.mp4
-rw-r--r-- 1 lukas staff 7488847 14 Apr 14:36 compact_monitor_2_1776166555947.mp4
-rw-r--r-- 1 lukas staff 7883274 14 Apr 14:41 compact_monitor_2_1776166866538.mp4
-rw-r--r-- 1 lukas staff 2869256 14 Apr 14:46 compact_monitor_2_1776167179562.mp4
-rw-r--r-- 1 lukas staff 3068440 14 Apr 14:51 compact_monitor_2_1776167487518.mp4
-rw-r--r-- 1 lukas staff 1816545 14 Apr 14:56 compact_monitor_2_1776167799896.mp4
-rw-r--r-- 1 lukas staff 3180474 14 Apr 15:01 compact_monitor_2_1776168109470.mp4
-rw-r--r-- 1 lukas staff 3774140 14 Apr 15:07 compact_monitor_2_1776168415670.mp4
-rw-r--r-- 1 lukas staff 4536363 14 Apr 15:12 compact_monitor_2_1776168725137.mp4
-rw-r--r-- 1 lukas staff 2387221 14 Apr 15:17 compact_monitor_2_1776169033283.mp4
-rw-r--r-- 1 lukas staff 2605350 14 Apr 15:22 compact_monitor_2_1776169338888.mp4
-rw-r--r-- 1 lukas staff 6906038 14 Apr 15:27 compact_monitor_2_1776169645977.mp4
-rw-r--r-- 1 lukas staff 5738495 14 Apr 15:32 compact_monitor_2_1776169965047.mp4
-rw-r--r-- 1 lukas staff 5595644 14 Apr 15:38 compact_monitor_2_1776170281359.mp4
-rw-r--r-- 1 lukas staff 584749 14 Apr 15:43 compact_monitor_2_1776170598047.mp4
-rw-r--r-- 1 lukas staff 2633541 14 Apr 15:48 compact_monitor_2_1776170903735.mp4
-rw-r--r-- 1 lukas staff 770182 14 Apr 15:53 compact_monitor_2_1776171208825.mp4
-rw-r--r-- 1 lukas staff 1658362 14 Apr 15:58 compact_monitor_2_1776171512473.mp4
-rw-r--r-- 1 lukas staff 295793 14 Apr 16:03 compact_monitor_2_1776171817959.mp4
-rw-r--r-- 1 lukas staff 3540965 14 Apr 16:08 compact_monitor_2_1776172123631.mp4
-rw-r--r-- 1 lukas staff 3589660 14 Apr 16:13 compact_monitor_2_1776172430586.mp4
-rw-r--r-- 1 lukas staff 4735044 14 Apr 16:19 compact_monitor_2_1776172739210.mp4
-rw-r--r-- 1 lukas staff 4951644 14 Apr 16:24 compact_monitor_2_1776173049122.mp4
-rw-r--r-- 1 lukas staff 5939102 14 Apr 16:29 compact_monitor_2_1776173357170.mp4
-rw-r--r-- 1 lukas staff 2549744 14 Apr 16:34 compact_monitor_2_1776173665142.mp4
-rw-r--r-- 1 lukas staff 996149 14 Apr 16:39 compact_monitor_2_1776173972456.mp4
-rw-r--r-- 1 lukas staff 2663346 14 Apr 16:44 compact_monitor_2_1776174276676.mp4
-rw-r--r-- 1 lukas staff 1776844 14 Apr 16:49 compact_monitor_2_1776174582351.mp4
-rw-r--r-- 1 lukas staff 1669202 14 Apr 16:54 compact_monitor_2_1776174889930.mp4
-rw-r--r-- 1 lukas staff 5414828 14 Apr 17:00 compact_monitor_2_1776175198918.mp4
-rw-r--r-- 1 lukas staff 5727100 14 Apr 17:05 compact_monitor_2_1776175518133.mp4
-rw-r--r-- 1 lukas staff 6080220 14 Apr 17:10 compact_monitor_2_1776175835473.mp4
-rw-r--r-- 1 lukas staff 3631681 14 Apr 17:16 compact_monitor_2_1776176159421.mp4
-rw-r--r-- 1 lukas staff 1861818 14 Apr 17:21 compact_monitor_2_1776176479999.mp4
-rw-r--r-- 1 lukas staff 1471229 14 Apr 17:26 compact_monitor_2_1776176794129.mp4
-rw-r--r-- 1 lukas staff 1792667 14 Apr 17:32 compact_monitor_2_1776177119122.mp4
-rw-r--r-- 1 lukas staff 2398088 14 Apr 17:37 compact_monitor_2_1776177447361.mp4
-rw-r--r-- 1 lukas staff 1873376 14 Apr 17:42 compact_monitor_2_1776177755837.mp4
-rw-r--r-- 1 lukas staff 3686281 14 Apr 17:47 compact_monitor_2_1776178069540.mp4
-rw-r--r-- 1 lukas staff 1842517 14 Apr 17:53 compact_monitor_2_1776178382342.mp4
-rw-r--r-- 1 lukas staff 2595005 14 Apr 17:58 compact_monitor_2_1776178688999.mp4
-rw-r--r-- 1 lukas staff 3352578 14 Apr 18:03 compact_monitor_2_1776178994368.mp4
-rw-r--r-- 1 lukas staff 7474140 14 Apr 18:08 compact_monitor_2_1776179301874.mp4
-rw-r--r-- 1 lukas staff 18300640 14 Apr 18:13 compact_monitor_2_1776179614376.mp4
-rw-r--r-- 1 lukas staff 8302944 14 Apr 18:13 compact_monitor_2_1776179625270.mp4
-rw-r--r-- 1 lukas staff 27338956 14 Apr 18:19 compact_monitor_2_1776179934590.mp4
-rw-r--r-- 1 lukas staff 1061768 14 Apr 18:19 compact_monitor_2_1776179947276.mp4
-rw-r--r-- 1 lukas staff 24282145 14 Apr 18:24 compact_monitor_2_1776180254284.mp4
-rw-r--r-- 1 lukas staff 5647384 14 Apr 18:24 compact_monitor_2_1776180266890.mp4
-rw-r--r-- 1 lukas staff 32748524 14 Apr 18:29 compact_monitor_2_1776180574284.mp4
-rw-r--r-- 1 lukas staff 25769571 14 Apr 18:35 compact_monitor_2_1776180892046.mp4
-rw-r--r-- 1 lukas staff 41983533 14 Apr 18:40 compact_monitor_2_1776181207025.mp4
-rw-r--r-- 1 lukas staff 3365850 14 Apr 18:40 compact_monitor_2_1776181223864.mp4
-rw-r--r-- 1 lukas staff 40919053 14 Apr 18:45 compact_monitor_2_1776181530742.mp4
-rw-r--r-- 1 lukas staff 3870375 14 Apr 18:45 compact_monitor_2_1776181546619.mp4
-rw-r--r-- 1 lukas staff 36175005 14 Apr 18:51 compact_monitor_2_1776181853124.mp4
-rw-r--r-- 1 lukas staff 36717883 14 Apr 18:56 compact_monitor_2_1776182171990.mp4
-rw-r--r-- 1 lukas staff 27140350 14 Apr 19:01 compact_monitor_2_1776182491150.mp4
-rw-r--r-- 1 lukas staff 20914618 14 Apr 19:06 compact_monitor_2_1776182808796.mp4
-rw-r--r-- 1 lukas staff 4716229 14 Apr 19:07 compact_monitor_2_1776182820060.mp4
-rw-r--r-- 1 lukas staff 24788277 14 Apr 19:12 compact_monitor_2_1776183129006.mp4
-rw-r--r-- 1 lukas staff 7974655 14 Apr 19:12 compact_monitor_2_1776183141483.mp4
-rw-r--r-- 1 lukas staff 22872307 14 Apr 19:17 compact_monitor_2_1776183451042.mp4
-rw-r--r-- 1 lukas staff 3283631 14 Apr 19:17 compact_monitor_2_1776183462827.mp4
-rw-r--r-- 1 lukas staff 32308259 14 Apr 19:23 compact_monitor_2_1776183769519.mp4
-rw-r--r-- 1 lukas staff 2847482 14 Apr 19:23 compact_monitor_2_1776183783534.mp4
-rw-r--r-- 1 lukas staff 36823186 14 Apr 19:28 compact_monitor_2_1776184089558.mp4
-rw-r--r-- 1 lukas staff 5825352 14 Apr 19:28 compact_monitor_2_1776184104421.mp4
-rw-r--r-- 1 lukas staff 30437061 15 Apr 09:59 compact_monitor_2_1776236357169.mp4
-rw-r--r-- 1 lukas staff 4350302 15 Apr 09:59 compact_monitor_2_1776236373794.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 11:58:00] ========================================
[2026-04-18 11:58:00] Screenpipe sync starting for: 2026-04-14
[2026-04-18 11:58:00] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 11:58:04] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync
Data dir: OK (245 files, 1.0G)
[+00m04s] ▶ Copying data folder for 2026-04-14
rsync 2026-04-14/ → NAS ✗ 531 / 245 files
[2026-04-18 11:58:09] Archive DB size: 3.0G
[2026-04-18 11:58:09] Total time: 0m9s
[2026-04-18 11:58:09] Sync complete for 2026-04-14
[2026-04-18 11:58:09] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 11:59:41] ========================================
[2026-04-18 11:59:41] Screenpipe sync starting for: 2026-04-14
[2026-04-18 11:59:41] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 11:59:45] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync
Data dir: OK (245 files, 1.0G)
[+00m04s] ▶ Copying data folder for 2026-04-14
rsync 2026-04-14/ → NAS ✓ 2m07s (245 files, 1.0G)
[2026-04-18 12:01:52] Archive DB size: 3.0G
[2026-04-18 12:01:52] Total time: 2m11s
[2026-04-18 12:01:52] Sync complete for 2026-04-14
[2026-04-18 12:01:52] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 12:03:13] ========================================
[2026-04-18 12:03:13] Screenpipe sync starting for: 2026-04-14
[2026-04-18 12:03:13] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/screenpipe
Archive DB: will be created
Data dir: OK (245 files, 1.0G)
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)
Parse error near line 3: unknown database nas
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames
error here ---^
Parse error near line 4: unknown database nas
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements
error here ---^
Parse error near line 5: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events
error here ---^
Parse error near line 6: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text
error here ---^
Parse error near line 7: unknown database nas
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks
error here ---^
Parse error near line 8: unknown database nas
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings
error here ---^
Runtime error near line 9: no such database: nas
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ls /Volumes/screenpipe/
ls: /Volumes/screenpipe/: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ cd /Volumes
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 96
drwxr-xr-x 6 root wheel 192 18 Apr 11:17 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
lrwxr-xr-x 1 root wheel 1 16 Apr 15:43 Macintosh HD -> /
drwx------ 1 lukas staff 16384 11 Apr 15:46 Test
drwx------ 1 lukas staff 16384 13 Mar 10:17 Work
drwx------ 1 lukas staff 16384 17 Apr 21:29 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls -la /Volumes/screenpipe/
total 0
ls: /Volumes/screenpipe/: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ mount | grep screenpipe
//Adm1n@DXP4800PLUS-B5F8/screenpipe on /Volumes/screenpipe (smbfs, nodev, nosuid, mounted by lukas)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ umount /Volumes/screenpipe
umount: unmount(/Volumes/screenpipe): Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 12:06:45] ========================================
[2026-04-18 12:06:45] Screenpipe sync starting for: 2026-04-14
[2026-04-18 12:06:45] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/screenpipe
Archive DB: will be created
Data dir: OK (245 files, 1.0G)
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)
Parse error near line 3: unknown database nas
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames
error here ---^
Parse error near line 4: unknown database nas
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements
error here ---^
Parse error near line 5: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events
error here ---^
Parse error near line 6: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text
error here ---^
Parse error near line 7: unknown database nas
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks
error here ---^
Parse error near line 8: unknown database nas
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings
error here ---^
Runtime error near line 9: no such database: nas
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 12:06:51] ========================================
[2026-04-18 12:06:51] Screenpipe sync starting for: 2026-04-14
[2026-04-18 12:06:51] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 12:06:55] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync
Data dir: OK (245 files, 1.0G)
[+00m05s] ▶ Copying data folder for 2026-04-14
rsync 2026-04-14/ → NAS ✓ 0m04s (245 files, 1.0G)
[2026-04-18 12:07:00] Archive DB size: 3.0G
[2026-04-18 12:07:00] Total time: 0m9s
[2026-04-18 12:07:00] Sync complete for 2026-04-14
[2026-04-18 12:07:00] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15
[2026-04-18 12:07:03] ========================================
[2026-04-18 12:07:03] Screenpipe sync starting for: 2026-04-15
[2026-04-18 12:07:03] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 12:07:07] Date 2026-04-15 already has 12874 frames in archive — skipping DB sync
Data dir: OK (241 files, 2.0G)
[+00m04s] ▶ Copying data folder for 2026-04-15
rsync 2026-04-15/ → NAS ✓ 3m22s (241 files, 2.0G)
[2026-04-18 12:10:30] Archive DB size: 3.0G
[2026-04-18 12:10:30] Total time: 3m27s
[2026-04-18 12:10:30] Sync complete for 2026-04-15
[2026-04-18 12:10:30] ============...
|
NULL
|
|
51122
|
1102
|
41
|
2026-04-18T10:44:21.841879+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-18/1776 /Users/lukas/.screenpipe/data/data/2026-04-18/1776509061841_m2.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
-rw-r--r-- 1 lukas staff 361011 17 Apr 09:5 -rw-r--r-- 1 lukas staff 361011 17 Apr 09:53 compact_monitor_1_1776408824270.mp4
-rw-r--r-- 1 lukas staff 3365373 17 Apr 09:59 compact_monitor_1_1776409136717.mp4
-rw-r--r-- 1 lukas staff 2601020 17 Apr 10:04 compact_monitor_1_1776409450395.mp4
-rw-r--r-- 1 lukas staff 3497066 17 Apr 10:09 compact_monitor_1_1776409759172.mp4
-rw-r--r-- 1 lukas staff 1507571 17 Apr 10:14 compact_monitor_1_1776410067944.mp4
-rw-r--r-- 1 lukas staff 943396 17 Apr 10:19 compact_monitor_1_1776410372484.mp4
-rw-r--r-- 1 lukas staff 1225040 17 Apr 10:24 compact_monitor_1_1776410674629.mp4
-rw-r--r-- 1 lukas staff 2224229 17 Apr 10:29 compact_monitor_1_1776410981487.mp4
-rw-r--r-- 1 lukas staff 398291 17 Apr 10:34 compact_monitor_1_1776411298373.mp4
-rw-r--r-- 1 lukas staff 4376235 17 Apr 10:40 compact_monitor_1_1776411601686.mp4
-rw-r--r-- 1 lukas staff 5007720 17 Apr 10:45 compact_monitor_1_1776411923026.mp4
-rw-r--r-- 1 lukas staff 2281319 17 Apr 10:50 compact_monitor_1_1776412242015.mp4
-rw-r--r-- 1 lukas staff 3182872 17 Apr 10:56 compact_monitor_1_1776412560658.mp4
-rw-r--r-- 1 lukas staff 3896056 17 Apr 11:01 compact_monitor_1_1776412881181.mp4
-rw-r--r-- 1 lukas staff 6279582 17 Apr 11:06 compact_monitor_1_1776413192507.mp4
-rw-r--r-- 1 lukas staff 6492126 17 Apr 11:12 compact_monitor_1_1776413508291.mp4
-rw-r--r-- 1 lukas staff 6045038 17 Apr 11:17 compact_monitor_1_1776413848971.mp4
-rw-r--r-- 1 lukas staff 4968033 17 Apr 11:23 compact_monitor_1_1776414180658.mp4
-rw-r--r-- 1 lukas staff 7109088 17 Apr 11:28 compact_monitor_1_1776414513921.mp4
-rw-r--r-- 1 lukas staff 9099339 17 Apr 11:34 compact_monitor_1_1776414839842.mp4
-rw-r--r-- 1 lukas staff 926165 17 Apr 11:34 compact_monitor_1_1776414858793.mp4
-rw-r--r-- 1 lukas staff 9246778 17 Apr 11:39 compact_monitor_1_1776415182593.mp4
-rw-r--r-- 1 lukas staff 8361876 17 Apr 11:45 compact_monitor_1_1776415505403.mp4
-rw-r--r-- 1 lukas staff 7215549 17 Apr 11:50 compact_monitor_1_1776415841776.mp4
-rw-r--r-- 1 lukas staff 6234445 17 Apr 11:56 compact_monitor_1_1776416174658.mp4
-rw-r--r-- 1 lukas staff 11694078 17 Apr 12:01 compact_monitor_1_1776416497484.mp4
-rw-r--r-- 1 lukas staff 7033085 17 Apr 12:07 compact_monitor_1_1776416834587.mp4
-rw-r--r-- 1 lukas staff 4309161 17 Apr 12:12 compact_monitor_1_1776417157754.mp4
-rw-r--r-- 1 lukas staff 3782878 17 Apr 12:18 compact_monitor_1_1776417481425.mp4
-rw-r--r-- 1 lukas staff 5597264 17 Apr 12:23 compact_monitor_1_1776417802134.mp4
-rw-r--r-- 1 lukas staff 5667747 17 Apr 12:28 compact_monitor_1_1776418119908.mp4
-rw-r--r-- 1 lukas staff 8840842 17 Apr 12:34 compact_monitor_1_1776418443506.mp4
-rw-r--r-- 1 lukas staff 5442395 17 Apr 12:39 compact_monitor_1_1776418761701.mp4
-rw-r--r-- 1 lukas staff 4054014 17 Apr 12:44 compact_monitor_1_1776419074083.mp4
-rw-r--r-- 1 lukas staff 3734539 17 Apr 12:49 compact_monitor_1_1776419388949.mp4
-rw-r--r-- 1 lukas staff 3137915 17 Apr 12:55 compact_monitor_1_1776419701686.mp4
-rw-r--r-- 1 lukas staff 3064654 17 Apr 13:00 compact_monitor_1_1776420015547.mp4
-rw-r--r-- 1 lukas staff 1189833 17 Apr 13:05 compact_monitor_1_1776420321592.mp4
-rw-r--r-- 1 lukas staff 1862832 17 Apr 13:10 compact_monitor_1_1776420633887.mp4
-rw-r--r-- 1 lukas staff 520517 17 Apr 13:15 compact_monitor_1_1776420947144.mp4
-rw-r--r-- 1 lukas staff 790509 17 Apr 13:20 compact_monitor_1_1776421253865.mp4
-rw-r--r-- 1 lukas staff 1155599 17 Apr 13:26 compact_monitor_1_1776421566995.mp4
-rw-r--r-- 1 lukas staff 626836 17 Apr 13:31 compact_monitor_1_1776421884013.mp4
-rw-r--r-- 1 lukas staff 2709758 17 Apr 13:36 compact_monitor_1_1776422194788.mp4
-rw-r--r-- 1 lukas staff 894214 17 Apr 13:41 compact_monitor_1_1776422513565.mp4
-rw-r--r-- 1 lukas staff 1298826 17 Apr 13:47 compact_monitor_1_1776422829105.mp4
-rw-r--r-- 1 lukas staff 3454896 17 Apr 13:52 compact_monitor_1_1776423143916.mp4
-rw-r--r-- 1 lukas staff 1369217 17 Apr 13:57 compact_monitor_1_1776423466196.mp4
-rw-r--r-- 1 lukas staff 1677163 17 Apr 14:03 compact_monitor_1_1776423783420.mp4
-rw-r--r-- 1 lukas staff 556702 17 Apr 14:08 compact_monitor_1_1776424109344.mp4
-rw-r--r-- 1 lukas staff 1001886 17 Apr 14:13 compact_monitor_1_1776424416957.mp4
-rw-r--r-- 1 lukas staff 1485547 17 Apr 14:18 compact_monitor_1_1776424730536.mp4
-rw-r--r-- 1 lukas staff 935536 17 Apr 14:24 compact_monitor_1_1776425050631.mp4
-rw-r--r-- 1 lukas staff 1119642 17 Apr 14:29 compact_monitor_1_1776425372446.mp4
-rw-r--r-- 1 lukas staff 430883 17 Apr 14:34 compact_monitor_1_1776425690857.mp4
-rw-r--r-- 1 lukas staff 427035 17 Apr 14:40 compact_monitor_1_1776426003278.mp4
-rw-r--r-- 1 lukas staff 654605 17 Apr 14:45 compact_monitor_1_1776426312497.mp4
-rw-r--r-- 1 lukas staff 440539 17 Apr 14:50 compact_monitor_1_1776426625506.mp4
-rw-r--r-- 1 lukas staff 439802 17 Apr 14:55 compact_monitor_1_1776426939895.mp4
-rw-r--r-- 1 lukas staff 557755 17 Apr 15:01 compact_monitor_1_1776427261945.mp4
-rw-r--r-- 1 lukas staff 1071442 17 Apr 15:06 compact_monitor_1_1776427571985.mp4
-rw-r--r-- 1 lukas staff 2606361 17 Apr 15:11 compact_monitor_1_1776427882803.mp4
-rw-r--r-- 1 lukas staff 951201 17 Apr 15:16 compact_monitor_1_1776428192090.mp4
-rw-r--r-- 1 lukas staff 322306 17 Apr 15:21 compact_monitor_1_1776428505150.mp4
-rw-r--r-- 1 lukas staff 331163 17 Apr 15:26 compact_monitor_1_1776428811953.mp4
-rw-r--r-- 1 lukas staff 737469 17 Apr 15:32 compact_monitor_1_1776429127526.mp4
-rw-r--r-- 1 lukas staff 352621 17 Apr 15:37 compact_monitor_1_1776429442374.mp4
-rw-r--r-- 1 lukas staff 444203 17 Apr 15:42 compact_monitor_1_1776429752217.mp4
-rw-r--r-- 1 lukas staff 1407505 17 Apr 15:47 compact_monitor_1_1776430066920.mp4
-rw-r--r-- 1 lukas staff 360974 17 Apr 15:53 compact_monitor_1_1776430376918.mp4
-rw-r--r-- 1 lukas staff 321565 17 Apr 15:58 compact_monitor_1_1776430691588.mp4
-rw-r--r-- 1 lukas staff 317048 17 Apr 16:03 compact_monitor_1_1776431003504.mp4
-rw-r--r-- 1 lukas staff 321894 17 Apr 16:08 compact_monitor_1_1776431317637.mp4
-rw-r--r-- 1 lukas staff 333513 17 Apr 16:13 compact_monitor_1_1776431629041.mp4
-rw-r--r-- 1 lukas staff 326264 17 Apr 16:19 compact_monitor_1_1776431942238.mp4
-rw-r--r-- 1 lukas staff 366336 17 Apr 16:24 compact_monitor_1_1776432254490.mp4
-rw-r--r-- 1 lukas staff 327825 17 Apr 16:29 compact_monitor_1_1776432574989.mp4
-rw-r--r-- 1 lukas staff 1048363 17 Apr 16:34 compact_monitor_1_1776432882794.mp4
-rw-r--r-- 1 lukas staff 1668969 17 Apr 16:39 compact_monitor_1_1776433188842.mp4
-rw-r--r-- 1 lukas staff 1283899 17 Apr 16:44 compact_monitor_1_1776433493858.mp4
-rw-r--r-- 1 lukas staff 314118 17 Apr 16:50 compact_monitor_1_1776433800642.mp4
-rw-r--r-- 1 lukas staff 547478 17 Apr 16:55 compact_monitor_1_1776434111371.mp4
-rw-r--r-- 1 lukas staff 868654 17 Apr 17:00 compact_monitor_1_1776434420728.mp4
-rw-r--r-- 1 lukas staff 885215 17 Apr 17:05 compact_monitor_1_1776434723901.mp4
-rw-r--r-- 1 lukas staff 508905 17 Apr 17:10 compact_monitor_1_1776435038035.mp4
-rw-r--r-- 1 lukas staff 591766 17 Apr 17:16 compact_monitor_1_1776435363044.mp4
-rw-r--r-- 1 lukas staff 2031034 17 Apr 17:21 compact_monitor_1_1776435683729.mp4
-rw-r--r-- 1 lukas staff 2136043 17 Apr 17:26 compact_monitor_1_1776436005076.mp4
-rw-r--r-- 1 lukas staff 578716 17 Apr 17:32 compact_monitor_1_1776436319163.mp4
-rw-r--r-- 1 lukas staff 1308705 17 Apr 17:37 compact_monitor_1_1776436630439.mp4
-rw-r--r-- 1 lukas staff 958771 17 Apr 17:42 compact_monitor_1_1776436939049.mp4
-rw-r--r-- 1 lukas staff 797771 17 Apr 17:47 compact_monitor_1_1776437247467.mp4
-rw-r--r-- 1 lukas staff 1230186 17 Apr 17:52 compact_monitor_1_1776437554897.mp4
-rw-r--r-- 1 lukas staff 862632 17 Apr 17:57 compact_monitor_1_1776437862465.mp4
-rw-r--r-- 1 lukas staff 757441 17 Apr 18:02 compact_monitor_1_1776438171931.mp4
-rw-r--r-- 1 lukas staff 686680 17 Apr 18:08 compact_monitor_1_1776438479816.mp4
-rw-r--r-- 1 lukas staff 1078524 17 Apr 18:13 compact_monitor_1_1776438783339.mp4
-rw-r--r-- 1 lukas staff 496616 17 Apr 18:18 compact_monitor_1_1776439090720.mp4
-rw-r--r-- 1 lukas staff 774571 17 Apr 18:23 compact_monitor_1_1776439396975.mp4
-rw-r--r-- 1 lukas staff 1160291 17 Apr 18:28 compact_monitor_1_1776439703924.mp4
-rw-r--r-- 1 lukas staff 632541 17 Apr 18:34 compact_monitor_1_1776440053428.mp4
-rw-r--r-- 1 lukas staff 3291212 17 Apr 21:05 compact_monitor_1_1776449135667.mp4
-rw-r--r-- 1 lukas staff 768306 17 Apr 09:07 compact_monitor_2_1776406035126.mp4
-rw-r--r-- 1 lukas staff 9277508 17 Apr 09:12 compact_monitor_2_1776406343152.mp4
-rw-r--r-- 1 lukas staff 627114 17 Apr 09:12 compact_monitor_2_1776406349962.mp4
-rw-r--r-- 1 lukas staff 11129246 17 Apr 09:17 compact_monitor_2_1776406653780.mp4
-rw-r--r-- 1 lukas staff 8352174 17 Apr 09:22 compact_monitor_2_1776406964880.mp4
-rw-r--r-- 1 lukas staff 8551960 17 Apr 09:28 compact_monitor_2_1776407277493.mp4
-rw-r--r-- 1 lukas staff 679244 17 Apr 09:28 compact_monitor_2_1776407283693.mp4
-rw-r--r-- 1 lukas staff 12641011 17 Apr 09:33 compact_monitor_2_1776407588804.mp4
-rw-r--r-- 1 lukas staff 9384615 17 Apr 09:38 compact_monitor_2_1776407900099.mp4
-rw-r--r-- 1 lukas staff 4024767 17 Apr 09:43 compact_monitor_2_1776408207652.mp4
-rw-r--r-- 1 lukas staff 2627851 17 Apr 09:48 compact_monitor_2_1776408517311.mp4
-rw-r--r-- 1 lukas staff 4877190 17 Apr 09:53 compact_monitor_2_1776408826734.mp4
-rw-r--r-- 1 lukas staff 3807909 17 Apr 09:59 compact_monitor_2_1776409142638.mp4
-rw-r--r-- 1 lukas staff 4217716 17 Apr 10:04 compact_monitor_2_1776409454184.mp4
-rw-r--r-- 1 lukas staff 1717578 17 Apr 10:09 compact_monitor_2_1776409763153.mp4
-rw-r--r-- 1 lukas staff 1067064 17 Apr 10:14 compact_monitor_2_1776410070480.mp4
-rw-r--r-- 1 lukas staff 442425 17 Apr 10:19 compact_monitor_2_1776410373664.mp4
-rw-r--r-- 1 lukas staff 444497 17 Apr 10:24 compact_monitor_2_1776410676126.mp4
-rw-r--r-- 1 lukas staff 3670025 17 Apr 10:29 compact_monitor_2_1776410986705.mp4
-rw-r--r-- 1 lukas staff 448939 17 Apr 10:35 compact_monitor_2_1776411299875.mp4
-rw-r--r-- 1 lukas staff 4490377 17 Apr 10:40 compact_monitor_2_1776411611306.mp4
-rw-r--r-- 1 lukas staff 7437798 17 Apr 10:45 compact_monitor_2_1776411929615.mp4
-rw-r--r-- 1 lukas staff 6915447 17 Apr 10:50 compact_monitor_2_1776412245368.mp4
-rw-r--r-- 1 lukas staff 7988703 17 Apr 10:56 compact_monitor_2_1776412568330.mp4
-rw-r--r-- 1 lukas staff 5512416 17 Apr 11:01 compact_monitor_2_1776412886253.mp4
-rw-r--r-- 1 lukas staff 3107875 17 Apr 11:06 compact_monitor_2_1776413199096.mp4
-rw-r--r-- 1 lukas staff 4158550 17 Apr 11:12 compact_monitor_2_1776413529707.mp4
-rw-r--r-- 1 lukas staff 4756064 17 Apr 11:17 compact_monitor_2_1776413863997.mp4
-rw-r--r-- 1 lukas staff 5281060 17 Apr 11:23 compact_monitor_2_1776414194026.mp4
-rw-r--r-- 1 lukas staff 2605046 17 Apr 11:28 compact_monitor_2_1776414528521.mp4
-rw-r--r-- 1 lukas staff 5473302 17 Apr 11:34 compact_monitor_2_1776414861255.mp4
-rw-r--r-- 1 lukas staff 2791759 17 Apr 11:40 compact_monitor_2_1776415194836.mp4
-rw-r--r-- 1 lukas staff 5494699 17 Apr 11:45 compact_monitor_2_1776415523929.mp4
-rw-r--r-- 1 lukas staff 4025150 17 Apr 11:51 compact_monitor_2_1776415859261.mp4
-rw-r--r-- 1 lukas staff 2583684 17 Apr 11:56 compact_monitor_2_1776416187267.mp4
-rw-r--r-- 1 lukas staff 5240195 17 Apr 12:02 compact_monitor_2_1776416514967.mp4
-rw-r--r-- 1 lukas staff 3629687 17 Apr 12:07 compact_monitor_2_1776416846005.mp4
-rw-r--r-- 1 lukas staff 5021721 17 Apr 12:12 compact_monitor_2_1776417172355.mp4
-rw-r--r-- 1 lukas staff 2986447 17 Apr 12:18 compact_monitor_2_1776417492277.mp4
-rw-r--r-- 1 lukas staff 3976942 17 Apr 12:23 compact_monitor_2_1776417810578.mp4
-rw-r--r-- 1 lukas staff 4294715 17 Apr 12:29 compact_monitor_2_1776418132304.mp4
-rw-r--r-- 1 lukas staff 4698998 17 Apr 12:34 compact_monitor_2_1776418452374.mp4
-rw-r--r-- 1 lukas staff 3160886 17 Apr 12:39 compact_monitor_2_1776418768555.mp4
-rw-r--r-- 1 lukas staff 1776908 17 Apr 12:44 compact_monitor_2_1776419082274.mp4
-rw-r--r-- 1 lukas staff 1500725 17 Apr 12:49 compact_monitor_2_1776419394506.mp4
-rw-r--r-- 1 lukas staff 1279602 17 Apr 12:55 compact_monitor_2_1776419709571.mp4
-rw-r--r-- 1 lukas staff 2017894 17 Apr 13:00 compact_monitor_2_1776420018859.mp4
-rw-r--r-- 1 lukas staff 5639690 17 Apr 13:05 compact_monitor_2_1776420324337.mp4
-rw-r--r-- 1 lukas staff 4587635 17 Apr 13:10 compact_monitor_2_1776420636421.mp4
-rw-r--r-- 1 lukas staff 2001162 17 Apr 13:15 compact_monitor_2_1776420949555.mp4
-rw-r--r-- 1 lukas staff 3658362 17 Apr 13:21 compact_monitor_2_1776421256306.mp4
-rw-r--r-- 1 lukas staff 7755716 17 Apr 13:26 compact_monitor_2_1776421570292.mp4
-rw-r--r-- 1 lukas staff 3362766 17 Apr 13:31 compact_monitor_2_1776421886698.mp4
-rw-r--r-- 1 lukas staff 6893513 17 Apr 13:36 compact_monitor_2_1776422197625.mp4
-rw-r--r-- 1 lukas staff 4788146 17 Apr 13:42 compact_monitor_2_1776422516390.mp4
-rw-r--r-- 1 lukas staff 4840848 17 Apr 13:47 compact_monitor_2_1776422832136.mp4
-rw-r--r-- 1 lukas staff 9094075 17 Apr 13:52 compact_monitor_2_1776423148671.mp4
-rw-r--r-- 1 lukas staff 10072846 17 Apr 13:57 compact_monitor_2_1776423469970.mp4
-rw-r--r-- 1 lukas staff 13504297 17 Apr 14:03 compact_monitor_2_1776423787536.mp4
-rw-r--r-- 1 lukas staff 1622612 17 Apr 14:08 compact_monitor_2_1776424110832.mp4
-rw-r--r-- 1 lukas staff 5427700 17 Apr 14:13 compact_monitor_2_1776424419206.mp4
-rw-r--r-- 1 lukas staff 1746789 17 Apr 14:19 compact_monitor_2_1776424736034.mp4
-rw-r--r-- 1 lukas staff 4232204 17 Apr 14:24 compact_monitor_2_1776425054084.mp4
-rw-r--r-- 1 lukas staff 4457408 17 Apr 14:29 compact_monitor_2_1776425375574.mp4
-rw-r--r-- 1 lukas staff 174979 17 Apr 14:34 compact_monitor_2_1776425692307.mp4
-rw-r--r-- 1 lukas staff 169969 17 Apr 14:40 compact_monitor_2_1776426005170.mp4
-rw-r--r-- 1 lukas staff 2723106 17 Apr 14:45 compact_monitor_2_1776426315173.mp4
-rw-r--r-- 1 lukas staff 3313658 17 Apr 14:50 compact_monitor_2_1776426627449.mp4
-rw-r--r-- 1 lukas staff 4720437 17 Apr 14:55 compact_monitor_2_1776426943213.mp4
-rw-r--r-- 1 lukas staff 3589313 17 Apr 15:01 compact_monitor_2_1776427263991.mp4
-rw-r--r-- 1 lukas staff 6295236 17 Apr 15:06 compact_monitor_2_1776427573875.mp4
-rw-r--r-- 1 lukas staff 3390902 17 Apr 15:11 compact_monitor_2_1776427885283.mp4
-rw-r--r-- 1 lukas staff 1637607 17 Apr 15:16 compact_monitor_2_1776428194704.mp4
-rw-r--r-- 1 lukas staff 1355327 17 Apr 15:21 compact_monitor_2_1776428506246.mp4
-rw-r--r-- 1 lukas staff 4897048 17 Apr 15:27 compact_monitor_2_1776428815157.mp4
-rw-r--r-- 1 lukas staff 4930900 17 Apr 15:32 compact_monitor_2_1776429130905.mp4
-rw-r--r-- 1 lukas staff 2581578 17 Apr 15:37 compact_monitor_2_1776429444142.mp4
-rw-r--r-- 1 lukas staff 4764105 17 Apr 15:42 compact_monitor_2_1776429755437.mp4
-rw-r--r-- 1 lukas staff 4039902 17 Apr 15:47 compact_monitor_2_1776430069174.mp4
-rw-r--r-- 1 lukas staff 4735734 17 Apr 15:53 compact_monitor_2_1776430380212.mp4
-rw-r--r-- 1 lukas staff 2195410 17 Apr 15:58 compact_monitor_2_1776430693483.mp4
-rw-r--r-- 1 lukas staff 1857322 17 Apr 16:03 compact_monitor_2_1776431005386.mp4
-rw-r--r-- 1 lukas staff 3412100 17 Apr 16:08 compact_monitor_2_1776431319373.mp4
-rw-r--r-- 1 lukas staff 6928537 17 Apr 16:13 compact_monitor_2_1776431631778.mp4
-rw-r--r-- 1 lukas staff 4990793 17 Apr 16:19 compact_monitor_2_1776431944571.mp4
-rw-r--r-- 1 lukas staff 8242278 17 Apr 16:24 compact_monitor_2_1776432258818.mp4
-rw-r--r-- 1 lukas staff 451999 17 Apr 16:24 compact_monitor_2_1776432269036.mp4
-rw-r--r-- 1 lukas staff 2978452 17 Apr 16:29 compact_monitor_2_1776432577467.mp4
-rw-r--r-- 1 lukas staff 1248291 17 Apr 16:34 compact_monitor_2_1776432884349.mp4
-rw-r--r-- 1 lukas staff 2963525 17 Apr 16:39 compact_monitor_2_1776433190284.mp4
-rw-r--r-- 1 lukas staff 1958858 17 Apr 16:44 compact_monitor_2_1776433495477.mp4
-rw-r--r-- 1 lukas staff 1656966 17 Apr 16:50 compact_monitor_2_1776433802347.mp4
-rw-r--r-- 1 lukas staff 2813856 17 Apr 16:55 compact_monitor_2_1776434112909.mp4
-rw-r--r-- 1 lukas staff 510112 17 Apr 17:00 compact_monitor_2_1776434422384.mp4
-rw-r--r-- 1 lukas staff 4354386 17 Apr 17:05 compact_monitor_2_1776434725886.mp4
-rw-r--r-- 1 lukas staff 9798615 17 Apr 17:10 compact_monitor_2_1776435041115.mp4
-rw-r--r-- 1 lukas staff 4503179 17 Apr 17:16 compact_monitor_2_1776435368020.mp4
-rw-r--r-- 1 lukas staff 857002 17 Apr 17:16 compact_monitor_2_1776435376040.mp4
-rw-r--r-- 1 lukas staff 8587996 17 Apr 17:21 compact_monitor_2_1776435687051.mp4
-rw-r--r-- 1 lukas staff 5052247 17 Apr 17:26 compact_monitor_2_1776436009787.mp4
-rw-r--r-- 1 lukas staff 2947924 17 Apr 17:32 compact_monitor_2_1776436320877.mp4
-rw-r--r-- 1 lukas staff 689465 17 Apr 17:37 compact_monitor_2_1776436632536.mp4
-rw-r--r-- 1 lukas staff 1353469 17 Apr 17:42 compact_monitor_2_1776436940788.mp4
-rw-r--r-- 1 lukas staff 870893 17 Apr 17:47 compact_monitor_2_1776437249077.mp4
-rw-r--r-- 1 lukas staff 2653839 17 Apr 17:52 compact_monitor_2_1776437556659.mp4
-rw-r--r-- 1 lukas staff 4310138 17 Apr 17:57 compact_monitor_2_1776437864727.mp4
-rw-r--r-- 1 lukas staff 3683875 17 Apr 18:02 compact_monitor_2_1776438173313.mp4
-rw-r--r-- 1 lukas staff 1916129 17 Apr 18:08 compact_monitor_2_1776438481043.mp4
-rw-r--r-- 1 lukas staff 2349626 17 Apr 18:13 compact_monitor_2_1776438785553.mp4
-rw-r--r-- 1 lukas staff 641202 17 Apr 18:18 compact_monitor_2_1776439092011.mp4
-rw-r--r-- 1 lukas staff 3006319 17 Apr 18:23 compact_monitor_2_1776439398485.mp4
-rw-r--r-- 1 lukas staff 1675776 17 Apr 18:28 compact_monitor_2_1776439705765.mp4
-rw-r--r-- 1 lukas staff 4465225 17 Apr 18:34 compact_monitor_2_1776440055922.mp4
-rw-r--r-- 1 lukas staff 2351472 17 Apr 21:05 compact_monitor_2_1776449140917.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ rsync -av --ignore-existing \
~/.screenpipe/data/data/2026-04-14/ \
/Volumes/Test/screenpipe/data/2026-04-14/
building file list ... done
./
compact_monitor_1_1776236348162.mp4
compact_monitor_1_1776236355103.mp4
compact_monitor_2_1776236357169.mp4
compact_monitor_2_1776236373794.mp4
sent 41217485 bytes received 114 bytes 4338694.63 bytes/sec
total size is 1085072596 speedup is 26.33
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ cd ..
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-14
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ll
total 2120256
drwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 .
drwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..
-rw-r--r--@ 1 lukas staff 581687 14 Apr 09:34 compact_monitor_1_1776148466581.mp4
-rw-r--r--@ 1 lukas staff 702153 14 Apr 09:39 compact_monitor_1_1776148768082.mp4
-rw-r--r--@ 1 lukas staff 251978 14 Apr 09:44 compact_monitor_1_1776149071467.mp4
-rw-r--r-- 1 lukas staff 1717429 14 Apr 09:49 compact_monitor_1_1776149373136.mp4
-rw-r--r-- 1 lukas staff 3477530 14 Apr 09:54 compact_monitor_1_1776149679747.mp4
-rw-r--r-- 1 lukas staff 4579266 14 Apr 09:59 compact_monitor_1_1776149991618.mp4
-rw-r--r-- 1 lukas staff 2305892 14 Apr 10:05 compact_monitor_1_1776150305479.mp4
-rw-r--r-- 1 lukas staff 2464098 14 Apr 10:10 compact_monitor_1_1776150611148.mp4
-rw-r--r-- 1 lukas staff 2640699 14 Apr 10:15 compact_monitor_1_1776150917977.mp4
-rw-r--r-- 1 lukas staff 2938324 14 Apr 10:20 compact_monitor_1_1776151225175.mp4
-rw-r--r-- 1 lukas staff 5734426 14 Apr 10:25 compact_monitor_1_1776151533655.mp4
-rw-r--r-- 1 lukas staff 711441 14 Apr 10:30 compact_monitor_1_1776151841776.mp4
-rw-r--r-- 1 lukas staff 373214 14 Apr 10:35 compact_monitor_1_1776152149591.mp4
-rw-r--r-- 1 lukas staff 259200 14 Apr 10:40 compact_monitor_1_1776152456802.mp4
-rw-r--r-- 1 lukas staff 563549 14 Apr 10:46 compact_monitor_1_1776152770846.mp4
-rw-r--r-- 1 lukas staff 1085034 14 Apr 10:51 compact_monitor_1_1776153081304.mp4
-rw-r--r-- 1 lukas staff 5856145 14 Apr 10:56 compact_monitor_1_1776153389824.mp4
-rw-r--r-- 1 lukas staff 3729206 14 Apr 11:01 compact_monitor_1_1776153702196.mp4
-rw-r--r-- 1 lukas staff 1381857 14 Apr 11:06 compact_monitor_1_1776154011626.mp4
-rw-r--r-- 1 lukas staff 590718 14 Apr 11:12 compact_monitor_1_1776154319547.mp4
-rw-r--r-- 1 lukas staff 1306438 14 Apr 11:17 compact_monitor_1_1776154623893.mp4
-rw-r--r-- 1 lukas staff 216930 14 Apr 11:22 compact_monitor_1_1776154930014.mp4
-rw-r--r-- 1 lukas staff 473698 14 Apr 11:27 compact_monitor_1_1776155238144.mp4
-rw-r--r-- 1 lukas staff 3051314 14 Apr 11:32 compact_monitor_1_1776155547239.mp4
-rw-r--r-- 1 lukas staff 253380 14 Apr 11:37 compact_monitor_1_1776155850943.mp4
-rw-r--r-- 1 lukas staff 258154 14 Apr 11:42 compact_monitor_1_1776156154229.mp4
-rw-r--r-- 1 lukas staff 962893 14 Apr 11:47 compact_monitor_1_1776156458244.mp4
-rw-r--r-- 1 lukas staff 1806149 14 Apr 11:52 compact_monitor_1_1776156762972.mp4
-rw-r--r-- 1 lukas staff 2280711 14 Apr 11:57 compact_monitor_1_1776157067935.mp4
-rw-r--r-- 1 lukas staff 1779777 14 Apr 12:03 compact_monitor_1_1776157380235.mp4
-rw-r--r-- 1 lukas staff 792745 14 Apr 12:08 compact_monitor_1_1776157700511.mp4
-rw-r--r-- 1 lukas staff 290618 14 Apr 12:13 compact_monitor_1_1776158016840.mp4
-rw-r--r-- 1 lukas staff 572761 14 Apr 12:18 compact_monitor_1_1776158333836.mp4
-rw-r--r-- 1 lukas staff 200419 14 Apr 12:24 compact_monitor_1_1776158651565.mp4
-rw-r--r-- 1 lukas staff 190795 14 Apr 12:29 compact_monitor_1_1776158966333.mp4
-rw-r--r-- 1 lukas staff 2126277 14 Apr 12:34 compact_monitor_1_1776159274939.mp4
-rw-r--r-- 1 lukas staff 3747860 14 Apr 12:39 compact_monitor_1_1776159588710.mp4
-rw-r--r-- 1 lukas staff 2152422 14 Apr 12:45 compact_monitor_1_1776159900733.mp4
-rw-r--r-- 1 lukas staff 709258 14 Apr 12:50 compact_monitor_1_1776160204634.mp4
-rw-r--r-- 1 lukas staff 1158847 14 Apr 12:55 compact_monitor_1_1776160508015.mp4
-rw-r--r-- 1 lukas staff 1813578 14 Apr 13:00 compact_monitor_1_1776160811806.mp4
-rw-r--r-- 1 lukas staff 684607 14 Apr 13:05 compact_monitor_1_1776161119981.mp4
-rw-r--r-- 1 lukas staff 636562 14 Apr 13:10 compact_monitor_1_1776161424648.mp4
-rw-r--r-- 1 lukas staff 323432 14 Apr 13:15 compact_monitor_1_1776161728448.mp4
-rw-r--r-- 1 lukas staff 294055 14 Apr 13:20 compact_monitor_1_1776162032394.mp4
-rw-r--r-- 1 lukas staff 296941 14 Apr 13:25 compact_monitor_1_1776162336175.mp4
-rw-r--r-- 1 lukas staff 292219 14 Apr 13:30 compact_monitor_1_1776162640619.mp4
-rw-r--r-- 1 lukas staff 293726 14 Apr 13:35 compact_monitor_1_1776162943050.mp4
-rw-r--r-- 1 lukas staff 832989 14 Apr 13:40 compact_monitor_1_1776163246420.mp4
-rw-r--r-- 1 lukas staff 1068134 14 Apr 13:45 compact_monitor_1_1776163549145.mp4
-rw-r--r-- 1 lukas staff 501189 14 Apr 13:50 compact_monitor_1_1776163853383.mp4
-rw-r--r-- 1 lukas staff 930299 14 Apr 13:55 compact_monitor_1_1776164155311.mp4
-rw-r--r-- 1 lukas staff 2515358 14 Apr 14:01 compact_monitor_1_1776164459131.mp4
-rw-r--r-- 1 lukas staff 1286863 14 Apr 14:06 compact_monitor_1_1776164766940.mp4
-rw-r--r-- 1 lukas staff 1472795 14 Apr 14:15 compact_monitor_1_1776165318512.mp4
-rw-r--r-- 1 lukas staff 439699 14 Apr 14:20 compact_monitor_1_1776165627501.mp4
-rw-r--r-- 1 lukas staff 519424 14 Apr 14:25 compact_monitor_1_1776165931952.mp4
-rw-r--r-- 1 lukas staff 2267443 14 Apr 14:30 compact_monitor_1_1776166235408.mp4
-rw-r--r-- 1 lukas staff 1637916 14 Apr 14:35 compact_monitor_1_1776166551721.mp4
-rw-r--r-- 1 lukas staff 1111434 14 Apr 14:41 compact_monitor_1_1776166862836.mp4
-rw-r--r-- 1 lukas staff 1546177 14 Apr 14:46 compact_monitor_1_1776167176709.mp4
-rw-r--r-- 1 lukas staff 466769 14 Apr 14:51 compact_monitor_1_1776167484535.mp4
-rw-r--r-- 1 lukas staff 993316 14 Apr 14:56 compact_monitor_1_1776167793776.mp4
-rw-r--r-- 1 lukas staff 2902714 14 Apr 15:01 compact_monitor_1_1776168105399.mp4
-rw-r--r-- 1 lukas staff 1279133 14 Apr 15:06 compact_monitor_1_1776168413169.mp4
-rw-r--r-- 1 lukas staff 1132592 14 Apr 15:12 compact_monitor_1_1776168722629.mp4
-rw-r--r-- 1 lukas staff 355416 14 Apr 15:17 compact_monitor_1_1776169031962.mp4
-rw-r--r-- 1 lukas staff 345697 14 Apr 15:22 compact_monitor_1_1776169337693.mp4
-rw-r--r-- 1 lukas staff 3063911 14 Apr 15:27 compact_monitor_1_1776169641353.mp4
-rw-r--r-- 1 lukas staff 5369163 14 Apr 15:32 compact_monitor_1_1776169957193.mp4
-rw-r--r-- 1 lukas staff 3605997 14 Apr 15:38 compact_monitor_1_1776170274586.mp4
-rw-r--r-- 1 lukas staff 1662201 14 Apr 15:43 compact_monitor_1_1776170596259.mp4
-rw-r--r-- 1 lukas staff 2518520 14 Apr 15:48 compact_monitor_1_1776170900299.mp4
-rw-r--r-- 1 lukas staff 2298616 14 Apr 15:53 compact_monitor_1_1776171206621.mp4
-rw-r--r-- 1 lukas staff 252208 14 Apr 15:58 compact_monitor_1_1776171511042.mp4
-rw-r--r-- 1 lukas staff 547163 14 Apr 16:03 compact_monitor_1_1776171816609.mp4
-rw-r--r-- 1 lukas staff 3548604 14 Apr 16:08 compact_monitor_1_1776172119791.mp4
-rw-r--r-- 1 lukas staff 1006390 14 Apr 16:13 compact_monitor_1_1776172427942.mp4
-rw-r--r-- 1 lukas staff 1168310 14 Apr 16:18 compact_monitor_1_1776172735350.mp4
-rw-r--r-- 1 lukas staff 2138214 14 Apr 16:24 compact_monitor_1_1776173046731.mp4
-rw-r--r-- 1 lukas staff 2138875 14 Apr 16:29 compact_monitor_1_1776173354299.mp4
-rw-r--r-- 1 lukas staff 336470 14 Apr 16:34 compact_monitor_1_1776173662610.mp4
-rw-r--r-- 1 lukas staff 330494 14 Apr 16:39 compact_monitor_1_1776173971011.mp4
-rw-r--r-- 1 lukas staff 574889 14 Apr 16:44 compact_monitor_1_1776174275028.mp4
-rw-r--r-- 1 lukas staff 450335 14 Apr 16:49 compact_monitor_1_1776174580719.mp4
-rw-r--r-- 1 lukas staff 452365 14 Apr 16:54 compact_monitor_1_1776174888498.mp4
-rw-r--r-- 1 lukas staff 499947 14 Apr 16:59 compact_monitor_1_1776175195769.mp4
-rw-r--r-- 1 lukas staff 501324 14 Apr 17:05 compact_monitor_1_1776175516084.mp4
-rw-r--r-- 1 lukas staff 1187862 14 Apr 17:10 compact_monitor_1_1776175831658.mp4
-rw-r--r-- 1 lukas staff 4276500 14 Apr 17:15 compact_monitor_1_1776176143265.mp4
-rw-r--r-- 1 lukas staff 3712128 14 Apr 17:21 compact_monitor_1_1776176471641.mp4
-rw-r--r-- 1 lukas staff 3520036 14 Apr 17:26 compact_monitor_1_1776176786477.mp4
-rw-r--r-- 1 lukas staff 4125306 14 Apr 17:31 compact_monitor_1_1776177099043.mp4
-rw-r--r-- 1 lukas staff 3547886 14 Apr 17:37 compact_monitor_1_1776177433201.mp4
-rw-r--r-- 1 lukas staff 2400891 14 Apr 17:42 compact_monitor_1_1776177752872.mp4
-rw-r--r-- 1 lukas staff 4689207 14 Apr 17:47 compact_monitor_1_1776178058207.mp4
-rw-r--r-- 1 lukas staff 1801277 14 Apr 17:53 compact_monitor_1_1776178379517.mp4
-rw-r--r-- 1 lukas staff 3259926 14 Apr 17:58 compact_monitor_1_1776178686281.mp4
-rw-r--r-- 1 lukas staff 1470635 14 Apr 18:03 compact_monitor_1_1776178992046.mp4
-rw-r--r-- 1 lukas staff 3102429 14 Apr 18:08 compact_monitor_1_1776179297527.mp4
-rw-r--r-- 1 lukas staff 223940 14 Apr 18:13 compact_monitor_1_1776179607218.mp4
-rw-r--r-- 1 lukas staff 871065 14 Apr 18:13 compact_monitor_1_1776179613012.mp4
-rw-r--r-- 1 lukas staff 1029083 14 Apr 18:18 compact_monitor_1_1776179929971.mp4
-rw-r--r-- 1 lukas staff 1117436 14 Apr 18:24 compact_monitor_1_1776180248849.mp4
-rw-r--r-- 1 lukas staff 987269 14 Apr 18:29 compact_monitor_1_1776180569996.mp4
-rw-r--r-- 1 lukas staff 896704 14 Apr 18:34 compact_monitor_1_1776180888049.mp4
-rw-r--r-- 1 lukas staff 1945946 14 Apr 18:40 compact_monitor_1_1776181202583.mp4
-rw-r--r-- 1 lukas staff 862072 14 Apr 18:45 compact_monitor_1_1776181526071.mp4
-rw-r--r-- 1 lukas staff 813756 14 Apr 18:50 compact_monitor_1_1776181848713.mp4
-rw-r--r-- 1 lukas staff 813226 14 Apr 18:56 compact_monitor_1_1776182167765.mp4
-rw-r--r-- 1 lukas staff 792289 14 Apr 19:01 compact_monitor_1_1776182486906.mp4
-rw-r--r-- 1 lukas staff 900197 14 Apr 19:06 compact_monitor_1_1776182803477.mp4
-rw-r--r-- 1 lukas staff 903090 14 Apr 19:12 compact_monitor_1_1776183124102.mp4
-rw-r--r-- 1 lukas staff 821885 14 Apr 19:17 compact_monitor_1_1776183446647.mp4
-rw-r--r-- 1 lukas staff 827224 14 Apr 19:22 compact_monitor_1_1776183765602.mp4
-rw-r--r-- 1 lukas staff 844977 14 Apr 19:28 compact_monitor_1_1776184085319.mp4
-rw-r--r-- 1 lukas staff 4160651 15 Apr 09:59 compact_monitor_1_1776236348162.mp4
-rw-r--r-- 1 lukas staff 2257702 15 Apr 09:59 compact_monitor_1_1776236355103.mp4
-rw-r--r-- 1 lukas staff 803789 14 Apr 09:34 compact_monitor_2_1776148467123.mp4
-rw-r--r-- 1 lukas staff 846598 14 Apr 09:39 compact_monitor_2_1776148769344.mp4
-rw-r--r-- 1 lukas staff 380187 14 Apr 09:44 compact_monitor_2_1776149072222.mp4
-rw-r--r-- 1 lukas staff 4330357 14 Apr 09:49 compact_monitor_2_1776149375411.mp4
-rw-r--r-- 1 lukas staff 5979630 14 Apr 09:54 compact_monitor_2_1776149684838.mp4
-rw-r--r-- 1 lukas staff 5685863 14 Apr 10:00 compact_monitor_2_1776149997069.mp4
-rw-r--r-- 1 lukas staff 1817789 14 Apr 10:05 compact_monitor_2_1776150308175.mp4
-rw-r--r-- 1 lukas staff 3734598 14 Apr 10:10 compact_monitor_2_1776150613826.mp4
-rw-r--r-- 1 lukas staff 7824075 14 Apr 10:15 compact_monitor_2_1776150920663.mp4
-rw-r--r-- 1 lukas staff 6299436 14 Apr 10:20 compact_monitor_2_1776151228707.mp4
-rw-r--r-- 1 lukas staff 3269154 14 Apr 10:25 compact_monitor_2_1776151537695.mp4
-rw-r--r-- 1 lukas staff 9004762 14 Apr 10:30 compact_monitor_2_1776151844100.mp4
-rw-r--r-- 1 lukas staff 4710671 14 Apr 10:35 compact_monitor_2_1776152152089.mp4
-rw-r--r-- 1 lukas staff 11173604 14 Apr 10:41 compact_monitor_2_1776152458959.mp4
-rw-r--r-- 1 lukas staff 6761014 14 Apr 10:46 compact_monitor_2_1776152773411.mp4
-rw-r--r-- 1 lukas staff 3510200 14 Apr 10:51 compact_monitor_2_1776153084189.mp4
-rw-r--r-- 1 lukas staff 5292708 14 Apr 10:56 compact_monitor_2_1776153395785.mp4
-rw-r--r-- 1 lukas staff 5487046 14 Apr 11:01 compact_monitor_2_1776153706319.mp4
-rw-r--r-- 1 lukas staff 5305685 14 Apr 11:06 compact_monitor_2_1776154014738.mp4
-rw-r--r-- 1 lukas staff 1963074 14 Apr 11:12 compact_monitor_2_1776154320980.mp4
-rw-r--r-- 1 lukas staff 2513039 14 Apr 11:17 compact_monitor_2_1776154625932.mp4
-rw-r--r-- 1 lukas staff 2532455 14 Apr 11:22 compact_monitor_2_1776154932083.mp4
-rw-r--r-- 1 lukas staff 5825408 14 Apr 11:27 compact_monitor_2_1776155240989.mp4
-rw-r--r-- 1 lukas staff 2066410 14 Apr 11:32 compact_monitor_2_1776155549265.mp4
-rw-r--r-- 1 lukas staff 3082476 14 Apr 11:37 compact_monitor_2_1776155851806.mp4
-rw-r--r-- 1 lukas staff 1587810 14 Apr 11:42 compact_monitor_2_1776156155857.mp4
-rw-r--r-- 1 lukas staff 2346718 14 Apr 11:47 compact_monitor_2_1776156460205.mp4
-rw-r--r-- 1 lukas staff 1579555 14 Apr 11:52 compact_monitor_2_1776156764898.mp4
-rw-r--r-- 1 lukas staff 5481864 14 Apr 11:57 compact_monitor_2_1776157072094.mp4
-rw-r--r-- 1 lukas staff 6527601 14 Apr 12:03 compact_monitor_2_1776157385210.mp4
-rw-r--r-- 1 lukas staff 9023055 14 Apr 12:08 compact_monitor_2_1776157705883.mp4
-rw-r--r-- 1 lukas staff 7566360 14 Apr 12:13 compact_monitor_2_1776158020136.mp4
-rw-r--r-- 1 lukas staff 8801302 14 Apr 12:19 compact_monitor_2_1776158336585.mp4
-rw-r--r-- 1 lukas staff 4139540 14 Apr 12:24 compact_monitor_2_1776158655295.mp4
-rw-r--r-- 1 lukas staff 2987994 14 Apr 12:29 compact_monitor_2_1776158968629.mp4
-rw-r--r-- 1 lukas staff 6323688 14 Apr 12:34 compact_monitor_2_1776159279327.mp4
-rw-r--r-- 1 lukas staff 2684920 14 Apr 12:40 compact_monitor_2_1776159594527.mp4
-rw-r--r-- 1 lukas staff 1646460 14 Apr 12:45 compact_monitor_2_1776159902504.mp4
-rw-r--r-- 1 lukas staff 1767063 14 Apr 12:50 compact_monitor_2_1776160206071.mp4
-rw-r--r-- 1 lukas staff 1910044 14 Apr 12:55 compact_monitor_2_1776160509646.mp4
-rw-r--r-- 1 lukas staff 5101631 14 Apr 13:00 compact_monitor_2_1776160814860.mp4
-rw-r--r-- 1 lukas staff 2487221 14 Apr 13:05 compact_monitor_2_1776161121862.mp4
-rw-r--r-- 1 lukas staff 1452868 14 Apr 13:10 compact_monitor_2_1776161425872.mp4
-rw-r--r-- 1 lukas staff 2963557 14 Apr 13:15 compact_monitor_2_1776161729470.mp4
-rw-r--r-- 1 lukas staff 984939 14 Apr 13:20 compact_monitor_2_1776162033592.mp4
-rw-r--r-- 1 lukas staff 3411829 14 Apr 13:25 compact_monitor_2_1776162337569.mp4
-rw-r--r-- 1 lukas staff 622723 14 Apr 13:30 compact_monitor_2_1776162641477.mp4
-rw-r--r-- 1 lukas staff 2472562 14 Apr 13:35 compact_monitor_2_1776162943983.mp4
-rw-r--r-- 1 lukas staff 1139489 14 Apr 13:40 compact_monitor_2_1776163247509.mp4
-rw-r--r-- 1 lukas staff 862846 14 Apr 13:45 compact_monitor_2_1776163550848.mp4
-rw-r--r-- 1 lukas staff 274959 14 Apr 13:50 compact_monitor_2_1776163854468.mp4
-rw-r--r-- 1 lukas staff 2036659 14 Apr 13:55 compact_monitor_2_1776164156817.mp4
-rw-r--r-- 1 lukas staff 6134905 14 Apr 14:01 compact_monitor_2_1776164461879.mp4
-rw-r--r-- 1 lukas staff 9022378 14 Apr 14:06 compact_monitor_2_1776164770881.mp4
-rw-r--r-- 1 lukas staff 4566763 14 Apr 14:15 compact_monitor_2_1776165320959.mp4
-rw-r--r-- 1 lukas staff 462447 14 Apr 14:20 compact_monitor_2_1776165629627.mp4
-rw-r--r-- 1 lukas staff 709149 14 Apr 14:25 compact_monitor_2_1776165933147.mp4
-rw-r--r-- 1 lukas staff 4478027 14 Apr 14:30 compact_monitor_2_1776166241146.mp4
-rw-r--r-- 1 lukas staff 7488847 14 Apr 14:36 compact_monitor_2_1776166555947.mp4
-rw-r--r-- 1 lukas staff 7883274 14 Apr 14:41 compact_monitor_2_1776166866538.mp4
-rw-r--r-- 1 lukas staff 2869256 14 Apr 14:46 compact_monitor_2_1776167179562.mp4
-rw-r--r-- 1 lukas staff 3068440 14 Apr 14:51 compact_monitor_2_1776167487518.mp4
-rw-r--r-- 1 lukas staff 1816545 14 Apr 14:56 compact_monitor_2_1776167799896.mp4
-rw-r--r-- 1 lukas staff 3180474 14 Apr 15:01 compact_monitor_2_1776168109470.mp4
-rw-r--r-- 1 lukas staff 3774140 14 Apr 15:07 compact_monitor_2_1776168415670.mp4
-rw-r--r-- 1 lukas staff 4536363 14 Apr 15:12 compact_monitor_2_1776168725137.mp4
-rw-r--r-- 1 lukas staff 2387221 14 Apr 15:17 compact_monitor_2_1776169033283.mp4
-rw-r--r-- 1 lukas staff 2605350 14 Apr 15:22 compact_monitor_2_1776169338888.mp4
-rw-r--r-- 1 lukas staff 6906038 14 Apr 15:27 compact_monitor_2_1776169645977.mp4
-rw-r--r-- 1 lukas staff 5738495 14 Apr 15:32 compact_monitor_2_1776169965047.mp4
-rw-r--r-- 1 lukas staff 5595644 14 Apr 15:38 compact_monitor_2_1776170281359.mp4
-rw-r--r-- 1 lukas staff 584749 14 Apr 15:43 compact_monitor_2_1776170598047.mp4
-rw-r--r-- 1 lukas staff 2633541 14 Apr 15:48 compact_monitor_2_1776170903735.mp4
-rw-r--r-- 1 lukas staff 770182 14 Apr 15:53 compact_monitor_2_1776171208825.mp4
-rw-r--r-- 1 lukas staff 1658362 14 Apr 15:58 compact_monitor_2_1776171512473.mp4
-rw-r--r-- 1 lukas staff 295793 14 Apr 16:03 compact_monitor_2_1776171817959.mp4
-rw-r--r-- 1 lukas staff 3540965 14 Apr 16:08 compact_monitor_2_1776172123631.mp4
-rw-r--r-- 1 lukas staff 3589660 14 Apr 16:13 compact_monitor_2_1776172430586.mp4
-rw-r--r-- 1 lukas staff 4735044 14 Apr 16:19 compact_monitor_2_1776172739210.mp4
-rw-r--r-- 1 lukas staff 4951644 14 Apr 16:24 compact_monitor_2_1776173049122.mp4
-rw-r--r-- 1 lukas staff 5939102 14 Apr 16:29 compact_monitor_2_1776173357170.mp4
-rw-r--r-- 1 lukas staff 2549744 14 Apr 16:34 compact_monitor_2_1776173665142.mp4
-rw-r--r-- 1 lukas staff 996149 14 Apr 16:39 compact_monitor_2_1776173972456.mp4
-rw-r--r-- 1 lukas staff 2663346 14 Apr 16:44 compact_monitor_2_1776174276676.mp4
-rw-r--r-- 1 lukas staff 1776844 14 Apr 16:49 compact_monitor_2_1776174582351.mp4
-rw-r--r-- 1 lukas staff 1669202 14 Apr 16:54 compact_monitor_2_1776174889930.mp4
-rw-r--r-- 1 lukas staff 5414828 14 Apr 17:00 compact_monitor_2_1776175198918.mp4
-rw-r--r-- 1 lukas staff 5727100 14 Apr 17:05 compact_monitor_2_1776175518133.mp4
-rw-r--r-- 1 lukas staff 6080220 14 Apr 17:10 compact_monitor_2_1776175835473.mp4
-rw-r--r-- 1 lukas staff 3631681 14 Apr 17:16 compact_monitor_2_1776176159421.mp4
-rw-r--r-- 1 lukas staff 1861818 14 Apr 17:21 compact_monitor_2_1776176479999.mp4
-rw-r--r-- 1 lukas staff 1471229 14 Apr 17:26 compact_monitor_2_1776176794129.mp4
-rw-r--r-- 1 lukas staff 1792667 14 Apr 17:32 compact_monitor_2_1776177119122.mp4
-rw-r--r-- 1 lukas staff 2398088 14 Apr 17:37 compact_monitor_2_1776177447361.mp4
-rw-r--r-- 1 lukas staff 1873376 14 Apr 17:42 compact_monitor_2_1776177755837.mp4
-rw-r--r-- 1 lukas staff 3686281 14 Apr 17:47 compact_monitor_2_1776178069540.mp4
-rw-r--r-- 1 lukas staff 1842517 14 Apr 17:53 compact_monitor_2_1776178382342.mp4
-rw-r--r-- 1 lukas staff 2595005 14 Apr 17:58 compact_monitor_2_1776178688999.mp4
-rw-r--r-- 1 lukas staff 3352578 14 Apr 18:03 compact_monitor_2_1776178994368.mp4
-rw-r--r-- 1 lukas staff 7474140 14 Apr 18:08 compact_monitor_2_1776179301874.mp4
-rw-r--r-- 1 lukas staff 18300640 14 Apr 18:13 compact_monitor_2_1776179614376.mp4
-rw-r--r-- 1 lukas staff 8302944 14 Apr 18:13 compact_monitor_2_1776179625270.mp4
-rw-r--r-- 1 lukas staff 27338956 14 Apr 18:19 compact_monitor_2_1776179934590.mp4
-rw-r--r-- 1 lukas staff 1061768 14 Apr 18:19 compact_monitor_2_1776179947276.mp4
-rw-r--r-- 1 lukas staff 24282145 14 Apr 18:24 compact_monitor_2_1776180254284.mp4
-rw-r--r-- 1 lukas staff 5647384 14 Apr 18:24 compact_monitor_2_1776180266890.mp4
-rw-r--r-- 1 lukas staff 32748524 14 Apr 18:29 compact_monitor_2_1776180574284.mp4
-rw-r--r-- 1 lukas staff 25769571 14 Apr 18:35 compact_monitor_2_1776180892046.mp4
-rw-r--r-- 1 lukas staff 41983533 14 Apr 18:40 compact_monitor_2_1776181207025.mp4
-rw-r--r-- 1 lukas staff 3365850 14 Apr 18:40 compact_monitor_2_1776181223864.mp4
-rw-r--r-- 1 lukas staff 40919053 14 Apr 18:45 compact_monitor_2_1776181530742.mp4
-rw-r--r-- 1 lukas staff 3870375 14 Apr 18:45 compact_monitor_2_1776181546619.mp4
-rw-r--r-- 1 lukas staff 36175005 14 Apr 18:51 compact_monitor_2_1776181853124.mp4
-rw-r--r-- 1 lukas staff 36717883 14 Apr 18:56 compact_monitor_2_1776182171990.mp4
-rw-r--r-- 1 lukas staff 27140350 14 Apr 19:01 compact_monitor_2_1776182491150.mp4
-rw-r--r-- 1 lukas staff 20914618 14 Apr 19:06 compact_monitor_2_1776182808796.mp4
-rw-r--r-- 1 lukas staff 4716229 14 Apr 19:07 compact_monitor_2_1776182820060.mp4
-rw-r--r-- 1 lukas staff 24788277 14 Apr 19:12 compact_monitor_2_1776183129006.mp4
-rw-r--r-- 1 lukas staff 7974655 14 Apr 19:12 compact_monitor_2_1776183141483.mp4
-rw-r--r-- 1 lukas staff 22872307 14 Apr 19:17 compact_monitor_2_1776183451042.mp4
-rw-r--r-- 1 lukas staff 3283631 14 Apr 19:17 compact_monitor_2_1776183462827.mp4
-rw-r--r-- 1 lukas staff 32308259 14 Apr 19:23 compact_monitor_2_1776183769519.mp4
-rw-r--r-- 1 lukas staff 2847482 14 Apr 19:23 compact_monitor_2_1776183783534.mp4
-rw-r--r-- 1 lukas staff 36823186 14 Apr 19:28 compact_monitor_2_1776184089558.mp4
-rw-r--r-- 1 lukas staff 5825352 14 Apr 19:28 compact_monitor_2_1776184104421.mp4
-rw-r--r-- 1 lukas staff 30437061 15 Apr 09:59 compact_monitor_2_1776236357169.mp4
-rw-r--r-- 1 lukas staff 4350302 15 Apr 09:59 compact_monitor_2_1776236373794.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 11:58:00] ========================================
[2026-04-18 11:58:00] Screenpipe sync starting for: 2026-04-14
[2026-04-18 11:58:00] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 11:58:04] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync
Data dir: OK (245 files, 1.0G)
[+00m04s] ▶ Copying data folder for 2026-04-14
rsync 2026-04-14/ → NAS ✗ 531 / 245 files
[2026-04-18 11:58:09] Archive DB size: 3.0G
[2026-04-18 11:58:09] Total time: 0m9s
[2026-04-18 11:58:09] Sync complete for 2026-04-14
[2026-04-18 11:58:09] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 11:59:41] ========================================
[2026-04-18 11:59:41] Screenpipe sync starting for: 2026-04-14
[2026-04-18 11:59:41] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 11:59:45] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync
Data dir: OK (245 files, 1.0G)
[+00m04s] ▶ Copying data folder for 2026-04-14
rsync 2026-04-14/ → NAS ✓ 2m07s (245 files, 1.0G)
[2026-04-18 12:01:52] Archive DB size: 3.0G
[2026-04-18 12:01:52] Total time: 2m11s
[2026-04-18 12:01:52] Sync complete for 2026-04-14
[2026-04-18 12:01:52] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 12:03:13] ========================================
[2026-04-18 12:03:13] Screenpipe sync starting for: 2026-04-14
[2026-04-18 12:03:13] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/screenpipe
Archive DB: will be created
Data dir: OK (245 files, 1.0G)
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)
Parse error near line 3: unknown database nas
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames
error here ---^
Parse error near line 4: unknown database nas
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements
error here ---^
Parse error near line 5: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events
error here ---^
Parse error near line 6: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text
error here ---^
Parse error near line 7: unknown database nas
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks
error here ---^
Parse error near line 8: unknown database nas
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings
error here ---^
Runtime error near line 9: no such database: nas
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ls /Volumes/screenpipe/
ls: /Volumes/screenpipe/: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ cd /Volumes
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 96
drwxr-xr-x 6 root wheel 192 18 Apr 11:17 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
lrwxr-xr-x 1 root wheel 1 16 Apr 15:43 Macintosh HD -> /
drwx------ 1 lukas staff 16384 11 Apr 15:46 Test
drwx------ 1 lukas staff 16384 13 Mar 10:17 Work
drwx------ 1 lukas staff 16384 17 Apr 21:29 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls -la /Volumes/screenpipe/
total 0
ls: /Volumes/screenpipe/: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ mount | grep screenpipe
//Adm1n@DXP4800PLUS-B5F8/screenpipe on /Volumes/screenpipe (smbfs, nodev, nosuid, mounted by lukas)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ umount /Volumes/screenpipe
umount: unmount(/Volumes/screenpipe): Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 12:06:45] ========================================
[2026-04-18 12:06:45] Screenpipe sync starting for: 2026-04-14
[2026-04-18 12:06:45] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/screenpipe
Archive DB: will be created
Data dir: OK (245 files, 1.0G)
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)
Parse error near line 3: unknown database nas
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames
error here ---^
Parse error near line 4: unknown database nas
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements
error here ---^
Parse error near line 5: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events
error here ---^
Parse error near line 6: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text
error here ---^
Parse error near line 7: unknown database nas
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks
error here ---^
Parse error near line 8: unknown database nas
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings
error here ---^
Runtime error near line 9: no such database: nas
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 12:06:51] ========================================
[2026-04-18 12:06:51] Screenpipe sync starting for: 2026-04-14
[2026-04-18 12:06:51] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 12:06:55] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync
Data dir: OK (245 files, 1.0G)
[+00m05s] ▶ Copying data folder for 2026-04-14
rsync 2026-04-14/ → NAS ✓ 0m04s (245 files, 1.0G)
[2026-04-18 12:07:00] Archive DB size: 3.0G
[2026-04-18 12:07:00] Total time: 0m9s
[2026-04-18 12:07:00] Sync complete for 2026-04-14
[2026-04-18 12:07:00] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15
[2026-04-18 12:07:03] ========================================
[2026-04-18 12:07:03] Screenpipe sync starting for: 2026-04-15
[2026-04-18 12:07:03] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 12:07:07] Date 2026-04-15 already has 12874 frames in archive — skipping DB sync
Data dir: OK (241 files, 2.0G)
[+00m04s] ▶ Copying data folder for 2026-04-15
rsync 2026-04-15/ → NAS ✓ 3m22s (241 files, 2.0G)
[2026-04-18 12:10:30] Archive DB size: 3.0G
[2026-04-18 12:10:30] Total time: 3m27s
[2026-04-18 12:10:30] Sync complete for 2026-04-15
[2026-04-18 12:10:30] ============...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"-rw-r--r-- 1 lukas staff 361011 17 Apr 09:53 compact_monitor_1_1776408824270.mp4\n-rw-r--r-- 1 lukas staff 3365373 17 Apr 09:59 compact_monitor_1_1776409136717.mp4\n-rw-r--r-- 1 lukas staff 2601020 17 Apr 10:04 compact_monitor_1_1776409450395.mp4\n-rw-r--r-- 1 lukas staff 3497066 17 Apr 10:09 compact_monitor_1_1776409759172.mp4\n-rw-r--r-- 1 lukas staff 1507571 17 Apr 10:14 compact_monitor_1_1776410067944.mp4\n-rw-r--r-- 1 lukas staff 943396 17 Apr 10:19 compact_monitor_1_1776410372484.mp4\n-rw-r--r-- 1 lukas staff 1225040 17 Apr 10:24 compact_monitor_1_1776410674629.mp4\n-rw-r--r-- 1 lukas staff 2224229 17 Apr 10:29 compact_monitor_1_1776410981487.mp4\n-rw-r--r-- 1 lukas staff 398291 17 Apr 10:34 compact_monitor_1_1776411298373.mp4\n-rw-r--r-- 1 lukas staff 4376235 17 Apr 10:40 compact_monitor_1_1776411601686.mp4\n-rw-r--r-- 1 lukas staff 5007720 17 Apr 10:45 compact_monitor_1_1776411923026.mp4\n-rw-r--r-- 1 lukas staff 2281319 17 Apr 10:50 compact_monitor_1_1776412242015.mp4\n-rw-r--r-- 1 lukas staff 3182872 17 Apr 10:56 compact_monitor_1_1776412560658.mp4\n-rw-r--r-- 1 lukas staff 3896056 17 Apr 11:01 compact_monitor_1_1776412881181.mp4\n-rw-r--r-- 1 lukas staff 6279582 17 Apr 11:06 compact_monitor_1_1776413192507.mp4\n-rw-r--r-- 1 lukas staff 6492126 17 Apr 11:12 compact_monitor_1_1776413508291.mp4\n-rw-r--r-- 1 lukas staff 6045038 17 Apr 11:17 compact_monitor_1_1776413848971.mp4\n-rw-r--r-- 1 lukas staff 4968033 17 Apr 11:23 compact_monitor_1_1776414180658.mp4\n-rw-r--r-- 1 lukas staff 7109088 17 Apr 11:28 compact_monitor_1_1776414513921.mp4\n-rw-r--r-- 1 lukas staff 9099339 17 Apr 11:34 compact_monitor_1_1776414839842.mp4\n-rw-r--r-- 1 lukas staff 926165 17 Apr 11:34 compact_monitor_1_1776414858793.mp4\n-rw-r--r-- 1 lukas staff 9246778 17 Apr 11:39 compact_monitor_1_1776415182593.mp4\n-rw-r--r-- 1 lukas staff 8361876 17 Apr 11:45 compact_monitor_1_1776415505403.mp4\n-rw-r--r-- 1 lukas staff 7215549 17 Apr 11:50 compact_monitor_1_1776415841776.mp4\n-rw-r--r-- 1 lukas staff 6234445 17 Apr 11:56 compact_monitor_1_1776416174658.mp4\n-rw-r--r-- 1 lukas staff 11694078 17 Apr 12:01 compact_monitor_1_1776416497484.mp4\n-rw-r--r-- 1 lukas staff 7033085 17 Apr 12:07 compact_monitor_1_1776416834587.mp4\n-rw-r--r-- 1 lukas staff 4309161 17 Apr 12:12 compact_monitor_1_1776417157754.mp4\n-rw-r--r-- 1 lukas staff 3782878 17 Apr 12:18 compact_monitor_1_1776417481425.mp4\n-rw-r--r-- 1 lukas staff 5597264 17 Apr 12:23 compact_monitor_1_1776417802134.mp4\n-rw-r--r-- 1 lukas staff 5667747 17 Apr 12:28 compact_monitor_1_1776418119908.mp4\n-rw-r--r-- 1 lukas staff 8840842 17 Apr 12:34 compact_monitor_1_1776418443506.mp4\n-rw-r--r-- 1 lukas staff 5442395 17 Apr 12:39 compact_monitor_1_1776418761701.mp4\n-rw-r--r-- 1 lukas staff 4054014 17 Apr 12:44 compact_monitor_1_1776419074083.mp4\n-rw-r--r-- 1 lukas staff 3734539 17 Apr 12:49 compact_monitor_1_1776419388949.mp4\n-rw-r--r-- 1 lukas staff 3137915 17 Apr 12:55 compact_monitor_1_1776419701686.mp4\n-rw-r--r-- 1 lukas staff 3064654 17 Apr 13:00 compact_monitor_1_1776420015547.mp4\n-rw-r--r-- 1 lukas staff 1189833 17 Apr 13:05 compact_monitor_1_1776420321592.mp4\n-rw-r--r-- 1 lukas staff 1862832 17 Apr 13:10 compact_monitor_1_1776420633887.mp4\n-rw-r--r-- 1 lukas staff 520517 17 Apr 13:15 compact_monitor_1_1776420947144.mp4\n-rw-r--r-- 1 lukas staff 790509 17 Apr 13:20 compact_monitor_1_1776421253865.mp4\n-rw-r--r-- 1 lukas staff 1155599 17 Apr 13:26 compact_monitor_1_1776421566995.mp4\n-rw-r--r-- 1 lukas staff 626836 17 Apr 13:31 compact_monitor_1_1776421884013.mp4\n-rw-r--r-- 1 lukas staff 2709758 17 Apr 13:36 compact_monitor_1_1776422194788.mp4\n-rw-r--r-- 1 lukas staff 894214 17 Apr 13:41 compact_monitor_1_1776422513565.mp4\n-rw-r--r-- 1 lukas staff 1298826 17 Apr 13:47 compact_monitor_1_1776422829105.mp4\n-rw-r--r-- 1 lukas staff 3454896 17 Apr 13:52 compact_monitor_1_1776423143916.mp4\n-rw-r--r-- 1 lukas staff 1369217 17 Apr 13:57 compact_monitor_1_1776423466196.mp4\n-rw-r--r-- 1 lukas staff 1677163 17 Apr 14:03 compact_monitor_1_1776423783420.mp4\n-rw-r--r-- 1 lukas staff 556702 17 Apr 14:08 compact_monitor_1_1776424109344.mp4\n-rw-r--r-- 1 lukas staff 1001886 17 Apr 14:13 compact_monitor_1_1776424416957.mp4\n-rw-r--r-- 1 lukas staff 1485547 17 Apr 14:18 compact_monitor_1_1776424730536.mp4\n-rw-r--r-- 1 lukas staff 935536 17 Apr 14:24 compact_monitor_1_1776425050631.mp4\n-rw-r--r-- 1 lukas staff 1119642 17 Apr 14:29 compact_monitor_1_1776425372446.mp4\n-rw-r--r-- 1 lukas staff 430883 17 Apr 14:34 compact_monitor_1_1776425690857.mp4\n-rw-r--r-- 1 lukas staff 427035 17 Apr 14:40 compact_monitor_1_1776426003278.mp4\n-rw-r--r-- 1 lukas staff 654605 17 Apr 14:45 compact_monitor_1_1776426312497.mp4\n-rw-r--r-- 1 lukas staff 440539 17 Apr 14:50 compact_monitor_1_1776426625506.mp4\n-rw-r--r-- 1 lukas staff 439802 17 Apr 14:55 compact_monitor_1_1776426939895.mp4\n-rw-r--r-- 1 lukas staff 557755 17 Apr 15:01 compact_monitor_1_1776427261945.mp4\n-rw-r--r-- 1 lukas staff 1071442 17 Apr 15:06 compact_monitor_1_1776427571985.mp4\n-rw-r--r-- 1 lukas staff 2606361 17 Apr 15:11 compact_monitor_1_1776427882803.mp4\n-rw-r--r-- 1 lukas staff 951201 17 Apr 15:16 compact_monitor_1_1776428192090.mp4\n-rw-r--r-- 1 lukas staff 322306 17 Apr 15:21 compact_monitor_1_1776428505150.mp4\n-rw-r--r-- 1 lukas staff 331163 17 Apr 15:26 compact_monitor_1_1776428811953.mp4\n-rw-r--r-- 1 lukas staff 737469 17 Apr 15:32 compact_monitor_1_1776429127526.mp4\n-rw-r--r-- 1 lukas staff 352621 17 Apr 15:37 compact_monitor_1_1776429442374.mp4\n-rw-r--r-- 1 lukas staff 444203 17 Apr 15:42 compact_monitor_1_1776429752217.mp4\n-rw-r--r-- 1 lukas staff 1407505 17 Apr 15:47 compact_monitor_1_1776430066920.mp4\n-rw-r--r-- 1 lukas staff 360974 17 Apr 15:53 compact_monitor_1_1776430376918.mp4\n-rw-r--r-- 1 lukas staff 321565 17 Apr 15:58 compact_monitor_1_1776430691588.mp4\n-rw-r--r-- 1 lukas staff 317048 17 Apr 16:03 compact_monitor_1_1776431003504.mp4\n-rw-r--r-- 1 lukas staff 321894 17 Apr 16:08 compact_monitor_1_1776431317637.mp4\n-rw-r--r-- 1 lukas staff 333513 17 Apr 16:13 compact_monitor_1_1776431629041.mp4\n-rw-r--r-- 1 lukas staff 326264 17 Apr 16:19 compact_monitor_1_1776431942238.mp4\n-rw-r--r-- 1 lukas staff 366336 17 Apr 16:24 compact_monitor_1_1776432254490.mp4\n-rw-r--r-- 1 lukas staff 327825 17 Apr 16:29 compact_monitor_1_1776432574989.mp4\n-rw-r--r-- 1 lukas staff 1048363 17 Apr 16:34 compact_monitor_1_1776432882794.mp4\n-rw-r--r-- 1 lukas staff 1668969 17 Apr 16:39 compact_monitor_1_1776433188842.mp4\n-rw-r--r-- 1 lukas staff 1283899 17 Apr 16:44 compact_monitor_1_1776433493858.mp4\n-rw-r--r-- 1 lukas staff 314118 17 Apr 16:50 compact_monitor_1_1776433800642.mp4\n-rw-r--r-- 1 lukas staff 547478 17 Apr 16:55 compact_monitor_1_1776434111371.mp4\n-rw-r--r-- 1 lukas staff 868654 17 Apr 17:00 compact_monitor_1_1776434420728.mp4\n-rw-r--r-- 1 lukas staff 885215 17 Apr 17:05 compact_monitor_1_1776434723901.mp4\n-rw-r--r-- 1 lukas staff 508905 17 Apr 17:10 compact_monitor_1_1776435038035.mp4\n-rw-r--r-- 1 lukas staff 591766 17 Apr 17:16 compact_monitor_1_1776435363044.mp4\n-rw-r--r-- 1 lukas staff 2031034 17 Apr 17:21 compact_monitor_1_1776435683729.mp4\n-rw-r--r-- 1 lukas staff 2136043 17 Apr 17:26 compact_monitor_1_1776436005076.mp4\n-rw-r--r-- 1 lukas staff 578716 17 Apr 17:32 compact_monitor_1_1776436319163.mp4\n-rw-r--r-- 1 lukas staff 1308705 17 Apr 17:37 compact_monitor_1_1776436630439.mp4\n-rw-r--r-- 1 lukas staff 958771 17 Apr 17:42 compact_monitor_1_1776436939049.mp4\n-rw-r--r-- 1 lukas staff 797771 17 Apr 17:47 compact_monitor_1_1776437247467.mp4\n-rw-r--r-- 1 lukas staff 1230186 17 Apr 17:52 compact_monitor_1_1776437554897.mp4\n-rw-r--r-- 1 lukas staff 862632 17 Apr 17:57 compact_monitor_1_1776437862465.mp4\n-rw-r--r-- 1 lukas staff 757441 17 Apr 18:02 compact_monitor_1_1776438171931.mp4\n-rw-r--r-- 1 lukas staff 686680 17 Apr 18:08 compact_monitor_1_1776438479816.mp4\n-rw-r--r-- 1 lukas staff 1078524 17 Apr 18:13 compact_monitor_1_1776438783339.mp4\n-rw-r--r-- 1 lukas staff 496616 17 Apr 18:18 compact_monitor_1_1776439090720.mp4\n-rw-r--r-- 1 lukas staff 774571 17 Apr 18:23 compact_monitor_1_1776439396975.mp4\n-rw-r--r-- 1 lukas staff 1160291 17 Apr 18:28 compact_monitor_1_1776439703924.mp4\n-rw-r--r-- 1 lukas staff 632541 17 Apr 18:34 compact_monitor_1_1776440053428.mp4\n-rw-r--r-- 1 lukas staff 3291212 17 Apr 21:05 compact_monitor_1_1776449135667.mp4\n-rw-r--r-- 1 lukas staff 768306 17 Apr 09:07 compact_monitor_2_1776406035126.mp4\n-rw-r--r-- 1 lukas staff 9277508 17 Apr 09:12 compact_monitor_2_1776406343152.mp4\n-rw-r--r-- 1 lukas staff 627114 17 Apr 09:12 compact_monitor_2_1776406349962.mp4\n-rw-r--r-- 1 lukas staff 11129246 17 Apr 09:17 compact_monitor_2_1776406653780.mp4\n-rw-r--r-- 1 lukas staff 8352174 17 Apr 09:22 compact_monitor_2_1776406964880.mp4\n-rw-r--r-- 1 lukas staff 8551960 17 Apr 09:28 compact_monitor_2_1776407277493.mp4\n-rw-r--r-- 1 lukas staff 679244 17 Apr 09:28 compact_monitor_2_1776407283693.mp4\n-rw-r--r-- 1 lukas staff 12641011 17 Apr 09:33 compact_monitor_2_1776407588804.mp4\n-rw-r--r-- 1 lukas staff 9384615 17 Apr 09:38 compact_monitor_2_1776407900099.mp4\n-rw-r--r-- 1 lukas staff 4024767 17 Apr 09:43 compact_monitor_2_1776408207652.mp4\n-rw-r--r-- 1 lukas staff 2627851 17 Apr 09:48 compact_monitor_2_1776408517311.mp4\n-rw-r--r-- 1 lukas staff 4877190 17 Apr 09:53 compact_monitor_2_1776408826734.mp4\n-rw-r--r-- 1 lukas staff 3807909 17 Apr 09:59 compact_monitor_2_1776409142638.mp4\n-rw-r--r-- 1 lukas staff 4217716 17 Apr 10:04 compact_monitor_2_1776409454184.mp4\n-rw-r--r-- 1 lukas staff 1717578 17 Apr 10:09 compact_monitor_2_1776409763153.mp4\n-rw-r--r-- 1 lukas staff 1067064 17 Apr 10:14 compact_monitor_2_1776410070480.mp4\n-rw-r--r-- 1 lukas staff 442425 17 Apr 10:19 compact_monitor_2_1776410373664.mp4\n-rw-r--r-- 1 lukas staff 444497 17 Apr 10:24 compact_monitor_2_1776410676126.mp4\n-rw-r--r-- 1 lukas staff 3670025 17 Apr 10:29 compact_monitor_2_1776410986705.mp4\n-rw-r--r-- 1 lukas staff 448939 17 Apr 10:35 compact_monitor_2_1776411299875.mp4\n-rw-r--r-- 1 lukas staff 4490377 17 Apr 10:40 compact_monitor_2_1776411611306.mp4\n-rw-r--r-- 1 lukas staff 7437798 17 Apr 10:45 compact_monitor_2_1776411929615.mp4\n-rw-r--r-- 1 lukas staff 6915447 17 Apr 10:50 compact_monitor_2_1776412245368.mp4\n-rw-r--r-- 1 lukas staff 7988703 17 Apr 10:56 compact_monitor_2_1776412568330.mp4\n-rw-r--r-- 1 lukas staff 5512416 17 Apr 11:01 compact_monitor_2_1776412886253.mp4\n-rw-r--r-- 1 lukas staff 3107875 17 Apr 11:06 compact_monitor_2_1776413199096.mp4\n-rw-r--r-- 1 lukas staff 4158550 17 Apr 11:12 compact_monitor_2_1776413529707.mp4\n-rw-r--r-- 1 lukas staff 4756064 17 Apr 11:17 compact_monitor_2_1776413863997.mp4\n-rw-r--r-- 1 lukas staff 5281060 17 Apr 11:23 compact_monitor_2_1776414194026.mp4\n-rw-r--r-- 1 lukas staff 2605046 17 Apr 11:28 compact_monitor_2_1776414528521.mp4\n-rw-r--r-- 1 lukas staff 5473302 17 Apr 11:34 compact_monitor_2_1776414861255.mp4\n-rw-r--r-- 1 lukas staff 2791759 17 Apr 11:40 compact_monitor_2_1776415194836.mp4\n-rw-r--r-- 1 lukas staff 5494699 17 Apr 11:45 compact_monitor_2_1776415523929.mp4\n-rw-r--r-- 1 lukas staff 4025150 17 Apr 11:51 compact_monitor_2_1776415859261.mp4\n-rw-r--r-- 1 lukas staff 2583684 17 Apr 11:56 compact_monitor_2_1776416187267.mp4\n-rw-r--r-- 1 lukas staff 5240195 17 Apr 12:02 compact_monitor_2_1776416514967.mp4\n-rw-r--r-- 1 lukas staff 3629687 17 Apr 12:07 compact_monitor_2_1776416846005.mp4\n-rw-r--r-- 1 lukas staff 5021721 17 Apr 12:12 compact_monitor_2_1776417172355.mp4\n-rw-r--r-- 1 lukas staff 2986447 17 Apr 12:18 compact_monitor_2_1776417492277.mp4\n-rw-r--r-- 1 lukas staff 3976942 17 Apr 12:23 compact_monitor_2_1776417810578.mp4\n-rw-r--r-- 1 lukas staff 4294715 17 Apr 12:29 compact_monitor_2_1776418132304.mp4\n-rw-r--r-- 1 lukas staff 4698998 17 Apr 12:34 compact_monitor_2_1776418452374.mp4\n-rw-r--r-- 1 lukas staff 3160886 17 Apr 12:39 compact_monitor_2_1776418768555.mp4\n-rw-r--r-- 1 lukas staff 1776908 17 Apr 12:44 compact_monitor_2_1776419082274.mp4\n-rw-r--r-- 1 lukas staff 1500725 17 Apr 12:49 compact_monitor_2_1776419394506.mp4\n-rw-r--r-- 1 lukas staff 1279602 17 Apr 12:55 compact_monitor_2_1776419709571.mp4\n-rw-r--r-- 1 lukas staff 2017894 17 Apr 13:00 compact_monitor_2_1776420018859.mp4\n-rw-r--r-- 1 lukas staff 5639690 17 Apr 13:05 compact_monitor_2_1776420324337.mp4\n-rw-r--r-- 1 lukas staff 4587635 17 Apr 13:10 compact_monitor_2_1776420636421.mp4\n-rw-r--r-- 1 lukas staff 2001162 17 Apr 13:15 compact_monitor_2_1776420949555.mp4\n-rw-r--r-- 1 lukas staff 3658362 17 Apr 13:21 compact_monitor_2_1776421256306.mp4\n-rw-r--r-- 1 lukas staff 7755716 17 Apr 13:26 compact_monitor_2_1776421570292.mp4\n-rw-r--r-- 1 lukas staff 3362766 17 Apr 13:31 compact_monitor_2_1776421886698.mp4\n-rw-r--r-- 1 lukas staff 6893513 17 Apr 13:36 compact_monitor_2_1776422197625.mp4\n-rw-r--r-- 1 lukas staff 4788146 17 Apr 13:42 compact_monitor_2_1776422516390.mp4\n-rw-r--r-- 1 lukas staff 4840848 17 Apr 13:47 compact_monitor_2_1776422832136.mp4\n-rw-r--r-- 1 lukas staff 9094075 17 Apr 13:52 compact_monitor_2_1776423148671.mp4\n-rw-r--r-- 1 lukas staff 10072846 17 Apr 13:57 compact_monitor_2_1776423469970.mp4\n-rw-r--r-- 1 lukas staff 13504297 17 Apr 14:03 compact_monitor_2_1776423787536.mp4\n-rw-r--r-- 1 lukas staff 1622612 17 Apr 14:08 compact_monitor_2_1776424110832.mp4\n-rw-r--r-- 1 lukas staff 5427700 17 Apr 14:13 compact_monitor_2_1776424419206.mp4\n-rw-r--r-- 1 lukas staff 1746789 17 Apr 14:19 compact_monitor_2_1776424736034.mp4\n-rw-r--r-- 1 lukas staff 4232204 17 Apr 14:24 compact_monitor_2_1776425054084.mp4\n-rw-r--r-- 1 lukas staff 4457408 17 Apr 14:29 compact_monitor_2_1776425375574.mp4\n-rw-r--r-- 1 lukas staff 174979 17 Apr 14:34 compact_monitor_2_1776425692307.mp4\n-rw-r--r-- 1 lukas staff 169969 17 Apr 14:40 compact_monitor_2_1776426005170.mp4\n-rw-r--r-- 1 lukas staff 2723106 17 Apr 14:45 compact_monitor_2_1776426315173.mp4\n-rw-r--r-- 1 lukas staff 3313658 17 Apr 14:50 compact_monitor_2_1776426627449.mp4\n-rw-r--r-- 1 lukas staff 4720437 17 Apr 14:55 compact_monitor_2_1776426943213.mp4\n-rw-r--r-- 1 lukas staff 3589313 17 Apr 15:01 compact_monitor_2_1776427263991.mp4\n-rw-r--r-- 1 lukas staff 6295236 17 Apr 15:06 compact_monitor_2_1776427573875.mp4\n-rw-r--r-- 1 lukas staff 3390902 17 Apr 15:11 compact_monitor_2_1776427885283.mp4\n-rw-r--r-- 1 lukas staff 1637607 17 Apr 15:16 compact_monitor_2_1776428194704.mp4\n-rw-r--r-- 1 lukas staff 1355327 17 Apr 15:21 compact_monitor_2_1776428506246.mp4\n-rw-r--r-- 1 lukas staff 4897048 17 Apr 15:27 compact_monitor_2_1776428815157.mp4\n-rw-r--r-- 1 lukas staff 4930900 17 Apr 15:32 compact_monitor_2_1776429130905.mp4\n-rw-r--r-- 1 lukas staff 2581578 17 Apr 15:37 compact_monitor_2_1776429444142.mp4\n-rw-r--r-- 1 lukas staff 4764105 17 Apr 15:42 compact_monitor_2_1776429755437.mp4\n-rw-r--r-- 1 lukas staff 4039902 17 Apr 15:47 compact_monitor_2_1776430069174.mp4\n-rw-r--r-- 1 lukas staff 4735734 17 Apr 15:53 compact_monitor_2_1776430380212.mp4\n-rw-r--r-- 1 lukas staff 2195410 17 Apr 15:58 compact_monitor_2_1776430693483.mp4\n-rw-r--r-- 1 lukas staff 1857322 17 Apr 16:03 compact_monitor_2_1776431005386.mp4\n-rw-r--r-- 1 lukas staff 3412100 17 Apr 16:08 compact_monitor_2_1776431319373.mp4\n-rw-r--r-- 1 lukas staff 6928537 17 Apr 16:13 compact_monitor_2_1776431631778.mp4\n-rw-r--r-- 1 lukas staff 4990793 17 Apr 16:19 compact_monitor_2_1776431944571.mp4\n-rw-r--r-- 1 lukas staff 8242278 17 Apr 16:24 compact_monitor_2_1776432258818.mp4\n-rw-r--r-- 1 lukas staff 451999 17 Apr 16:24 compact_monitor_2_1776432269036.mp4\n-rw-r--r-- 1 lukas staff 2978452 17 Apr 16:29 compact_monitor_2_1776432577467.mp4\n-rw-r--r-- 1 lukas staff 1248291 17 Apr 16:34 compact_monitor_2_1776432884349.mp4\n-rw-r--r-- 1 lukas staff 2963525 17 Apr 16:39 compact_monitor_2_1776433190284.mp4\n-rw-r--r-- 1 lukas staff 1958858 17 Apr 16:44 compact_monitor_2_1776433495477.mp4\n-rw-r--r-- 1 lukas staff 1656966 17 Apr 16:50 compact_monitor_2_1776433802347.mp4\n-rw-r--r-- 1 lukas staff 2813856 17 Apr 16:55 compact_monitor_2_1776434112909.mp4\n-rw-r--r-- 1 lukas staff 510112 17 Apr 17:00 compact_monitor_2_1776434422384.mp4\n-rw-r--r-- 1 lukas staff 4354386 17 Apr 17:05 compact_monitor_2_1776434725886.mp4\n-rw-r--r-- 1 lukas staff 9798615 17 Apr 17:10 compact_monitor_2_1776435041115.mp4\n-rw-r--r-- 1 lukas staff 4503179 17 Apr 17:16 compact_monitor_2_1776435368020.mp4\n-rw-r--r-- 1 lukas staff 857002 17 Apr 17:16 compact_monitor_2_1776435376040.mp4\n-rw-r--r-- 1 lukas staff 8587996 17 Apr 17:21 compact_monitor_2_1776435687051.mp4\n-rw-r--r-- 1 lukas staff 5052247 17 Apr 17:26 compact_monitor_2_1776436009787.mp4\n-rw-r--r-- 1 lukas staff 2947924 17 Apr 17:32 compact_monitor_2_1776436320877.mp4\n-rw-r--r-- 1 lukas staff 689465 17 Apr 17:37 compact_monitor_2_1776436632536.mp4\n-rw-r--r-- 1 lukas staff 1353469 17 Apr 17:42 compact_monitor_2_1776436940788.mp4\n-rw-r--r-- 1 lukas staff 870893 17 Apr 17:47 compact_monitor_2_1776437249077.mp4\n-rw-r--r-- 1 lukas staff 2653839 17 Apr 17:52 compact_monitor_2_1776437556659.mp4\n-rw-r--r-- 1 lukas staff 4310138 17 Apr 17:57 compact_monitor_2_1776437864727.mp4\n-rw-r--r-- 1 lukas staff 3683875 17 Apr 18:02 compact_monitor_2_1776438173313.mp4\n-rw-r--r-- 1 lukas staff 1916129 17 Apr 18:08 compact_monitor_2_1776438481043.mp4\n-rw-r--r-- 1 lukas staff 2349626 17 Apr 18:13 compact_monitor_2_1776438785553.mp4\n-rw-r--r-- 1 lukas staff 641202 17 Apr 18:18 compact_monitor_2_1776439092011.mp4\n-rw-r--r-- 1 lukas staff 3006319 17 Apr 18:23 compact_monitor_2_1776439398485.mp4\n-rw-r--r-- 1 lukas staff 1675776 17 Apr 18:28 compact_monitor_2_1776439705765.mp4\n-rw-r--r-- 1 lukas staff 4465225 17 Apr 18:34 compact_monitor_2_1776440055922.mp4\n-rw-r--r-- 1 lukas staff 2351472 17 Apr 21:05 compact_monitor_2_1776449140917.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ rsync -av --ignore-existing \\\n ~/.screenpipe/data/data/2026-04-14/ \\\n /Volumes/Test/screenpipe/data/2026-04-14/\nbuilding file list ... done\n./\ncompact_monitor_1_1776236348162.mp4\ncompact_monitor_1_1776236355103.mp4\ncompact_monitor_2_1776236357169.mp4\ncompact_monitor_2_1776236373794.mp4\n\nsent 41217485 bytes received 114 bytes 4338694.63 bytes/sec\ntotal size is 1085072596 speedup is 26.33\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-14\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ll\ntotal 2120256\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 .\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..\n-rw-r--r--@ 1 lukas staff 581687 14 Apr 09:34 compact_monitor_1_1776148466581.mp4\n-rw-r--r--@ 1 lukas staff 702153 14 Apr 09:39 compact_monitor_1_1776148768082.mp4\n-rw-r--r--@ 1 lukas staff 251978 14 Apr 09:44 compact_monitor_1_1776149071467.mp4\n-rw-r--r-- 1 lukas staff 1717429 14 Apr 09:49 compact_monitor_1_1776149373136.mp4\n-rw-r--r-- 1 lukas staff 3477530 14 Apr 09:54 compact_monitor_1_1776149679747.mp4\n-rw-r--r-- 1 lukas staff 4579266 14 Apr 09:59 compact_monitor_1_1776149991618.mp4\n-rw-r--r-- 1 lukas staff 2305892 14 Apr 10:05 compact_monitor_1_1776150305479.mp4\n-rw-r--r-- 1 lukas staff 2464098 14 Apr 10:10 compact_monitor_1_1776150611148.mp4\n-rw-r--r-- 1 lukas staff 2640699 14 Apr 10:15 compact_monitor_1_1776150917977.mp4\n-rw-r--r-- 1 lukas staff 2938324 14 Apr 10:20 compact_monitor_1_1776151225175.mp4\n-rw-r--r-- 1 lukas staff 5734426 14 Apr 10:25 compact_monitor_1_1776151533655.mp4\n-rw-r--r-- 1 lukas staff 711441 14 Apr 10:30 compact_monitor_1_1776151841776.mp4\n-rw-r--r-- 1 lukas staff 373214 14 Apr 10:35 compact_monitor_1_1776152149591.mp4\n-rw-r--r-- 1 lukas staff 259200 14 Apr 10:40 compact_monitor_1_1776152456802.mp4\n-rw-r--r-- 1 lukas staff 563549 14 Apr 10:46 compact_monitor_1_1776152770846.mp4\n-rw-r--r-- 1 lukas staff 1085034 14 Apr 10:51 compact_monitor_1_1776153081304.mp4\n-rw-r--r-- 1 lukas staff 5856145 14 Apr 10:56 compact_monitor_1_1776153389824.mp4\n-rw-r--r-- 1 lukas staff 3729206 14 Apr 11:01 compact_monitor_1_1776153702196.mp4\n-rw-r--r-- 1 lukas staff 1381857 14 Apr 11:06 compact_monitor_1_1776154011626.mp4\n-rw-r--r-- 1 lukas staff 590718 14 Apr 11:12 compact_monitor_1_1776154319547.mp4\n-rw-r--r-- 1 lukas staff 1306438 14 Apr 11:17 compact_monitor_1_1776154623893.mp4\n-rw-r--r-- 1 lukas staff 216930 14 Apr 11:22 compact_monitor_1_1776154930014.mp4\n-rw-r--r-- 1 lukas staff 473698 14 Apr 11:27 compact_monitor_1_1776155238144.mp4\n-rw-r--r-- 1 lukas staff 3051314 14 Apr 11:32 compact_monitor_1_1776155547239.mp4\n-rw-r--r-- 1 lukas staff 253380 14 Apr 11:37 compact_monitor_1_1776155850943.mp4\n-rw-r--r-- 1 lukas staff 258154 14 Apr 11:42 compact_monitor_1_1776156154229.mp4\n-rw-r--r-- 1 lukas staff 962893 14 Apr 11:47 compact_monitor_1_1776156458244.mp4\n-rw-r--r-- 1 lukas staff 1806149 14 Apr 11:52 compact_monitor_1_1776156762972.mp4\n-rw-r--r-- 1 lukas staff 2280711 14 Apr 11:57 compact_monitor_1_1776157067935.mp4\n-rw-r--r-- 1 lukas staff 1779777 14 Apr 12:03 compact_monitor_1_1776157380235.mp4\n-rw-r--r-- 1 lukas staff 792745 14 Apr 12:08 compact_monitor_1_1776157700511.mp4\n-rw-r--r-- 1 lukas staff 290618 14 Apr 12:13 compact_monitor_1_1776158016840.mp4\n-rw-r--r-- 1 lukas staff 572761 14 Apr 12:18 compact_monitor_1_1776158333836.mp4\n-rw-r--r-- 1 lukas staff 200419 14 Apr 12:24 compact_monitor_1_1776158651565.mp4\n-rw-r--r-- 1 lukas staff 190795 14 Apr 12:29 compact_monitor_1_1776158966333.mp4\n-rw-r--r-- 1 lukas staff 2126277 14 Apr 12:34 compact_monitor_1_1776159274939.mp4\n-rw-r--r-- 1 lukas staff 3747860 14 Apr 12:39 compact_monitor_1_1776159588710.mp4\n-rw-r--r-- 1 lukas staff 2152422 14 Apr 12:45 compact_monitor_1_1776159900733.mp4\n-rw-r--r-- 1 lukas staff 709258 14 Apr 12:50 compact_monitor_1_1776160204634.mp4\n-rw-r--r-- 1 lukas staff 1158847 14 Apr 12:55 compact_monitor_1_1776160508015.mp4\n-rw-r--r-- 1 lukas staff 1813578 14 Apr 13:00 compact_monitor_1_1776160811806.mp4\n-rw-r--r-- 1 lukas staff 684607 14 Apr 13:05 compact_monitor_1_1776161119981.mp4\n-rw-r--r-- 1 lukas staff 636562 14 Apr 13:10 compact_monitor_1_1776161424648.mp4\n-rw-r--r-- 1 lukas staff 323432 14 Apr 13:15 compact_monitor_1_1776161728448.mp4\n-rw-r--r-- 1 lukas staff 294055 14 Apr 13:20 compact_monitor_1_1776162032394.mp4\n-rw-r--r-- 1 lukas staff 296941 14 Apr 13:25 compact_monitor_1_1776162336175.mp4\n-rw-r--r-- 1 lukas staff 292219 14 Apr 13:30 compact_monitor_1_1776162640619.mp4\n-rw-r--r-- 1 lukas staff 293726 14 Apr 13:35 compact_monitor_1_1776162943050.mp4\n-rw-r--r-- 1 lukas staff 832989 14 Apr 13:40 compact_monitor_1_1776163246420.mp4\n-rw-r--r-- 1 lukas staff 1068134 14 Apr 13:45 compact_monitor_1_1776163549145.mp4\n-rw-r--r-- 1 lukas staff 501189 14 Apr 13:50 compact_monitor_1_1776163853383.mp4\n-rw-r--r-- 1 lukas staff 930299 14 Apr 13:55 compact_monitor_1_1776164155311.mp4\n-rw-r--r-- 1 lukas staff 2515358 14 Apr 14:01 compact_monitor_1_1776164459131.mp4\n-rw-r--r-- 1 lukas staff 1286863 14 Apr 14:06 compact_monitor_1_1776164766940.mp4\n-rw-r--r-- 1 lukas staff 1472795 14 Apr 14:15 compact_monitor_1_1776165318512.mp4\n-rw-r--r-- 1 lukas staff 439699 14 Apr 14:20 compact_monitor_1_1776165627501.mp4\n-rw-r--r-- 1 lukas staff 519424 14 Apr 14:25 compact_monitor_1_1776165931952.mp4\n-rw-r--r-- 1 lukas staff 2267443 14 Apr 14:30 compact_monitor_1_1776166235408.mp4\n-rw-r--r-- 1 lukas staff 1637916 14 Apr 14:35 compact_monitor_1_1776166551721.mp4\n-rw-r--r-- 1 lukas staff 1111434 14 Apr 14:41 compact_monitor_1_1776166862836.mp4\n-rw-r--r-- 1 lukas staff 1546177 14 Apr 14:46 compact_monitor_1_1776167176709.mp4\n-rw-r--r-- 1 lukas staff 466769 14 Apr 14:51 compact_monitor_1_1776167484535.mp4\n-rw-r--r-- 1 lukas staff 993316 14 Apr 14:56 compact_monitor_1_1776167793776.mp4\n-rw-r--r-- 1 lukas staff 2902714 14 Apr 15:01 compact_monitor_1_1776168105399.mp4\n-rw-r--r-- 1 lukas staff 1279133 14 Apr 15:06 compact_monitor_1_1776168413169.mp4\n-rw-r--r-- 1 lukas staff 1132592 14 Apr 15:12 compact_monitor_1_1776168722629.mp4\n-rw-r--r-- 1 lukas staff 355416 14 Apr 15:17 compact_monitor_1_1776169031962.mp4\n-rw-r--r-- 1 lukas staff 345697 14 Apr 15:22 compact_monitor_1_1776169337693.mp4\n-rw-r--r-- 1 lukas staff 3063911 14 Apr 15:27 compact_monitor_1_1776169641353.mp4\n-rw-r--r-- 1 lukas staff 5369163 14 Apr 15:32 compact_monitor_1_1776169957193.mp4\n-rw-r--r-- 1 lukas staff 3605997 14 Apr 15:38 compact_monitor_1_1776170274586.mp4\n-rw-r--r-- 1 lukas staff 1662201 14 Apr 15:43 compact_monitor_1_1776170596259.mp4\n-rw-r--r-- 1 lukas staff 2518520 14 Apr 15:48 compact_monitor_1_1776170900299.mp4\n-rw-r--r-- 1 lukas staff 2298616 14 Apr 15:53 compact_monitor_1_1776171206621.mp4\n-rw-r--r-- 1 lukas staff 252208 14 Apr 15:58 compact_monitor_1_1776171511042.mp4\n-rw-r--r-- 1 lukas staff 547163 14 Apr 16:03 compact_monitor_1_1776171816609.mp4\n-rw-r--r-- 1 lukas staff 3548604 14 Apr 16:08 compact_monitor_1_1776172119791.mp4\n-rw-r--r-- 1 lukas staff 1006390 14 Apr 16:13 compact_monitor_1_1776172427942.mp4\n-rw-r--r-- 1 lukas staff 1168310 14 Apr 16:18 compact_monitor_1_1776172735350.mp4\n-rw-r--r-- 1 lukas staff 2138214 14 Apr 16:24 compact_monitor_1_1776173046731.mp4\n-rw-r--r-- 1 lukas staff 2138875 14 Apr 16:29 compact_monitor_1_1776173354299.mp4\n-rw-r--r-- 1 lukas staff 336470 14 Apr 16:34 compact_monitor_1_1776173662610.mp4\n-rw-r--r-- 1 lukas staff 330494 14 Apr 16:39 compact_monitor_1_1776173971011.mp4\n-rw-r--r-- 1 lukas staff 574889 14 Apr 16:44 compact_monitor_1_1776174275028.mp4\n-rw-r--r-- 1 lukas staff 450335 14 Apr 16:49 compact_monitor_1_1776174580719.mp4\n-rw-r--r-- 1 lukas staff 452365 14 Apr 16:54 compact_monitor_1_1776174888498.mp4\n-rw-r--r-- 1 lukas staff 499947 14 Apr 16:59 compact_monitor_1_1776175195769.mp4\n-rw-r--r-- 1 lukas staff 501324 14 Apr 17:05 compact_monitor_1_1776175516084.mp4\n-rw-r--r-- 1 lukas staff 1187862 14 Apr 17:10 compact_monitor_1_1776175831658.mp4\n-rw-r--r-- 1 lukas staff 4276500 14 Apr 17:15 compact_monitor_1_1776176143265.mp4\n-rw-r--r-- 1 lukas staff 3712128 14 Apr 17:21 compact_monitor_1_1776176471641.mp4\n-rw-r--r-- 1 lukas staff 3520036 14 Apr 17:26 compact_monitor_1_1776176786477.mp4\n-rw-r--r-- 1 lukas staff 4125306 14 Apr 17:31 compact_monitor_1_1776177099043.mp4\n-rw-r--r-- 1 lukas staff 3547886 14 Apr 17:37 compact_monitor_1_1776177433201.mp4\n-rw-r--r-- 1 lukas staff 2400891 14 Apr 17:42 compact_monitor_1_1776177752872.mp4\n-rw-r--r-- 1 lukas staff 4689207 14 Apr 17:47 compact_monitor_1_1776178058207.mp4\n-rw-r--r-- 1 lukas staff 1801277 14 Apr 17:53 compact_monitor_1_1776178379517.mp4\n-rw-r--r-- 1 lukas staff 3259926 14 Apr 17:58 compact_monitor_1_1776178686281.mp4\n-rw-r--r-- 1 lukas staff 1470635 14 Apr 18:03 compact_monitor_1_1776178992046.mp4\n-rw-r--r-- 1 lukas staff 3102429 14 Apr 18:08 compact_monitor_1_1776179297527.mp4\n-rw-r--r-- 1 lukas staff 223940 14 Apr 18:13 compact_monitor_1_1776179607218.mp4\n-rw-r--r-- 1 lukas staff 871065 14 Apr 18:13 compact_monitor_1_1776179613012.mp4\n-rw-r--r-- 1 lukas staff 1029083 14 Apr 18:18 compact_monitor_1_1776179929971.mp4\n-rw-r--r-- 1 lukas staff 1117436 14 Apr 18:24 compact_monitor_1_1776180248849.mp4\n-rw-r--r-- 1 lukas staff 987269 14 Apr 18:29 compact_monitor_1_1776180569996.mp4\n-rw-r--r-- 1 lukas staff 896704 14 Apr 18:34 compact_monitor_1_1776180888049.mp4\n-rw-r--r-- 1 lukas staff 1945946 14 Apr 18:40 compact_monitor_1_1776181202583.mp4\n-rw-r--r-- 1 lukas staff 862072 14 Apr 18:45 compact_monitor_1_1776181526071.mp4\n-rw-r--r-- 1 lukas staff 813756 14 Apr 18:50 compact_monitor_1_1776181848713.mp4\n-rw-r--r-- 1 lukas staff 813226 14 Apr 18:56 compact_monitor_1_1776182167765.mp4\n-rw-r--r-- 1 lukas staff 792289 14 Apr 19:01 compact_monitor_1_1776182486906.mp4\n-rw-r--r-- 1 lukas staff 900197 14 Apr 19:06 compact_monitor_1_1776182803477.mp4\n-rw-r--r-- 1 lukas staff 903090 14 Apr 19:12 compact_monitor_1_1776183124102.mp4\n-rw-r--r-- 1 lukas staff 821885 14 Apr 19:17 compact_monitor_1_1776183446647.mp4\n-rw-r--r-- 1 lukas staff 827224 14 Apr 19:22 compact_monitor_1_1776183765602.mp4\n-rw-r--r-- 1 lukas staff 844977 14 Apr 19:28 compact_monitor_1_1776184085319.mp4\n-rw-r--r-- 1 lukas staff 4160651 15 Apr 09:59 compact_monitor_1_1776236348162.mp4\n-rw-r--r-- 1 lukas staff 2257702 15 Apr 09:59 compact_monitor_1_1776236355103.mp4\n-rw-r--r-- 1 lukas staff 803789 14 Apr 09:34 compact_monitor_2_1776148467123.mp4\n-rw-r--r-- 1 lukas staff 846598 14 Apr 09:39 compact_monitor_2_1776148769344.mp4\n-rw-r--r-- 1 lukas staff 380187 14 Apr 09:44 compact_monitor_2_1776149072222.mp4\n-rw-r--r-- 1 lukas staff 4330357 14 Apr 09:49 compact_monitor_2_1776149375411.mp4\n-rw-r--r-- 1 lukas staff 5979630 14 Apr 09:54 compact_monitor_2_1776149684838.mp4\n-rw-r--r-- 1 lukas staff 5685863 14 Apr 10:00 compact_monitor_2_1776149997069.mp4\n-rw-r--r-- 1 lukas staff 1817789 14 Apr 10:05 compact_monitor_2_1776150308175.mp4\n-rw-r--r-- 1 lukas staff 3734598 14 Apr 10:10 compact_monitor_2_1776150613826.mp4\n-rw-r--r-- 1 lukas staff 7824075 14 Apr 10:15 compact_monitor_2_1776150920663.mp4\n-rw-r--r-- 1 lukas staff 6299436 14 Apr 10:20 compact_monitor_2_1776151228707.mp4\n-rw-r--r-- 1 lukas staff 3269154 14 Apr 10:25 compact_monitor_2_1776151537695.mp4\n-rw-r--r-- 1 lukas staff 9004762 14 Apr 10:30 compact_monitor_2_1776151844100.mp4\n-rw-r--r-- 1 lukas staff 4710671 14 Apr 10:35 compact_monitor_2_1776152152089.mp4\n-rw-r--r-- 1 lukas staff 11173604 14 Apr 10:41 compact_monitor_2_1776152458959.mp4\n-rw-r--r-- 1 lukas staff 6761014 14 Apr 10:46 compact_monitor_2_1776152773411.mp4\n-rw-r--r-- 1 lukas staff 3510200 14 Apr 10:51 compact_monitor_2_1776153084189.mp4\n-rw-r--r-- 1 lukas staff 5292708 14 Apr 10:56 compact_monitor_2_1776153395785.mp4\n-rw-r--r-- 1 lukas staff 5487046 14 Apr 11:01 compact_monitor_2_1776153706319.mp4\n-rw-r--r-- 1 lukas staff 5305685 14 Apr 11:06 compact_monitor_2_1776154014738.mp4\n-rw-r--r-- 1 lukas staff 1963074 14 Apr 11:12 compact_monitor_2_1776154320980.mp4\n-rw-r--r-- 1 lukas staff 2513039 14 Apr 11:17 compact_monitor_2_1776154625932.mp4\n-rw-r--r-- 1 lukas staff 2532455 14 Apr 11:22 compact_monitor_2_1776154932083.mp4\n-rw-r--r-- 1 lukas staff 5825408 14 Apr 11:27 compact_monitor_2_1776155240989.mp4\n-rw-r--r-- 1 lukas staff 2066410 14 Apr 11:32 compact_monitor_2_1776155549265.mp4\n-rw-r--r-- 1 lukas staff 3082476 14 Apr 11:37 compact_monitor_2_1776155851806.mp4\n-rw-r--r-- 1 lukas staff 1587810 14 Apr 11:42 compact_monitor_2_1776156155857.mp4\n-rw-r--r-- 1 lukas staff 2346718 14 Apr 11:47 compact_monitor_2_1776156460205.mp4\n-rw-r--r-- 1 lukas staff 1579555 14 Apr 11:52 compact_monitor_2_1776156764898.mp4\n-rw-r--r-- 1 lukas staff 5481864 14 Apr 11:57 compact_monitor_2_1776157072094.mp4\n-rw-r--r-- 1 lukas staff 6527601 14 Apr 12:03 compact_monitor_2_1776157385210.mp4\n-rw-r--r-- 1 lukas staff 9023055 14 Apr 12:08 compact_monitor_2_1776157705883.mp4\n-rw-r--r-- 1 lukas staff 7566360 14 Apr 12:13 compact_monitor_2_1776158020136.mp4\n-rw-r--r-- 1 lukas staff 8801302 14 Apr 12:19 compact_monitor_2_1776158336585.mp4\n-rw-r--r-- 1 lukas staff 4139540 14 Apr 12:24 compact_monitor_2_1776158655295.mp4\n-rw-r--r-- 1 lukas staff 2987994 14 Apr 12:29 compact_monitor_2_1776158968629.mp4\n-rw-r--r-- 1 lukas staff 6323688 14 Apr 12:34 compact_monitor_2_1776159279327.mp4\n-rw-r--r-- 1 lukas staff 2684920 14 Apr 12:40 compact_monitor_2_1776159594527.mp4\n-rw-r--r-- 1 lukas staff 1646460 14 Apr 12:45 compact_monitor_2_1776159902504.mp4\n-rw-r--r-- 1 lukas staff 1767063 14 Apr 12:50 compact_monitor_2_1776160206071.mp4\n-rw-r--r-- 1 lukas staff 1910044 14 Apr 12:55 compact_monitor_2_1776160509646.mp4\n-rw-r--r-- 1 lukas staff 5101631 14 Apr 13:00 compact_monitor_2_1776160814860.mp4\n-rw-r--r-- 1 lukas staff 2487221 14 Apr 13:05 compact_monitor_2_1776161121862.mp4\n-rw-r--r-- 1 lukas staff 1452868 14 Apr 13:10 compact_monitor_2_1776161425872.mp4\n-rw-r--r-- 1 lukas staff 2963557 14 Apr 13:15 compact_monitor_2_1776161729470.mp4\n-rw-r--r-- 1 lukas staff 984939 14 Apr 13:20 compact_monitor_2_1776162033592.mp4\n-rw-r--r-- 1 lukas staff 3411829 14 Apr 13:25 compact_monitor_2_1776162337569.mp4\n-rw-r--r-- 1 lukas staff 622723 14 Apr 13:30 compact_monitor_2_1776162641477.mp4\n-rw-r--r-- 1 lukas staff 2472562 14 Apr 13:35 compact_monitor_2_1776162943983.mp4\n-rw-r--r-- 1 lukas staff 1139489 14 Apr 13:40 compact_monitor_2_1776163247509.mp4\n-rw-r--r-- 1 lukas staff 862846 14 Apr 13:45 compact_monitor_2_1776163550848.mp4\n-rw-r--r-- 1 lukas staff 274959 14 Apr 13:50 compact_monitor_2_1776163854468.mp4\n-rw-r--r-- 1 lukas staff 2036659 14 Apr 13:55 compact_monitor_2_1776164156817.mp4\n-rw-r--r-- 1 lukas staff 6134905 14 Apr 14:01 compact_monitor_2_1776164461879.mp4\n-rw-r--r-- 1 lukas staff 9022378 14 Apr 14:06 compact_monitor_2_1776164770881.mp4\n-rw-r--r-- 1 lukas staff 4566763 14 Apr 14:15 compact_monitor_2_1776165320959.mp4\n-rw-r--r-- 1 lukas staff 462447 14 Apr 14:20 compact_monitor_2_1776165629627.mp4\n-rw-r--r-- 1 lukas staff 709149 14 Apr 14:25 compact_monitor_2_1776165933147.mp4\n-rw-r--r-- 1 lukas staff 4478027 14 Apr 14:30 compact_monitor_2_1776166241146.mp4\n-rw-r--r-- 1 lukas staff 7488847 14 Apr 14:36 compact_monitor_2_1776166555947.mp4\n-rw-r--r-- 1 lukas staff 7883274 14 Apr 14:41 compact_monitor_2_1776166866538.mp4\n-rw-r--r-- 1 lukas staff 2869256 14 Apr 14:46 compact_monitor_2_1776167179562.mp4\n-rw-r--r-- 1 lukas staff 3068440 14 Apr 14:51 compact_monitor_2_1776167487518.mp4\n-rw-r--r-- 1 lukas staff 1816545 14 Apr 14:56 compact_monitor_2_1776167799896.mp4\n-rw-r--r-- 1 lukas staff 3180474 14 Apr 15:01 compact_monitor_2_1776168109470.mp4\n-rw-r--r-- 1 lukas staff 3774140 14 Apr 15:07 compact_monitor_2_1776168415670.mp4\n-rw-r--r-- 1 lukas staff 4536363 14 Apr 15:12 compact_monitor_2_1776168725137.mp4\n-rw-r--r-- 1 lukas staff 2387221 14 Apr 15:17 compact_monitor_2_1776169033283.mp4\n-rw-r--r-- 1 lukas staff 2605350 14 Apr 15:22 compact_monitor_2_1776169338888.mp4\n-rw-r--r-- 1 lukas staff 6906038 14 Apr 15:27 compact_monitor_2_1776169645977.mp4\n-rw-r--r-- 1 lukas staff 5738495 14 Apr 15:32 compact_monitor_2_1776169965047.mp4\n-rw-r--r-- 1 lukas staff 5595644 14 Apr 15:38 compact_monitor_2_1776170281359.mp4\n-rw-r--r-- 1 lukas staff 584749 14 Apr 15:43 compact_monitor_2_1776170598047.mp4\n-rw-r--r-- 1 lukas staff 2633541 14 Apr 15:48 compact_monitor_2_1776170903735.mp4\n-rw-r--r-- 1 lukas staff 770182 14 Apr 15:53 compact_monitor_2_1776171208825.mp4\n-rw-r--r-- 1 lukas staff 1658362 14 Apr 15:58 compact_monitor_2_1776171512473.mp4\n-rw-r--r-- 1 lukas staff 295793 14 Apr 16:03 compact_monitor_2_1776171817959.mp4\n-rw-r--r-- 1 lukas staff 3540965 14 Apr 16:08 compact_monitor_2_1776172123631.mp4\n-rw-r--r-- 1 lukas staff 3589660 14 Apr 16:13 compact_monitor_2_1776172430586.mp4\n-rw-r--r-- 1 lukas staff 4735044 14 Apr 16:19 compact_monitor_2_1776172739210.mp4\n-rw-r--r-- 1 lukas staff 4951644 14 Apr 16:24 compact_monitor_2_1776173049122.mp4\n-rw-r--r-- 1 lukas staff 5939102 14 Apr 16:29 compact_monitor_2_1776173357170.mp4\n-rw-r--r-- 1 lukas staff 2549744 14 Apr 16:34 compact_monitor_2_1776173665142.mp4\n-rw-r--r-- 1 lukas staff 996149 14 Apr 16:39 compact_monitor_2_1776173972456.mp4\n-rw-r--r-- 1 lukas staff 2663346 14 Apr 16:44 compact_monitor_2_1776174276676.mp4\n-rw-r--r-- 1 lukas staff 1776844 14 Apr 16:49 compact_monitor_2_1776174582351.mp4\n-rw-r--r-- 1 lukas staff 1669202 14 Apr 16:54 compact_monitor_2_1776174889930.mp4\n-rw-r--r-- 1 lukas staff 5414828 14 Apr 17:00 compact_monitor_2_1776175198918.mp4\n-rw-r--r-- 1 lukas staff 5727100 14 Apr 17:05 compact_monitor_2_1776175518133.mp4\n-rw-r--r-- 1 lukas staff 6080220 14 Apr 17:10 compact_monitor_2_1776175835473.mp4\n-rw-r--r-- 1 lukas staff 3631681 14 Apr 17:16 compact_monitor_2_1776176159421.mp4\n-rw-r--r-- 1 lukas staff 1861818 14 Apr 17:21 compact_monitor_2_1776176479999.mp4\n-rw-r--r-- 1 lukas staff 1471229 14 Apr 17:26 compact_monitor_2_1776176794129.mp4\n-rw-r--r-- 1 lukas staff 1792667 14 Apr 17:32 compact_monitor_2_1776177119122.mp4\n-rw-r--r-- 1 lukas staff 2398088 14 Apr 17:37 compact_monitor_2_1776177447361.mp4\n-rw-r--r-- 1 lukas staff 1873376 14 Apr 17:42 compact_monitor_2_1776177755837.mp4\n-rw-r--r-- 1 lukas staff 3686281 14 Apr 17:47 compact_monitor_2_1776178069540.mp4\n-rw-r--r-- 1 lukas staff 1842517 14 Apr 17:53 compact_monitor_2_1776178382342.mp4\n-rw-r--r-- 1 lukas staff 2595005 14 Apr 17:58 compact_monitor_2_1776178688999.mp4\n-rw-r--r-- 1 lukas staff 3352578 14 Apr 18:03 compact_monitor_2_1776178994368.mp4\n-rw-r--r-- 1 lukas staff 7474140 14 Apr 18:08 compact_monitor_2_1776179301874.mp4\n-rw-r--r-- 1 lukas staff 18300640 14 Apr 18:13 compact_monitor_2_1776179614376.mp4\n-rw-r--r-- 1 lukas staff 8302944 14 Apr 18:13 compact_monitor_2_1776179625270.mp4\n-rw-r--r-- 1 lukas staff 27338956 14 Apr 18:19 compact_monitor_2_1776179934590.mp4\n-rw-r--r-- 1 lukas staff 1061768 14 Apr 18:19 compact_monitor_2_1776179947276.mp4\n-rw-r--r-- 1 lukas staff 24282145 14 Apr 18:24 compact_monitor_2_1776180254284.mp4\n-rw-r--r-- 1 lukas staff 5647384 14 Apr 18:24 compact_monitor_2_1776180266890.mp4\n-rw-r--r-- 1 lukas staff 32748524 14 Apr 18:29 compact_monitor_2_1776180574284.mp4\n-rw-r--r-- 1 lukas staff 25769571 14 Apr 18:35 compact_monitor_2_1776180892046.mp4\n-rw-r--r-- 1 lukas staff 41983533 14 Apr 18:40 compact_monitor_2_1776181207025.mp4\n-rw-r--r-- 1 lukas staff 3365850 14 Apr 18:40 compact_monitor_2_1776181223864.mp4\n-rw-r--r-- 1 lukas staff 40919053 14 Apr 18:45 compact_monitor_2_1776181530742.mp4\n-rw-r--r-- 1 lukas staff 3870375 14 Apr 18:45 compact_monitor_2_1776181546619.mp4\n-rw-r--r-- 1 lukas staff 36175005 14 Apr 18:51 compact_monitor_2_1776181853124.mp4\n-rw-r--r-- 1 lukas staff 36717883 14 Apr 18:56 compact_monitor_2_1776182171990.mp4\n-rw-r--r-- 1 lukas staff 27140350 14 Apr 19:01 compact_monitor_2_1776182491150.mp4\n-rw-r--r-- 1 lukas staff 20914618 14 Apr 19:06 compact_monitor_2_1776182808796.mp4\n-rw-r--r-- 1 lukas staff 4716229 14 Apr 19:07 compact_monitor_2_1776182820060.mp4\n-rw-r--r-- 1 lukas staff 24788277 14 Apr 19:12 compact_monitor_2_1776183129006.mp4\n-rw-r--r-- 1 lukas staff 7974655 14 Apr 19:12 compact_monitor_2_1776183141483.mp4\n-rw-r--r-- 1 lukas staff 22872307 14 Apr 19:17 compact_monitor_2_1776183451042.mp4\n-rw-r--r-- 1 lukas staff 3283631 14 Apr 19:17 compact_monitor_2_1776183462827.mp4\n-rw-r--r-- 1 lukas staff 32308259 14 Apr 19:23 compact_monitor_2_1776183769519.mp4\n-rw-r--r-- 1 lukas staff 2847482 14 Apr 19:23 compact_monitor_2_1776183783534.mp4\n-rw-r--r-- 1 lukas staff 36823186 14 Apr 19:28 compact_monitor_2_1776184089558.mp4\n-rw-r--r-- 1 lukas staff 5825352 14 Apr 19:28 compact_monitor_2_1776184104421.mp4\n-rw-r--r-- 1 lukas staff 30437061 15 Apr 09:59 compact_monitor_2_1776236357169.mp4\n-rw-r--r-- 1 lukas staff 4350302 15 Apr 09:59 compact_monitor_2_1776236373794.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 11:58:00] ========================================\n[2026-04-18 11:58:00] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 11:58:00] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 11:58:04] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✗ 531 / 245 files\n\n[2026-04-18 11:58:09] Archive DB size: 3.0G\n[2026-04-18 11:58:09] Total time: 0m9s\n[2026-04-18 11:58:09] Sync complete for 2026-04-14\n[2026-04-18 11:58:09] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 11:59:41] ========================================\n[2026-04-18 11:59:41] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 11:59:41] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 11:59:45] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✓ 2m07s (245 files, 1.0G)\n\n[2026-04-18 12:01:52] Archive DB size: 3.0G\n[2026-04-18 12:01:52] Total time: 2m11s\n[2026-04-18 12:01:52] Sync complete for 2026-04-14\n[2026-04-18 12:01:52] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:03:13] ========================================\n[2026-04-18 12:03:13] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:03:13] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: will be created\n Data dir: OK (245 files, 1.0G)\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)\nParse error near line 3: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames \n error here ---^\nParse error near line 4: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements \n error here ---^\nParse error near line 5: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events \n error here ---^\nParse error near line 6: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text \n error here ---^\nParse error near line 7: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks\n error here ---^\nParse error near line 8: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings \n error here ---^\nRuntime error near line 9: no such database: nas\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ls /Volumes/screenpipe/\nls: /Volumes/screenpipe/: Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ cd /Volumes \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll\ntotal 96\ndrwxr-xr-x 6 root wheel 192 18 Apr 11:17 .\ndrwxr-xr-x 20 root wheel 640 4 Aug 2024 ..\nlrwxr-xr-x 1 root wheel 1 16 Apr 15:43 Macintosh HD -> /\ndrwx------ 1 lukas staff 16384 11 Apr 15:46 Test\ndrwx------ 1 lukas staff 16384 13 Mar 10:17 Work\ndrwx------ 1 lukas staff 16384 17 Apr 21:29 screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls -la /Volumes/screenpipe/\ntotal 0\nls: /Volumes/screenpipe/: Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ mount | grep screenpipe\n//Adm1n@DXP4800PLUS-B5F8/screenpipe on /Volumes/screenpipe (smbfs, nodev, nosuid, mounted by lukas)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ umount /Volumes/screenpipe\numount: unmount(/Volumes/screenpipe): Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:06:45] ========================================\n[2026-04-18 12:06:45] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:06:45] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: will be created\n Data dir: OK (245 files, 1.0G)\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)\nParse error near line 3: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames \n error here ---^\nParse error near line 4: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements \n error here ---^\nParse error near line 5: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events \n error here ---^\nParse error near line 6: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text \n error here ---^\nParse error near line 7: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks\n error here ---^\nParse error near line 8: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings \n error here ---^\nRuntime error near line 9: no such database: nas\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:06:51] ========================================\n[2026-04-18 12:06:51] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:06:51] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:06:55] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m05s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✓ 0m04s (245 files, 1.0G)\n\n[2026-04-18 12:07:00] Archive DB size: 3.0G\n[2026-04-18 12:07:00] Total time: 0m9s\n[2026-04-18 12:07:00] Sync complete for 2026-04-14\n[2026-04-18 12:07:00] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15\n[2026-04-18 12:07:03] ========================================\n[2026-04-18 12:07:03] Screenpipe sync starting for: 2026-04-15\n[2026-04-18 12:07:03] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:07:07] Date 2026-04-15 already has 12874 frames in archive — skipping DB sync\n Data dir: OK (241 files, 2.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-15\n rsync 2026-04-15/ → NAS ✓ 3m22s (241 files, 2.0G)\n\n[2026-04-18 12:10:30] Archive DB size: 3.0G\n[2026-04-18 12:10:30] Total time: 3m27s\n[2026-04-18 12:10:30] Sync complete for 2026-04-15\n[2026-04-18 12:10:30] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-16\n[2026-04-18 12:16:30] ========================================\n[2026-04-18 12:16:30] Screenpipe sync starting for: 2026-04-16\n[2026-04-18 12:16:30] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:16:33] Date 2026-04-16 already has 9270 frames in archive — skipping DB sync\n Data dir: OK (232 files, 799M)\n\n[+00m03s] ▶ Copying data folder for 2026-04-16\n rsync 2026-04-16/ → NAS ✓ 1m46s (232 files, 799M)\n\n[2026-04-18 12:18:20] Archive DB size: 3.0G\n[2026-04-18 12:18:20] Total time: 1m50s\n[2026-04-18 12:18:20] Sync complete for 2026-04-16\n[2026-04-18 12:18:20] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-17\n[2026-04-18 12:18:38] ========================================\n[2026-04-18 12:18:38] Screenpipe sync starting for: 2026-04-17\n[2026-04-18 12:18:38] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:18:42] Date 2026-04-17 already has 10040 frames in archive — skipping DB sync\n Data dir: OK (250 files, 671M)\n\n[+00m04s] ▶ Copying data folder for 2026-04-17\n rsync 2026-04-17/ → NAS ✓ 1m44s (250 files, 671M)\n\n[2026-04-18 12:20:26] Archive DB size: 3.0G\n[2026-04-18 12:20:26] Total time: 1m48s\n[2026-04-18 12:20:26] Sync complete for 2026-04-17\n[2026-04-18 12:20:26] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sqlite3 ~/.screenpipe/db.sqlite \\\n \"SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '%fts%';\"\nui_events_fts\nui_events_fts_data\nui_events_fts_idx\nui_events_fts_docsize\nui_events_fts_config\nelements_fts\nelements_fts_data\nelements_fts_idx\nelements_fts_docsize\nelements_fts_config\naudio_transcriptions_fts\naudio_transcriptions_fts_data\naudio_transcriptions_fts_idx\naudio_transcriptions_fts_docsize\naudio_transcriptions_fts_config\nmemories_fts\nmemories_fts_data\nmemories_fts_idx\nmemories_fts_docsize\nmemories_fts_config\nframes_fts\nframes_fts_data\nframes_fts_idx\nframes_fts_content\nframes_fts_docsize\nframes_fts_config\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sqlite3 ~/.screenpipe/db.sqlite \\\n \"SELECT name, sql FROM sqlite_master WHERE type='table' AND name='ui_events_fts';\"\nui_events_fts|CREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content,\n app_name,\n window_title,\n element_name,\n content='ui_events',\n content_rowid='id',\n tokenize='unicode61'\n)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls\nconfig.json\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-wal\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-12.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-16.0.log\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpipes\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-13.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-17.0.log\ndb.sqlite\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-09.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-14.0.log\u0000\u0000\u0000\u0000\tscreenpipe_sync.sh\ndb.sqlite-shm\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-11.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-15.0.log\u0000\u0000\u0000\u0000\tsync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ alias sp-start\nsp-start='npx screenpipe@latest record --disable-audio &'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ source ~/.zprofile\n\nPoetry could not find a pyproject.toml file in /Users/lukas/.screenpipe or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ alias sp-start \nsp-start='npx screenpipe@latest record --disable-audio --ignored-windows \"Boosteroid\"'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls ~/.screenpipe/data/\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpending-transcriptions\u0000\tscreenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll \ntotal 7614824\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 .\ndrwx------+ 91 lukas staff 2912 18 Apr 12:53 ..\n-rw-r--r--@ 1 lukas staff 8196 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 358 16 Apr 16:49 config.json\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 data\n-rw-r--r--@ 1 lukas staff 3897454592 17 Apr 21:19 db.sqlite\n-rw-r--r--@ 1 lukas staff 32768 18 Apr 13:13 db.sqlite-shm\n-rw-r--r--@ 1 lukas staff 0 17 Apr 21:19 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 15 Apr 14:53 pipes\n-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log\n-rw-r--r-- 1 lukas staff 95425 11 Apr 23:14 screenpipe.2026-04-11.0.log\n-rw-r--r-- 1 lukas staff 72332 12 Apr 23:55 screenpipe.2026-04-12.0.log\n-rw-r--r-- 1 lukas staff 71555 13 Apr 19:50 screenpipe.2026-04-13.0.log\n-rw-r--r-- 1 lukas staff 162389 14 Apr 19:31 screenpipe.2026-04-14.0.log\n-rw-r--r-- 1 lukas staff 175763 15 Apr 18:55 screenpipe.2026-04-15.0.log\n-rw-r--r-- 1 lukas staff 196994 16 Apr 20:33 screenpipe.2026-04-16.0.log\n-rw-r--r-- 1 lukas staff 208424 17 Apr 21:06 screenpipe.2026-04-17.0.log\n-rwxr-xr-x@ 1 lukas staff 14323 18 Apr 12:06 screenpipe_sync.sh\n-rw-r--r--@ 1 lukas staff 12669 18 Apr 12:20 sync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cd data\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 16\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 .\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 data\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd pending-transcriptions \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/pending-transcriptions $ ll\ntotal 0\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 .\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/pending-transcriptions $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ data\nzsh: command not found: data\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 16\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 .\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 data\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd data \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll\ntotal 40\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 .\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 252 lukas staff 8064 17 Apr 21:06 2026-04-17\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-09 \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-09 $ ll\ntotal 79400\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 .\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..\n-rw-r--r-- 1 lukas staff 2558635 9 Apr 20:04 compact_monitor_1_1775754248190.mp4\n-rw-r--r-- 1 lukas staff 5272347 9 Apr 20:09 compact_monitor_1_1775754549504.mp4\n-rw-r--r-- 1 lukas staff 951943 9 Apr 20:15 compact_monitor_1_1775754928127.mp4\n-rw-r--r-- 1 lukas staff 780343 9 Apr 20:20 compact_monitor_1_1775755253065.mp4\n-rw-r--r-- 1 lukas staff 3129755 9 Apr 20:26 compact_monitor_1_1775755561408.mp4\n-rw-r--r-- 1 lukas staff 2369134 9 Apr 20:29 compact_monitor_1_1775755764874.mp4\n-rw-r--r-- 1 lukas staff 2879527 9 Apr 20:32 compact_monitor_1_1775755951928.mp4\n-rw-r--r-- 1 lukas staff 5597115 9 Apr 20:47 compact_monitor_1_1775756847339.mp4\n-rw-r--r-- 1 lukas staff 3460978 9 Apr 21:15 compact_monitor_1_1775758509024.mp4\n-rw-r--r-- 1 lukas staff 1876809 9 Apr 21:15 compact_monitor_1_1775758515203.mp4\n-rw-r--r-- 1 lukas staff 2813430 9 Apr 21:25 compact_monitor_1_1775759143411.mp4\n-rw-r--r-- 1 lukas staff 8937177 11 Apr 14:53 compact_monitor_1_1775908431491.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-09 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll\ntotal 40\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 .\ndrwxr-xr-x 14 lukas staff 448 18 Apr 13:36 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 229 lukas staff 7328 18 Apr 13:35 2026-04-17\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:36 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ll\ntotal 5696\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:36 .\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 ..\n-rw-r--r-- 1 lukas staff 215433 18 Apr 13:33 1776508419390_m1.jpg\n-rw-r--r-- 1 lukas staff 107206 18 Apr 13:33 1776508419555_m2.jpg\n-rw-r--r-- 1 lukas staff 155997 18 Apr 13:33 1776508422128_m1.jpg\n-rw-r--r-- 1 lukas staff 244304 18 Apr 13:33 1776508428450_m1.jpg\n-rw-r--r-- 1 lukas staff 107203 18 Apr 13:33 1776508428554_m2.jpg\n-rw-r--r-- 1 lukas staff 107202 18 Apr 13:33 1776508429142_m2.jpg\n-rw-r--r-- 1 lukas staff 208296 18 Apr 13:34 1776508453522_m1.jpg\n-rw-r--r-- 1 lukas staff 107122 18 Apr 13:34 1776508453670_m2.jpg\n-rw-r--r-- 1 lukas staff 130447 18 Apr 13:34 1776508456271_m1.jpg\n-rw-r--r-- 1 lukas staff 200633 18 Apr 13:34 1776508465399_m1.jpg\n-rw-r--r-- 1 lukas staff 201006 18 Apr 13:34 1776508479214_m1.jpg\n-rw-r--r-- 1 lukas staff 107315 18 Apr 13:34 1776508479222_m2.jpg\n-rw-r--r-- 1 lukas staff 217542 18 Apr 13:35 1776508510109_m1.jpg\n-rw-r--r-- 1 lukas staff 107558 18 Apr 13:35 1776508520117_m2.jpg\n-rw-r--r-- 1 lukas staff 217529 18 Apr 13:35 1776508540416_m1.jpg\n-rw-r--r-- 1 lukas staff 107438 18 Apr 13:35 1776508550498_m2.jpg\n-rw-r--r-- 1 lukas staff 217565 18 Apr 13:36 1776508570741_m1.jpg\n-rw-r--r-- 1 lukas staff 107323 18 Apr 13:36 1776508580887_m2.jpg\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ curl -s http://localhost:3030/health | jq '{audio_status, last_audio: .last_audio_timestamp}'\n{\n \"audio_status\": \"ok\",\n \"last_audio\": \"2026-04-18T13:36:57+03:00\"\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ls ~/.screenpipe/data/\nSystem Audio (output)_2026-04-18_10-34-25.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-36-39.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-34-24.mp4\nSystem Audio (output)_2026-04-18_10-34-49.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-37-02.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-34-56.mp4\nSystem Audio (output)_2026-04-18_10-35-11.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-37-24.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-35-26.mp4\nSystem Audio (output)_2026-04-18_10-35-33.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-35-56.mp4\nSystem Audio (output)_2026-04-18_10-35-55.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpending-transcriptions\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-36-26.mp4\nSystem Audio (output)_2026-04-18_10-36-17.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.db\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-36-56.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ll\ntotal 13080\ndrwxr-xr-x 44 lukas staff 1408 18 Apr 13:37 .\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 ..\n-rw-r--r-- 1 lukas staff 215433 18 Apr 13:33 1776508419390_m1.jpg\n-rw-r--r-- 1 lukas staff 107206 18 Apr 13:33 1776508419555_m2.jpg\n-rw-r--r-- 1 lukas staff 155997 18 Apr 13:33 1776508422128_m1.jpg\n-rw-r--r-- 1 lukas staff 244304 18 Apr 13:33 1776508428450_m1.jpg\n-rw-r--r-- 1 lukas staff 107203 18 Apr 13:33 1776508428554_m2.jpg\n-rw-r--r-- 1 lukas staff 107202 18 Apr 13:33 1776508429142_m2.jpg\n-rw-r--r-- 1 lukas staff 208296 18 Apr 13:34 1776508453522_m1.jpg\n-rw-r--r-- 1 lukas staff 107122 18 Apr 13:34 1776508453670_m2.jpg\n-rw-r--r-- 1 lukas staff 130447 18 Apr 13:34 1776508456271_m1.jpg\n-rw-r--r-- 1 lukas staff 200633 18 Apr 13:34 1776508465399_m1.jpg\n-rw-r--r-- 1 lukas staff 201006 18 Apr 13:34 1776508479214_m1.jpg\n-rw-r--r-- 1 lukas staff 107315 18 Apr 13:34 1776508479222_m2.jpg\n-rw-r--r-- 1 lukas staff 217542 18 Apr 13:35 1776508510109_m1.jpg\n-rw-r--r-- 1 lukas staff 107558 18 Apr 13:35 1776508520117_m2.jpg\n-rw-r--r-- 1 lukas staff 217529 18 Apr 13:35 1776508540416_m1.jpg\n-rw-r--r-- 1 lukas staff 107438 18 Apr 13:35 1776508550498_m2.jpg\n-rw-r--r-- 1 lukas staff 217565 18 Apr 13:36 1776508570741_m1.jpg\n-rw-r--r-- 1 lukas staff 107323 18 Apr 13:36 1776508580887_m2.jpg\n-rw-r--r-- 1 lukas staff 223931 18 Apr 13:36 1776508601010_m1.jpg\n-rw-r--r-- 1 lukas staff 110527 18 Apr 13:36 1776508601828_m2.jpg\n-rw-r--r-- 1 lukas staff 220887 18 Apr 13:36 1776508601839_m1.jpg\n-rw-r--r-- 1 lukas staff 110573 18 Apr 13:36 1776508604812_m2.jpg\n-rw-r--r-- 1 lukas staff 219398 18 Apr 13:37 1776508632417_m1.jpg\n-rw-r--r-- 1 lukas staff 83219 18 Apr 13:37 1776508635039_m2.jpg\n-rw-r--r-- 1 lukas staff 219514 18 Apr 13:37 1776508638212_m1.jpg\n-rw-r--r-- 1 lukas staff 87339 18 Apr 13:37 1776508638212_m2.jpg\n-rw-r--r-- 1 lukas staff 221109 18 Apr 13:37 1776508639686_m1.jpg\n-rw-r--r-- 1 lukas staff 84740 18 Apr 13:37 1776508639725_m2.jpg\n-rw-r--r-- 1 lukas staff 224486 18 Apr 13:37 1776508640520_m1.jpg\n-rw-r--r-- 1 lukas staff 84838 18 Apr 13:37 1776508640592_m2.jpg\n-rw-r--r-- 1 lukas staff 84841 18 Apr 13:37 1776508647855_m2.jpg\n-rw-r--r-- 1 lukas staff 217131 18 Apr 13:37 1776508647864_m1.jpg\n-rw-r--r-- 1 lukas staff 223897 18 Apr 13:37 1776508651398_m1.jpg\n-rw-r--r-- 1 lukas staff 85463 18 Apr 13:37 1776508651398_m2.jpg\n-rw-r--r-- 1 lukas staff 219804 18 Apr 13:37 1776508653328_m1.jpg\n-rw-r--r-- 1 lukas staff 97034 18 Apr 13:37 1776508653420_m2.jpg\n-rw-r--r-- 1 lukas staff 82829 18 Apr 13:37 1776508659506_m2.jpg\n-rw-r--r-- 1 lukas staff 91337 18 Apr 13:37 1776508665504_m2.jpg\n-rw-r--r-- 1 lukas staff 219393 18 Apr 13:37 1776508665924_m1.jpg\n-rw-r--r-- 1 lukas staff 221275 18 Apr 13:37 1776508666761_m1.jpg\n-rw-r--r-- 1 lukas staff 88185 18 Apr 13:37 1776508666868_m2.jpg\n-rw-r--r-- 1 lukas staff 218919 18 Apr 13:37 1776508668460_m1.jpg\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll \ntotal 40\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 .\ndrwxr-xr-x 22 lukas staff 704 18 Apr 13:37 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 229 lukas staff 7328 18 Apr 13:35 2026-04-17\ndrwxr-xr-x 44 lukas staff 1408 18 Apr 13:37 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 1776\ndrwxr-xr-x 23 lukas staff 736 18 Apr 13:38 .\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:34 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:34 System Audio (output)_2026-04-18_10-34-25.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-02.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-37-46.mp4\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 data\ndrwxr-xr-x 2 lukas staff 64 18 Apr 13:36 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\n-rw-r--r-- 1 lukas staff 173278 18 Apr 13:34 soundcore AeroClip (input)_2026-04-18_10-34-24.mp4\n-rw-r--r-- 1 lukas staff 134890 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-34-56.mp4\n-rw-r--r-- 1 lukas staff 172333 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-35-26.mp4\n-rw-r--r-- 1 lukas staff 151441 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-35-56.mp4\n-rw-r--r-- 1 lukas staff 71265 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-36-26.mp4\n-rw-r--r-- 1 lukas staff 22227 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-36-56.mp4\n-rw-r--r-- 1 lukas staff 78730 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-37-26.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 2256\ndrwxr-xr-x 30 lukas staff 960 18 Apr 13:39 .\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:34 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:34 System Audio (output)_2026-04-18_10-34-25.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-02.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:39 System Audio (output)_2026-04-18_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 33475 18 Apr 13:39 System Audio (output)_2026-04-18_10-39-15.mp4\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 data\ndrwxr-xr-x 2 lukas staff 64 18 Apr 13:38 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\n-rw-r--r-- 1 lukas staff 173278 18 Apr 13:34 soundcore AeroClip (input)_2026-04-18_10-34-24.mp4\n-rw-r--r-- 1 lukas staff 134890 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-34-56.mp4\n-rw-r--r-- 1 lukas staff 172333 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-35-26.mp4\n-rw-r--r-- 1 lukas staff 151441 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-35-56.mp4\n-rw-r--r-- 1 lukas staff 71265 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-36-26.mp4\n-rw-r--r-- 1 lukas staff 22227 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-36-56.mp4\n-rw-r--r-- 1 lukas staff 78730 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-37-26.mp4\n-rw-r--r-- 1 lukas staff 54903 18 Apr 13:38 soundcore AeroClip (input)_2026-04-18_10-37-55.mp4\n-rw-r--r-- 1 lukas staff 58492 18 Apr 13:38 soundcore AeroClip (input)_2026-04-18_10-38-25.mp4\n-rw-r--r-- 1 lukas staff 64925 18 Apr 13:39 soundcore AeroClip (input)_2026-04-18_10-38-55.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ curl -s http://localhost:3030/health | jq '.pipeline'\n{\n \"avg_db_latency_ms\": 169.36220472440945,\n \"avg_ocr_latency_ms\": 0.0,\n \"capture_fps_actual\": 0.2466395779893504,\n \"frame_drop_rate\": 0.0,\n \"frames_captured\": 127,\n \"frames_db_written\": 127,\n \"frames_dropped\": 0,\n \"ocr_cache_hit_rate\": 0.0,\n \"ocr_queue_depth\": 0,\n \"pipeline_stall_count\": 0,\n \"time_to_first_frame_ms\": 1434.727,\n \"uptime_secs\": 514.921413,\n \"video_queue_depth\": 0\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $","depth":4,"value":"-rw-r--r-- 1 lukas staff 361011 17 Apr 09:53 compact_monitor_1_1776408824270.mp4\n-rw-r--r-- 1 lukas staff 3365373 17 Apr 09:59 compact_monitor_1_1776409136717.mp4\n-rw-r--r-- 1 lukas staff 2601020 17 Apr 10:04 compact_monitor_1_1776409450395.mp4\n-rw-r--r-- 1 lukas staff 3497066 17 Apr 10:09 compact_monitor_1_1776409759172.mp4\n-rw-r--r-- 1 lukas staff 1507571 17 Apr 10:14 compact_monitor_1_1776410067944.mp4\n-rw-r--r-- 1 lukas staff 943396 17 Apr 10:19 compact_monitor_1_1776410372484.mp4\n-rw-r--r-- 1 lukas staff 1225040 17 Apr 10:24 compact_monitor_1_1776410674629.mp4\n-rw-r--r-- 1 lukas staff 2224229 17 Apr 10:29 compact_monitor_1_1776410981487.mp4\n-rw-r--r-- 1 lukas staff 398291 17 Apr 10:34 compact_monitor_1_1776411298373.mp4\n-rw-r--r-- 1 lukas staff 4376235 17 Apr 10:40 compact_monitor_1_1776411601686.mp4\n-rw-r--r-- 1 lukas staff 5007720 17 Apr 10:45 compact_monitor_1_1776411923026.mp4\n-rw-r--r-- 1 lukas staff 2281319 17 Apr 10:50 compact_monitor_1_1776412242015.mp4\n-rw-r--r-- 1 lukas staff 3182872 17 Apr 10:56 compact_monitor_1_1776412560658.mp4\n-rw-r--r-- 1 lukas staff 3896056 17 Apr 11:01 compact_monitor_1_1776412881181.mp4\n-rw-r--r-- 1 lukas staff 6279582 17 Apr 11:06 compact_monitor_1_1776413192507.mp4\n-rw-r--r-- 1 lukas staff 6492126 17 Apr 11:12 compact_monitor_1_1776413508291.mp4\n-rw-r--r-- 1 lukas staff 6045038 17 Apr 11:17 compact_monitor_1_1776413848971.mp4\n-rw-r--r-- 1 lukas staff 4968033 17 Apr 11:23 compact_monitor_1_1776414180658.mp4\n-rw-r--r-- 1 lukas staff 7109088 17 Apr 11:28 compact_monitor_1_1776414513921.mp4\n-rw-r--r-- 1 lukas staff 9099339 17 Apr 11:34 compact_monitor_1_1776414839842.mp4\n-rw-r--r-- 1 lukas staff 926165 17 Apr 11:34 compact_monitor_1_1776414858793.mp4\n-rw-r--r-- 1 lukas staff 9246778 17 Apr 11:39 compact_monitor_1_1776415182593.mp4\n-rw-r--r-- 1 lukas staff 8361876 17 Apr 11:45 compact_monitor_1_1776415505403.mp4\n-rw-r--r-- 1 lukas staff 7215549 17 Apr 11:50 compact_monitor_1_1776415841776.mp4\n-rw-r--r-- 1 lukas staff 6234445 17 Apr 11:56 compact_monitor_1_1776416174658.mp4\n-rw-r--r-- 1 lukas staff 11694078 17 Apr 12:01 compact_monitor_1_1776416497484.mp4\n-rw-r--r-- 1 lukas staff 7033085 17 Apr 12:07 compact_monitor_1_1776416834587.mp4\n-rw-r--r-- 1 lukas staff 4309161 17 Apr 12:12 compact_monitor_1_1776417157754.mp4\n-rw-r--r-- 1 lukas staff 3782878 17 Apr 12:18 compact_monitor_1_1776417481425.mp4\n-rw-r--r-- 1 lukas staff 5597264 17 Apr 12:23 compact_monitor_1_1776417802134.mp4\n-rw-r--r-- 1 lukas staff 5667747 17 Apr 12:28 compact_monitor_1_1776418119908.mp4\n-rw-r--r-- 1 lukas staff 8840842 17 Apr 12:34 compact_monitor_1_1776418443506.mp4\n-rw-r--r-- 1 lukas staff 5442395 17 Apr 12:39 compact_monitor_1_1776418761701.mp4\n-rw-r--r-- 1 lukas staff 4054014 17 Apr 12:44 compact_monitor_1_1776419074083.mp4\n-rw-r--r-- 1 lukas staff 3734539 17 Apr 12:49 compact_monitor_1_1776419388949.mp4\n-rw-r--r-- 1 lukas staff 3137915 17 Apr 12:55 compact_monitor_1_1776419701686.mp4\n-rw-r--r-- 1 lukas staff 3064654 17 Apr 13:00 compact_monitor_1_1776420015547.mp4\n-rw-r--r-- 1 lukas staff 1189833 17 Apr 13:05 compact_monitor_1_1776420321592.mp4\n-rw-r--r-- 1 lukas staff 1862832 17 Apr 13:10 compact_monitor_1_1776420633887.mp4\n-rw-r--r-- 1 lukas staff 520517 17 Apr 13:15 compact_monitor_1_1776420947144.mp4\n-rw-r--r-- 1 lukas staff 790509 17 Apr 13:20 compact_monitor_1_1776421253865.mp4\n-rw-r--r-- 1 lukas staff 1155599 17 Apr 13:26 compact_monitor_1_1776421566995.mp4\n-rw-r--r-- 1 lukas staff 626836 17 Apr 13:31 compact_monitor_1_1776421884013.mp4\n-rw-r--r-- 1 lukas staff 2709758 17 Apr 13:36 compact_monitor_1_1776422194788.mp4\n-rw-r--r-- 1 lukas staff 894214 17 Apr 13:41 compact_monitor_1_1776422513565.mp4\n-rw-r--r-- 1 lukas staff 1298826 17 Apr 13:47 compact_monitor_1_1776422829105.mp4\n-rw-r--r-- 1 lukas staff 3454896 17 Apr 13:52 compact_monitor_1_1776423143916.mp4\n-rw-r--r-- 1 lukas staff 1369217 17 Apr 13:57 compact_monitor_1_1776423466196.mp4\n-rw-r--r-- 1 lukas staff 1677163 17 Apr 14:03 compact_monitor_1_1776423783420.mp4\n-rw-r--r-- 1 lukas staff 556702 17 Apr 14:08 compact_monitor_1_1776424109344.mp4\n-rw-r--r-- 1 lukas staff 1001886 17 Apr 14:13 compact_monitor_1_1776424416957.mp4\n-rw-r--r-- 1 lukas staff 1485547 17 Apr 14:18 compact_monitor_1_1776424730536.mp4\n-rw-r--r-- 1 lukas staff 935536 17 Apr 14:24 compact_monitor_1_1776425050631.mp4\n-rw-r--r-- 1 lukas staff 1119642 17 Apr 14:29 compact_monitor_1_1776425372446.mp4\n-rw-r--r-- 1 lukas staff 430883 17 Apr 14:34 compact_monitor_1_1776425690857.mp4\n-rw-r--r-- 1 lukas staff 427035 17 Apr 14:40 compact_monitor_1_1776426003278.mp4\n-rw-r--r-- 1 lukas staff 654605 17 Apr 14:45 compact_monitor_1_1776426312497.mp4\n-rw-r--r-- 1 lukas staff 440539 17 Apr 14:50 compact_monitor_1_1776426625506.mp4\n-rw-r--r-- 1 lukas staff 439802 17 Apr 14:55 compact_monitor_1_1776426939895.mp4\n-rw-r--r-- 1 lukas staff 557755 17 Apr 15:01 compact_monitor_1_1776427261945.mp4\n-rw-r--r-- 1 lukas staff 1071442 17 Apr 15:06 compact_monitor_1_1776427571985.mp4\n-rw-r--r-- 1 lukas staff 2606361 17 Apr 15:11 compact_monitor_1_1776427882803.mp4\n-rw-r--r-- 1 lukas staff 951201 17 Apr 15:16 compact_monitor_1_1776428192090.mp4\n-rw-r--r-- 1 lukas staff 322306 17 Apr 15:21 compact_monitor_1_1776428505150.mp4\n-rw-r--r-- 1 lukas staff 331163 17 Apr 15:26 compact_monitor_1_1776428811953.mp4\n-rw-r--r-- 1 lukas staff 737469 17 Apr 15:32 compact_monitor_1_1776429127526.mp4\n-rw-r--r-- 1 lukas staff 352621 17 Apr 15:37 compact_monitor_1_1776429442374.mp4\n-rw-r--r-- 1 lukas staff 444203 17 Apr 15:42 compact_monitor_1_1776429752217.mp4\n-rw-r--r-- 1 lukas staff 1407505 17 Apr 15:47 compact_monitor_1_1776430066920.mp4\n-rw-r--r-- 1 lukas staff 360974 17 Apr 15:53 compact_monitor_1_1776430376918.mp4\n-rw-r--r-- 1 lukas staff 321565 17 Apr 15:58 compact_monitor_1_1776430691588.mp4\n-rw-r--r-- 1 lukas staff 317048 17 Apr 16:03 compact_monitor_1_1776431003504.mp4\n-rw-r--r-- 1 lukas staff 321894 17 Apr 16:08 compact_monitor_1_1776431317637.mp4\n-rw-r--r-- 1 lukas staff 333513 17 Apr 16:13 compact_monitor_1_1776431629041.mp4\n-rw-r--r-- 1 lukas staff 326264 17 Apr 16:19 compact_monitor_1_1776431942238.mp4\n-rw-r--r-- 1 lukas staff 366336 17 Apr 16:24 compact_monitor_1_1776432254490.mp4\n-rw-r--r-- 1 lukas staff 327825 17 Apr 16:29 compact_monitor_1_1776432574989.mp4\n-rw-r--r-- 1 lukas staff 1048363 17 Apr 16:34 compact_monitor_1_1776432882794.mp4\n-rw-r--r-- 1 lukas staff 1668969 17 Apr 16:39 compact_monitor_1_1776433188842.mp4\n-rw-r--r-- 1 lukas staff 1283899 17 Apr 16:44 compact_monitor_1_1776433493858.mp4\n-rw-r--r-- 1 lukas staff 314118 17 Apr 16:50 compact_monitor_1_1776433800642.mp4\n-rw-r--r-- 1 lukas staff 547478 17 Apr 16:55 compact_monitor_1_1776434111371.mp4\n-rw-r--r-- 1 lukas staff 868654 17 Apr 17:00 compact_monitor_1_1776434420728.mp4\n-rw-r--r-- 1 lukas staff 885215 17 Apr 17:05 compact_monitor_1_1776434723901.mp4\n-rw-r--r-- 1 lukas staff 508905 17 Apr 17:10 compact_monitor_1_1776435038035.mp4\n-rw-r--r-- 1 lukas staff 591766 17 Apr 17:16 compact_monitor_1_1776435363044.mp4\n-rw-r--r-- 1 lukas staff 2031034 17 Apr 17:21 compact_monitor_1_1776435683729.mp4\n-rw-r--r-- 1 lukas staff 2136043 17 Apr 17:26 compact_monitor_1_1776436005076.mp4\n-rw-r--r-- 1 lukas staff 578716 17 Apr 17:32 compact_monitor_1_1776436319163.mp4\n-rw-r--r-- 1 lukas staff 1308705 17 Apr 17:37 compact_monitor_1_1776436630439.mp4\n-rw-r--r-- 1 lukas staff 958771 17 Apr 17:42 compact_monitor_1_1776436939049.mp4\n-rw-r--r-- 1 lukas staff 797771 17 Apr 17:47 compact_monitor_1_1776437247467.mp4\n-rw-r--r-- 1 lukas staff 1230186 17 Apr 17:52 compact_monitor_1_1776437554897.mp4\n-rw-r--r-- 1 lukas staff 862632 17 Apr 17:57 compact_monitor_1_1776437862465.mp4\n-rw-r--r-- 1 lukas staff 757441 17 Apr 18:02 compact_monitor_1_1776438171931.mp4\n-rw-r--r-- 1 lukas staff 686680 17 Apr 18:08 compact_monitor_1_1776438479816.mp4\n-rw-r--r-- 1 lukas staff 1078524 17 Apr 18:13 compact_monitor_1_1776438783339.mp4\n-rw-r--r-- 1 lukas staff 496616 17 Apr 18:18 compact_monitor_1_1776439090720.mp4\n-rw-r--r-- 1 lukas staff 774571 17 Apr 18:23 compact_monitor_1_1776439396975.mp4\n-rw-r--r-- 1 lukas staff 1160291 17 Apr 18:28 compact_monitor_1_1776439703924.mp4\n-rw-r--r-- 1 lukas staff 632541 17 Apr 18:34 compact_monitor_1_1776440053428.mp4\n-rw-r--r-- 1 lukas staff 3291212 17 Apr 21:05 compact_monitor_1_1776449135667.mp4\n-rw-r--r-- 1 lukas staff 768306 17 Apr 09:07 compact_monitor_2_1776406035126.mp4\n-rw-r--r-- 1 lukas staff 9277508 17 Apr 09:12 compact_monitor_2_1776406343152.mp4\n-rw-r--r-- 1 lukas staff 627114 17 Apr 09:12 compact_monitor_2_1776406349962.mp4\n-rw-r--r-- 1 lukas staff 11129246 17 Apr 09:17 compact_monitor_2_1776406653780.mp4\n-rw-r--r-- 1 lukas staff 8352174 17 Apr 09:22 compact_monitor_2_1776406964880.mp4\n-rw-r--r-- 1 lukas staff 8551960 17 Apr 09:28 compact_monitor_2_1776407277493.mp4\n-rw-r--r-- 1 lukas staff 679244 17 Apr 09:28 compact_monitor_2_1776407283693.mp4\n-rw-r--r-- 1 lukas staff 12641011 17 Apr 09:33 compact_monitor_2_1776407588804.mp4\n-rw-r--r-- 1 lukas staff 9384615 17 Apr 09:38 compact_monitor_2_1776407900099.mp4\n-rw-r--r-- 1 lukas staff 4024767 17 Apr 09:43 compact_monitor_2_1776408207652.mp4\n-rw-r--r-- 1 lukas staff 2627851 17 Apr 09:48 compact_monitor_2_1776408517311.mp4\n-rw-r--r-- 1 lukas staff 4877190 17 Apr 09:53 compact_monitor_2_1776408826734.mp4\n-rw-r--r-- 1 lukas staff 3807909 17 Apr 09:59 compact_monitor_2_1776409142638.mp4\n-rw-r--r-- 1 lukas staff 4217716 17 Apr 10:04 compact_monitor_2_1776409454184.mp4\n-rw-r--r-- 1 lukas staff 1717578 17 Apr 10:09 compact_monitor_2_1776409763153.mp4\n-rw-r--r-- 1 lukas staff 1067064 17 Apr 10:14 compact_monitor_2_1776410070480.mp4\n-rw-r--r-- 1 lukas staff 442425 17 Apr 10:19 compact_monitor_2_1776410373664.mp4\n-rw-r--r-- 1 lukas staff 444497 17 Apr 10:24 compact_monitor_2_1776410676126.mp4\n-rw-r--r-- 1 lukas staff 3670025 17 Apr 10:29 compact_monitor_2_1776410986705.mp4\n-rw-r--r-- 1 lukas staff 448939 17 Apr 10:35 compact_monitor_2_1776411299875.mp4\n-rw-r--r-- 1 lukas staff 4490377 17 Apr 10:40 compact_monitor_2_1776411611306.mp4\n-rw-r--r-- 1 lukas staff 7437798 17 Apr 10:45 compact_monitor_2_1776411929615.mp4\n-rw-r--r-- 1 lukas staff 6915447 17 Apr 10:50 compact_monitor_2_1776412245368.mp4\n-rw-r--r-- 1 lukas staff 7988703 17 Apr 10:56 compact_monitor_2_1776412568330.mp4\n-rw-r--r-- 1 lukas staff 5512416 17 Apr 11:01 compact_monitor_2_1776412886253.mp4\n-rw-r--r-- 1 lukas staff 3107875 17 Apr 11:06 compact_monitor_2_1776413199096.mp4\n-rw-r--r-- 1 lukas staff 4158550 17 Apr 11:12 compact_monitor_2_1776413529707.mp4\n-rw-r--r-- 1 lukas staff 4756064 17 Apr 11:17 compact_monitor_2_1776413863997.mp4\n-rw-r--r-- 1 lukas staff 5281060 17 Apr 11:23 compact_monitor_2_1776414194026.mp4\n-rw-r--r-- 1 lukas staff 2605046 17 Apr 11:28 compact_monitor_2_1776414528521.mp4\n-rw-r--r-- 1 lukas staff 5473302 17 Apr 11:34 compact_monitor_2_1776414861255.mp4\n-rw-r--r-- 1 lukas staff 2791759 17 Apr 11:40 compact_monitor_2_1776415194836.mp4\n-rw-r--r-- 1 lukas staff 5494699 17 Apr 11:45 compact_monitor_2_1776415523929.mp4\n-rw-r--r-- 1 lukas staff 4025150 17 Apr 11:51 compact_monitor_2_1776415859261.mp4\n-rw-r--r-- 1 lukas staff 2583684 17 Apr 11:56 compact_monitor_2_1776416187267.mp4\n-rw-r--r-- 1 lukas staff 5240195 17 Apr 12:02 compact_monitor_2_1776416514967.mp4\n-rw-r--r-- 1 lukas staff 3629687 17 Apr 12:07 compact_monitor_2_1776416846005.mp4\n-rw-r--r-- 1 lukas staff 5021721 17 Apr 12:12 compact_monitor_2_1776417172355.mp4\n-rw-r--r-- 1 lukas staff 2986447 17 Apr 12:18 compact_monitor_2_1776417492277.mp4\n-rw-r--r-- 1 lukas staff 3976942 17 Apr 12:23 compact_monitor_2_1776417810578.mp4\n-rw-r--r-- 1 lukas staff 4294715 17 Apr 12:29 compact_monitor_2_1776418132304.mp4\n-rw-r--r-- 1 lukas staff 4698998 17 Apr 12:34 compact_monitor_2_1776418452374.mp4\n-rw-r--r-- 1 lukas staff 3160886 17 Apr 12:39 compact_monitor_2_1776418768555.mp4\n-rw-r--r-- 1 lukas staff 1776908 17 Apr 12:44 compact_monitor_2_1776419082274.mp4\n-rw-r--r-- 1 lukas staff 1500725 17 Apr 12:49 compact_monitor_2_1776419394506.mp4\n-rw-r--r-- 1 lukas staff 1279602 17 Apr 12:55 compact_monitor_2_1776419709571.mp4\n-rw-r--r-- 1 lukas staff 2017894 17 Apr 13:00 compact_monitor_2_1776420018859.mp4\n-rw-r--r-- 1 lukas staff 5639690 17 Apr 13:05 compact_monitor_2_1776420324337.mp4\n-rw-r--r-- 1 lukas staff 4587635 17 Apr 13:10 compact_monitor_2_1776420636421.mp4\n-rw-r--r-- 1 lukas staff 2001162 17 Apr 13:15 compact_monitor_2_1776420949555.mp4\n-rw-r--r-- 1 lukas staff 3658362 17 Apr 13:21 compact_monitor_2_1776421256306.mp4\n-rw-r--r-- 1 lukas staff 7755716 17 Apr 13:26 compact_monitor_2_1776421570292.mp4\n-rw-r--r-- 1 lukas staff 3362766 17 Apr 13:31 compact_monitor_2_1776421886698.mp4\n-rw-r--r-- 1 lukas staff 6893513 17 Apr 13:36 compact_monitor_2_1776422197625.mp4\n-rw-r--r-- 1 lukas staff 4788146 17 Apr 13:42 compact_monitor_2_1776422516390.mp4\n-rw-r--r-- 1 lukas staff 4840848 17 Apr 13:47 compact_monitor_2_1776422832136.mp4\n-rw-r--r-- 1 lukas staff 9094075 17 Apr 13:52 compact_monitor_2_1776423148671.mp4\n-rw-r--r-- 1 lukas staff 10072846 17 Apr 13:57 compact_monitor_2_1776423469970.mp4\n-rw-r--r-- 1 lukas staff 13504297 17 Apr 14:03 compact_monitor_2_1776423787536.mp4\n-rw-r--r-- 1 lukas staff 1622612 17 Apr 14:08 compact_monitor_2_1776424110832.mp4\n-rw-r--r-- 1 lukas staff 5427700 17 Apr 14:13 compact_monitor_2_1776424419206.mp4\n-rw-r--r-- 1 lukas staff 1746789 17 Apr 14:19 compact_monitor_2_1776424736034.mp4\n-rw-r--r-- 1 lukas staff 4232204 17 Apr 14:24 compact_monitor_2_1776425054084.mp4\n-rw-r--r-- 1 lukas staff 4457408 17 Apr 14:29 compact_monitor_2_1776425375574.mp4\n-rw-r--r-- 1 lukas staff 174979 17 Apr 14:34 compact_monitor_2_1776425692307.mp4\n-rw-r--r-- 1 lukas staff 169969 17 Apr 14:40 compact_monitor_2_1776426005170.mp4\n-rw-r--r-- 1 lukas staff 2723106 17 Apr 14:45 compact_monitor_2_1776426315173.mp4\n-rw-r--r-- 1 lukas staff 3313658 17 Apr 14:50 compact_monitor_2_1776426627449.mp4\n-rw-r--r-- 1 lukas staff 4720437 17 Apr 14:55 compact_monitor_2_1776426943213.mp4\n-rw-r--r-- 1 lukas staff 3589313 17 Apr 15:01 compact_monitor_2_1776427263991.mp4\n-rw-r--r-- 1 lukas staff 6295236 17 Apr 15:06 compact_monitor_2_1776427573875.mp4\n-rw-r--r-- 1 lukas staff 3390902 17 Apr 15:11 compact_monitor_2_1776427885283.mp4\n-rw-r--r-- 1 lukas staff 1637607 17 Apr 15:16 compact_monitor_2_1776428194704.mp4\n-rw-r--r-- 1 lukas staff 1355327 17 Apr 15:21 compact_monitor_2_1776428506246.mp4\n-rw-r--r-- 1 lukas staff 4897048 17 Apr 15:27 compact_monitor_2_1776428815157.mp4\n-rw-r--r-- 1 lukas staff 4930900 17 Apr 15:32 compact_monitor_2_1776429130905.mp4\n-rw-r--r-- 1 lukas staff 2581578 17 Apr 15:37 compact_monitor_2_1776429444142.mp4\n-rw-r--r-- 1 lukas staff 4764105 17 Apr 15:42 compact_monitor_2_1776429755437.mp4\n-rw-r--r-- 1 lukas staff 4039902 17 Apr 15:47 compact_monitor_2_1776430069174.mp4\n-rw-r--r-- 1 lukas staff 4735734 17 Apr 15:53 compact_monitor_2_1776430380212.mp4\n-rw-r--r-- 1 lukas staff 2195410 17 Apr 15:58 compact_monitor_2_1776430693483.mp4\n-rw-r--r-- 1 lukas staff 1857322 17 Apr 16:03 compact_monitor_2_1776431005386.mp4\n-rw-r--r-- 1 lukas staff 3412100 17 Apr 16:08 compact_monitor_2_1776431319373.mp4\n-rw-r--r-- 1 lukas staff 6928537 17 Apr 16:13 compact_monitor_2_1776431631778.mp4\n-rw-r--r-- 1 lukas staff 4990793 17 Apr 16:19 compact_monitor_2_1776431944571.mp4\n-rw-r--r-- 1 lukas staff 8242278 17 Apr 16:24 compact_monitor_2_1776432258818.mp4\n-rw-r--r-- 1 lukas staff 451999 17 Apr 16:24 compact_monitor_2_1776432269036.mp4\n-rw-r--r-- 1 lukas staff 2978452 17 Apr 16:29 compact_monitor_2_1776432577467.mp4\n-rw-r--r-- 1 lukas staff 1248291 17 Apr 16:34 compact_monitor_2_1776432884349.mp4\n-rw-r--r-- 1 lukas staff 2963525 17 Apr 16:39 compact_monitor_2_1776433190284.mp4\n-rw-r--r-- 1 lukas staff 1958858 17 Apr 16:44 compact_monitor_2_1776433495477.mp4\n-rw-r--r-- 1 lukas staff 1656966 17 Apr 16:50 compact_monitor_2_1776433802347.mp4\n-rw-r--r-- 1 lukas staff 2813856 17 Apr 16:55 compact_monitor_2_1776434112909.mp4\n-rw-r--r-- 1 lukas staff 510112 17 Apr 17:00 compact_monitor_2_1776434422384.mp4\n-rw-r--r-- 1 lukas staff 4354386 17 Apr 17:05 compact_monitor_2_1776434725886.mp4\n-rw-r--r-- 1 lukas staff 9798615 17 Apr 17:10 compact_monitor_2_1776435041115.mp4\n-rw-r--r-- 1 lukas staff 4503179 17 Apr 17:16 compact_monitor_2_1776435368020.mp4\n-rw-r--r-- 1 lukas staff 857002 17 Apr 17:16 compact_monitor_2_1776435376040.mp4\n-rw-r--r-- 1 lukas staff 8587996 17 Apr 17:21 compact_monitor_2_1776435687051.mp4\n-rw-r--r-- 1 lukas staff 5052247 17 Apr 17:26 compact_monitor_2_1776436009787.mp4\n-rw-r--r-- 1 lukas staff 2947924 17 Apr 17:32 compact_monitor_2_1776436320877.mp4\n-rw-r--r-- 1 lukas staff 689465 17 Apr 17:37 compact_monitor_2_1776436632536.mp4\n-rw-r--r-- 1 lukas staff 1353469 17 Apr 17:42 compact_monitor_2_1776436940788.mp4\n-rw-r--r-- 1 lukas staff 870893 17 Apr 17:47 compact_monitor_2_1776437249077.mp4\n-rw-r--r-- 1 lukas staff 2653839 17 Apr 17:52 compact_monitor_2_1776437556659.mp4\n-rw-r--r-- 1 lukas staff 4310138 17 Apr 17:57 compact_monitor_2_1776437864727.mp4\n-rw-r--r-- 1 lukas staff 3683875 17 Apr 18:02 compact_monitor_2_1776438173313.mp4\n-rw-r--r-- 1 lukas staff 1916129 17 Apr 18:08 compact_monitor_2_1776438481043.mp4\n-rw-r--r-- 1 lukas staff 2349626 17 Apr 18:13 compact_monitor_2_1776438785553.mp4\n-rw-r--r-- 1 lukas staff 641202 17 Apr 18:18 compact_monitor_2_1776439092011.mp4\n-rw-r--r-- 1 lukas staff 3006319 17 Apr 18:23 compact_monitor_2_1776439398485.mp4\n-rw-r--r-- 1 lukas staff 1675776 17 Apr 18:28 compact_monitor_2_1776439705765.mp4\n-rw-r--r-- 1 lukas staff 4465225 17 Apr 18:34 compact_monitor_2_1776440055922.mp4\n-rw-r--r-- 1 lukas staff 2351472 17 Apr 21:05 compact_monitor_2_1776449140917.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ rsync -av --ignore-existing \\\n ~/.screenpipe/data/data/2026-04-14/ \\\n /Volumes/Test/screenpipe/data/2026-04-14/\nbuilding file list ... done\n./\ncompact_monitor_1_1776236348162.mp4\ncompact_monitor_1_1776236355103.mp4\ncompact_monitor_2_1776236357169.mp4\ncompact_monitor_2_1776236373794.mp4\n\nsent 41217485 bytes received 114 bytes 4338694.63 bytes/sec\ntotal size is 1085072596 speedup is 26.33\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-14\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ll\ntotal 2120256\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 .\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..\n-rw-r--r--@ 1 lukas staff 581687 14 Apr 09:34 compact_monitor_1_1776148466581.mp4\n-rw-r--r--@ 1 lukas staff 702153 14 Apr 09:39 compact_monitor_1_1776148768082.mp4\n-rw-r--r--@ 1 lukas staff 251978 14 Apr 09:44 compact_monitor_1_1776149071467.mp4\n-rw-r--r-- 1 lukas staff 1717429 14 Apr 09:49 compact_monitor_1_1776149373136.mp4\n-rw-r--r-- 1 lukas staff 3477530 14 Apr 09:54 compact_monitor_1_1776149679747.mp4\n-rw-r--r-- 1 lukas staff 4579266 14 Apr 09:59 compact_monitor_1_1776149991618.mp4\n-rw-r--r-- 1 lukas staff 2305892 14 Apr 10:05 compact_monitor_1_1776150305479.mp4\n-rw-r--r-- 1 lukas staff 2464098 14 Apr 10:10 compact_monitor_1_1776150611148.mp4\n-rw-r--r-- 1 lukas staff 2640699 14 Apr 10:15 compact_monitor_1_1776150917977.mp4\n-rw-r--r-- 1 lukas staff 2938324 14 Apr 10:20 compact_monitor_1_1776151225175.mp4\n-rw-r--r-- 1 lukas staff 5734426 14 Apr 10:25 compact_monitor_1_1776151533655.mp4\n-rw-r--r-- 1 lukas staff 711441 14 Apr 10:30 compact_monitor_1_1776151841776.mp4\n-rw-r--r-- 1 lukas staff 373214 14 Apr 10:35 compact_monitor_1_1776152149591.mp4\n-rw-r--r-- 1 lukas staff 259200 14 Apr 10:40 compact_monitor_1_1776152456802.mp4\n-rw-r--r-- 1 lukas staff 563549 14 Apr 10:46 compact_monitor_1_1776152770846.mp4\n-rw-r--r-- 1 lukas staff 1085034 14 Apr 10:51 compact_monitor_1_1776153081304.mp4\n-rw-r--r-- 1 lukas staff 5856145 14 Apr 10:56 compact_monitor_1_1776153389824.mp4\n-rw-r--r-- 1 lukas staff 3729206 14 Apr 11:01 compact_monitor_1_1776153702196.mp4\n-rw-r--r-- 1 lukas staff 1381857 14 Apr 11:06 compact_monitor_1_1776154011626.mp4\n-rw-r--r-- 1 lukas staff 590718 14 Apr 11:12 compact_monitor_1_1776154319547.mp4\n-rw-r--r-- 1 lukas staff 1306438 14 Apr 11:17 compact_monitor_1_1776154623893.mp4\n-rw-r--r-- 1 lukas staff 216930 14 Apr 11:22 compact_monitor_1_1776154930014.mp4\n-rw-r--r-- 1 lukas staff 473698 14 Apr 11:27 compact_monitor_1_1776155238144.mp4\n-rw-r--r-- 1 lukas staff 3051314 14 Apr 11:32 compact_monitor_1_1776155547239.mp4\n-rw-r--r-- 1 lukas staff 253380 14 Apr 11:37 compact_monitor_1_1776155850943.mp4\n-rw-r--r-- 1 lukas staff 258154 14 Apr 11:42 compact_monitor_1_1776156154229.mp4\n-rw-r--r-- 1 lukas staff 962893 14 Apr 11:47 compact_monitor_1_1776156458244.mp4\n-rw-r--r-- 1 lukas staff 1806149 14 Apr 11:52 compact_monitor_1_1776156762972.mp4\n-rw-r--r-- 1 lukas staff 2280711 14 Apr 11:57 compact_monitor_1_1776157067935.mp4\n-rw-r--r-- 1 lukas staff 1779777 14 Apr 12:03 compact_monitor_1_1776157380235.mp4\n-rw-r--r-- 1 lukas staff 792745 14 Apr 12:08 compact_monitor_1_1776157700511.mp4\n-rw-r--r-- 1 lukas staff 290618 14 Apr 12:13 compact_monitor_1_1776158016840.mp4\n-rw-r--r-- 1 lukas staff 572761 14 Apr 12:18 compact_monitor_1_1776158333836.mp4\n-rw-r--r-- 1 lukas staff 200419 14 Apr 12:24 compact_monitor_1_1776158651565.mp4\n-rw-r--r-- 1 lukas staff 190795 14 Apr 12:29 compact_monitor_1_1776158966333.mp4\n-rw-r--r-- 1 lukas staff 2126277 14 Apr 12:34 compact_monitor_1_1776159274939.mp4\n-rw-r--r-- 1 lukas staff 3747860 14 Apr 12:39 compact_monitor_1_1776159588710.mp4\n-rw-r--r-- 1 lukas staff 2152422 14 Apr 12:45 compact_monitor_1_1776159900733.mp4\n-rw-r--r-- 1 lukas staff 709258 14 Apr 12:50 compact_monitor_1_1776160204634.mp4\n-rw-r--r-- 1 lukas staff 1158847 14 Apr 12:55 compact_monitor_1_1776160508015.mp4\n-rw-r--r-- 1 lukas staff 1813578 14 Apr 13:00 compact_monitor_1_1776160811806.mp4\n-rw-r--r-- 1 lukas staff 684607 14 Apr 13:05 compact_monitor_1_1776161119981.mp4\n-rw-r--r-- 1 lukas staff 636562 14 Apr 13:10 compact_monitor_1_1776161424648.mp4\n-rw-r--r-- 1 lukas staff 323432 14 Apr 13:15 compact_monitor_1_1776161728448.mp4\n-rw-r--r-- 1 lukas staff 294055 14 Apr 13:20 compact_monitor_1_1776162032394.mp4\n-rw-r--r-- 1 lukas staff 296941 14 Apr 13:25 compact_monitor_1_1776162336175.mp4\n-rw-r--r-- 1 lukas staff 292219 14 Apr 13:30 compact_monitor_1_1776162640619.mp4\n-rw-r--r-- 1 lukas staff 293726 14 Apr 13:35 compact_monitor_1_1776162943050.mp4\n-rw-r--r-- 1 lukas staff 832989 14 Apr 13:40 compact_monitor_1_1776163246420.mp4\n-rw-r--r-- 1 lukas staff 1068134 14 Apr 13:45 compact_monitor_1_1776163549145.mp4\n-rw-r--r-- 1 lukas staff 501189 14 Apr 13:50 compact_monitor_1_1776163853383.mp4\n-rw-r--r-- 1 lukas staff 930299 14 Apr 13:55 compact_monitor_1_1776164155311.mp4\n-rw-r--r-- 1 lukas staff 2515358 14 Apr 14:01 compact_monitor_1_1776164459131.mp4\n-rw-r--r-- 1 lukas staff 1286863 14 Apr 14:06 compact_monitor_1_1776164766940.mp4\n-rw-r--r-- 1 lukas staff 1472795 14 Apr 14:15 compact_monitor_1_1776165318512.mp4\n-rw-r--r-- 1 lukas staff 439699 14 Apr 14:20 compact_monitor_1_1776165627501.mp4\n-rw-r--r-- 1 lukas staff 519424 14 Apr 14:25 compact_monitor_1_1776165931952.mp4\n-rw-r--r-- 1 lukas staff 2267443 14 Apr 14:30 compact_monitor_1_1776166235408.mp4\n-rw-r--r-- 1 lukas staff 1637916 14 Apr 14:35 compact_monitor_1_1776166551721.mp4\n-rw-r--r-- 1 lukas staff 1111434 14 Apr 14:41 compact_monitor_1_1776166862836.mp4\n-rw-r--r-- 1 lukas staff 1546177 14 Apr 14:46 compact_monitor_1_1776167176709.mp4\n-rw-r--r-- 1 lukas staff 466769 14 Apr 14:51 compact_monitor_1_1776167484535.mp4\n-rw-r--r-- 1 lukas staff 993316 14 Apr 14:56 compact_monitor_1_1776167793776.mp4\n-rw-r--r-- 1 lukas staff 2902714 14 Apr 15:01 compact_monitor_1_1776168105399.mp4\n-rw-r--r-- 1 lukas staff 1279133 14 Apr 15:06 compact_monitor_1_1776168413169.mp4\n-rw-r--r-- 1 lukas staff 1132592 14 Apr 15:12 compact_monitor_1_1776168722629.mp4\n-rw-r--r-- 1 lukas staff 355416 14 Apr 15:17 compact_monitor_1_1776169031962.mp4\n-rw-r--r-- 1 lukas staff 345697 14 Apr 15:22 compact_monitor_1_1776169337693.mp4\n-rw-r--r-- 1 lukas staff 3063911 14 Apr 15:27 compact_monitor_1_1776169641353.mp4\n-rw-r--r-- 1 lukas staff 5369163 14 Apr 15:32 compact_monitor_1_1776169957193.mp4\n-rw-r--r-- 1 lukas staff 3605997 14 Apr 15:38 compact_monitor_1_1776170274586.mp4\n-rw-r--r-- 1 lukas staff 1662201 14 Apr 15:43 compact_monitor_1_1776170596259.mp4\n-rw-r--r-- 1 lukas staff 2518520 14 Apr 15:48 compact_monitor_1_1776170900299.mp4\n-rw-r--r-- 1 lukas staff 2298616 14 Apr 15:53 compact_monitor_1_1776171206621.mp4\n-rw-r--r-- 1 lukas staff 252208 14 Apr 15:58 compact_monitor_1_1776171511042.mp4\n-rw-r--r-- 1 lukas staff 547163 14 Apr 16:03 compact_monitor_1_1776171816609.mp4\n-rw-r--r-- 1 lukas staff 3548604 14 Apr 16:08 compact_monitor_1_1776172119791.mp4\n-rw-r--r-- 1 lukas staff 1006390 14 Apr 16:13 compact_monitor_1_1776172427942.mp4\n-rw-r--r-- 1 lukas staff 1168310 14 Apr 16:18 compact_monitor_1_1776172735350.mp4\n-rw-r--r-- 1 lukas staff 2138214 14 Apr 16:24 compact_monitor_1_1776173046731.mp4\n-rw-r--r-- 1 lukas staff 2138875 14 Apr 16:29 compact_monitor_1_1776173354299.mp4\n-rw-r--r-- 1 lukas staff 336470 14 Apr 16:34 compact_monitor_1_1776173662610.mp4\n-rw-r--r-- 1 lukas staff 330494 14 Apr 16:39 compact_monitor_1_1776173971011.mp4\n-rw-r--r-- 1 lukas staff 574889 14 Apr 16:44 compact_monitor_1_1776174275028.mp4\n-rw-r--r-- 1 lukas staff 450335 14 Apr 16:49 compact_monitor_1_1776174580719.mp4\n-rw-r--r-- 1 lukas staff 452365 14 Apr 16:54 compact_monitor_1_1776174888498.mp4\n-rw-r--r-- 1 lukas staff 499947 14 Apr 16:59 compact_monitor_1_1776175195769.mp4\n-rw-r--r-- 1 lukas staff 501324 14 Apr 17:05 compact_monitor_1_1776175516084.mp4\n-rw-r--r-- 1 lukas staff 1187862 14 Apr 17:10 compact_monitor_1_1776175831658.mp4\n-rw-r--r-- 1 lukas staff 4276500 14 Apr 17:15 compact_monitor_1_1776176143265.mp4\n-rw-r--r-- 1 lukas staff 3712128 14 Apr 17:21 compact_monitor_1_1776176471641.mp4\n-rw-r--r-- 1 lukas staff 3520036 14 Apr 17:26 compact_monitor_1_1776176786477.mp4\n-rw-r--r-- 1 lukas staff 4125306 14 Apr 17:31 compact_monitor_1_1776177099043.mp4\n-rw-r--r-- 1 lukas staff 3547886 14 Apr 17:37 compact_monitor_1_1776177433201.mp4\n-rw-r--r-- 1 lukas staff 2400891 14 Apr 17:42 compact_monitor_1_1776177752872.mp4\n-rw-r--r-- 1 lukas staff 4689207 14 Apr 17:47 compact_monitor_1_1776178058207.mp4\n-rw-r--r-- 1 lukas staff 1801277 14 Apr 17:53 compact_monitor_1_1776178379517.mp4\n-rw-r--r-- 1 lukas staff 3259926 14 Apr 17:58 compact_monitor_1_1776178686281.mp4\n-rw-r--r-- 1 lukas staff 1470635 14 Apr 18:03 compact_monitor_1_1776178992046.mp4\n-rw-r--r-- 1 lukas staff 3102429 14 Apr 18:08 compact_monitor_1_1776179297527.mp4\n-rw-r--r-- 1 lukas staff 223940 14 Apr 18:13 compact_monitor_1_1776179607218.mp4\n-rw-r--r-- 1 lukas staff 871065 14 Apr 18:13 compact_monitor_1_1776179613012.mp4\n-rw-r--r-- 1 lukas staff 1029083 14 Apr 18:18 compact_monitor_1_1776179929971.mp4\n-rw-r--r-- 1 lukas staff 1117436 14 Apr 18:24 compact_monitor_1_1776180248849.mp4\n-rw-r--r-- 1 lukas staff 987269 14 Apr 18:29 compact_monitor_1_1776180569996.mp4\n-rw-r--r-- 1 lukas staff 896704 14 Apr 18:34 compact_monitor_1_1776180888049.mp4\n-rw-r--r-- 1 lukas staff 1945946 14 Apr 18:40 compact_monitor_1_1776181202583.mp4\n-rw-r--r-- 1 lukas staff 862072 14 Apr 18:45 compact_monitor_1_1776181526071.mp4\n-rw-r--r-- 1 lukas staff 813756 14 Apr 18:50 compact_monitor_1_1776181848713.mp4\n-rw-r--r-- 1 lukas staff 813226 14 Apr 18:56 compact_monitor_1_1776182167765.mp4\n-rw-r--r-- 1 lukas staff 792289 14 Apr 19:01 compact_monitor_1_1776182486906.mp4\n-rw-r--r-- 1 lukas staff 900197 14 Apr 19:06 compact_monitor_1_1776182803477.mp4\n-rw-r--r-- 1 lukas staff 903090 14 Apr 19:12 compact_monitor_1_1776183124102.mp4\n-rw-r--r-- 1 lukas staff 821885 14 Apr 19:17 compact_monitor_1_1776183446647.mp4\n-rw-r--r-- 1 lukas staff 827224 14 Apr 19:22 compact_monitor_1_1776183765602.mp4\n-rw-r--r-- 1 lukas staff 844977 14 Apr 19:28 compact_monitor_1_1776184085319.mp4\n-rw-r--r-- 1 lukas staff 4160651 15 Apr 09:59 compact_monitor_1_1776236348162.mp4\n-rw-r--r-- 1 lukas staff 2257702 15 Apr 09:59 compact_monitor_1_1776236355103.mp4\n-rw-r--r-- 1 lukas staff 803789 14 Apr 09:34 compact_monitor_2_1776148467123.mp4\n-rw-r--r-- 1 lukas staff 846598 14 Apr 09:39 compact_monitor_2_1776148769344.mp4\n-rw-r--r-- 1 lukas staff 380187 14 Apr 09:44 compact_monitor_2_1776149072222.mp4\n-rw-r--r-- 1 lukas staff 4330357 14 Apr 09:49 compact_monitor_2_1776149375411.mp4\n-rw-r--r-- 1 lukas staff 5979630 14 Apr 09:54 compact_monitor_2_1776149684838.mp4\n-rw-r--r-- 1 lukas staff 5685863 14 Apr 10:00 compact_monitor_2_1776149997069.mp4\n-rw-r--r-- 1 lukas staff 1817789 14 Apr 10:05 compact_monitor_2_1776150308175.mp4\n-rw-r--r-- 1 lukas staff 3734598 14 Apr 10:10 compact_monitor_2_1776150613826.mp4\n-rw-r--r-- 1 lukas staff 7824075 14 Apr 10:15 compact_monitor_2_1776150920663.mp4\n-rw-r--r-- 1 lukas staff 6299436 14 Apr 10:20 compact_monitor_2_1776151228707.mp4\n-rw-r--r-- 1 lukas staff 3269154 14 Apr 10:25 compact_monitor_2_1776151537695.mp4\n-rw-r--r-- 1 lukas staff 9004762 14 Apr 10:30 compact_monitor_2_1776151844100.mp4\n-rw-r--r-- 1 lukas staff 4710671 14 Apr 10:35 compact_monitor_2_1776152152089.mp4\n-rw-r--r-- 1 lukas staff 11173604 14 Apr 10:41 compact_monitor_2_1776152458959.mp4\n-rw-r--r-- 1 lukas staff 6761014 14 Apr 10:46 compact_monitor_2_1776152773411.mp4\n-rw-r--r-- 1 lukas staff 3510200 14 Apr 10:51 compact_monitor_2_1776153084189.mp4\n-rw-r--r-- 1 lukas staff 5292708 14 Apr 10:56 compact_monitor_2_1776153395785.mp4\n-rw-r--r-- 1 lukas staff 5487046 14 Apr 11:01 compact_monitor_2_1776153706319.mp4\n-rw-r--r-- 1 lukas staff 5305685 14 Apr 11:06 compact_monitor_2_1776154014738.mp4\n-rw-r--r-- 1 lukas staff 1963074 14 Apr 11:12 compact_monitor_2_1776154320980.mp4\n-rw-r--r-- 1 lukas staff 2513039 14 Apr 11:17 compact_monitor_2_1776154625932.mp4\n-rw-r--r-- 1 lukas staff 2532455 14 Apr 11:22 compact_monitor_2_1776154932083.mp4\n-rw-r--r-- 1 lukas staff 5825408 14 Apr 11:27 compact_monitor_2_1776155240989.mp4\n-rw-r--r-- 1 lukas staff 2066410 14 Apr 11:32 compact_monitor_2_1776155549265.mp4\n-rw-r--r-- 1 lukas staff 3082476 14 Apr 11:37 compact_monitor_2_1776155851806.mp4\n-rw-r--r-- 1 lukas staff 1587810 14 Apr 11:42 compact_monitor_2_1776156155857.mp4\n-rw-r--r-- 1 lukas staff 2346718 14 Apr 11:47 compact_monitor_2_1776156460205.mp4\n-rw-r--r-- 1 lukas staff 1579555 14 Apr 11:52 compact_monitor_2_1776156764898.mp4\n-rw-r--r-- 1 lukas staff 5481864 14 Apr 11:57 compact_monitor_2_1776157072094.mp4\n-rw-r--r-- 1 lukas staff 6527601 14 Apr 12:03 compact_monitor_2_1776157385210.mp4\n-rw-r--r-- 1 lukas staff 9023055 14 Apr 12:08 compact_monitor_2_1776157705883.mp4\n-rw-r--r-- 1 lukas staff 7566360 14 Apr 12:13 compact_monitor_2_1776158020136.mp4\n-rw-r--r-- 1 lukas staff 8801302 14 Apr 12:19 compact_monitor_2_1776158336585.mp4\n-rw-r--r-- 1 lukas staff 4139540 14 Apr 12:24 compact_monitor_2_1776158655295.mp4\n-rw-r--r-- 1 lukas staff 2987994 14 Apr 12:29 compact_monitor_2_1776158968629.mp4\n-rw-r--r-- 1 lukas staff 6323688 14 Apr 12:34 compact_monitor_2_1776159279327.mp4\n-rw-r--r-- 1 lukas staff 2684920 14 Apr 12:40 compact_monitor_2_1776159594527.mp4\n-rw-r--r-- 1 lukas staff 1646460 14 Apr 12:45 compact_monitor_2_1776159902504.mp4\n-rw-r--r-- 1 lukas staff 1767063 14 Apr 12:50 compact_monitor_2_1776160206071.mp4\n-rw-r--r-- 1 lukas staff 1910044 14 Apr 12:55 compact_monitor_2_1776160509646.mp4\n-rw-r--r-- 1 lukas staff 5101631 14 Apr 13:00 compact_monitor_2_1776160814860.mp4\n-rw-r--r-- 1 lukas staff 2487221 14 Apr 13:05 compact_monitor_2_1776161121862.mp4\n-rw-r--r-- 1 lukas staff 1452868 14 Apr 13:10 compact_monitor_2_1776161425872.mp4\n-rw-r--r-- 1 lukas staff 2963557 14 Apr 13:15 compact_monitor_2_1776161729470.mp4\n-rw-r--r-- 1 lukas staff 984939 14 Apr 13:20 compact_monitor_2_1776162033592.mp4\n-rw-r--r-- 1 lukas staff 3411829 14 Apr 13:25 compact_monitor_2_1776162337569.mp4\n-rw-r--r-- 1 lukas staff 622723 14 Apr 13:30 compact_monitor_2_1776162641477.mp4\n-rw-r--r-- 1 lukas staff 2472562 14 Apr 13:35 compact_monitor_2_1776162943983.mp4\n-rw-r--r-- 1 lukas staff 1139489 14 Apr 13:40 compact_monitor_2_1776163247509.mp4\n-rw-r--r-- 1 lukas staff 862846 14 Apr 13:45 compact_monitor_2_1776163550848.mp4\n-rw-r--r-- 1 lukas staff 274959 14 Apr 13:50 compact_monitor_2_1776163854468.mp4\n-rw-r--r-- 1 lukas staff 2036659 14 Apr 13:55 compact_monitor_2_1776164156817.mp4\n-rw-r--r-- 1 lukas staff 6134905 14 Apr 14:01 compact_monitor_2_1776164461879.mp4\n-rw-r--r-- 1 lukas staff 9022378 14 Apr 14:06 compact_monitor_2_1776164770881.mp4\n-rw-r--r-- 1 lukas staff 4566763 14 Apr 14:15 compact_monitor_2_1776165320959.mp4\n-rw-r--r-- 1 lukas staff 462447 14 Apr 14:20 compact_monitor_2_1776165629627.mp4\n-rw-r--r-- 1 lukas staff 709149 14 Apr 14:25 compact_monitor_2_1776165933147.mp4\n-rw-r--r-- 1 lukas staff 4478027 14 Apr 14:30 compact_monitor_2_1776166241146.mp4\n-rw-r--r-- 1 lukas staff 7488847 14 Apr 14:36 compact_monitor_2_1776166555947.mp4\n-rw-r--r-- 1 lukas staff 7883274 14 Apr 14:41 compact_monitor_2_1776166866538.mp4\n-rw-r--r-- 1 lukas staff 2869256 14 Apr 14:46 compact_monitor_2_1776167179562.mp4\n-rw-r--r-- 1 lukas staff 3068440 14 Apr 14:51 compact_monitor_2_1776167487518.mp4\n-rw-r--r-- 1 lukas staff 1816545 14 Apr 14:56 compact_monitor_2_1776167799896.mp4\n-rw-r--r-- 1 lukas staff 3180474 14 Apr 15:01 compact_monitor_2_1776168109470.mp4\n-rw-r--r-- 1 lukas staff 3774140 14 Apr 15:07 compact_monitor_2_1776168415670.mp4\n-rw-r--r-- 1 lukas staff 4536363 14 Apr 15:12 compact_monitor_2_1776168725137.mp4\n-rw-r--r-- 1 lukas staff 2387221 14 Apr 15:17 compact_monitor_2_1776169033283.mp4\n-rw-r--r-- 1 lukas staff 2605350 14 Apr 15:22 compact_monitor_2_1776169338888.mp4\n-rw-r--r-- 1 lukas staff 6906038 14 Apr 15:27 compact_monitor_2_1776169645977.mp4\n-rw-r--r-- 1 lukas staff 5738495 14 Apr 15:32 compact_monitor_2_1776169965047.mp4\n-rw-r--r-- 1 lukas staff 5595644 14 Apr 15:38 compact_monitor_2_1776170281359.mp4\n-rw-r--r-- 1 lukas staff 584749 14 Apr 15:43 compact_monitor_2_1776170598047.mp4\n-rw-r--r-- 1 lukas staff 2633541 14 Apr 15:48 compact_monitor_2_1776170903735.mp4\n-rw-r--r-- 1 lukas staff 770182 14 Apr 15:53 compact_monitor_2_1776171208825.mp4\n-rw-r--r-- 1 lukas staff 1658362 14 Apr 15:58 compact_monitor_2_1776171512473.mp4\n-rw-r--r-- 1 lukas staff 295793 14 Apr 16:03 compact_monitor_2_1776171817959.mp4\n-rw-r--r-- 1 lukas staff 3540965 14 Apr 16:08 compact_monitor_2_1776172123631.mp4\n-rw-r--r-- 1 lukas staff 3589660 14 Apr 16:13 compact_monitor_2_1776172430586.mp4\n-rw-r--r-- 1 lukas staff 4735044 14 Apr 16:19 compact_monitor_2_1776172739210.mp4\n-rw-r--r-- 1 lukas staff 4951644 14 Apr 16:24 compact_monitor_2_1776173049122.mp4\n-rw-r--r-- 1 lukas staff 5939102 14 Apr 16:29 compact_monitor_2_1776173357170.mp4\n-rw-r--r-- 1 lukas staff 2549744 14 Apr 16:34 compact_monitor_2_1776173665142.mp4\n-rw-r--r-- 1 lukas staff 996149 14 Apr 16:39 compact_monitor_2_1776173972456.mp4\n-rw-r--r-- 1 lukas staff 2663346 14 Apr 16:44 compact_monitor_2_1776174276676.mp4\n-rw-r--r-- 1 lukas staff 1776844 14 Apr 16:49 compact_monitor_2_1776174582351.mp4\n-rw-r--r-- 1 lukas staff 1669202 14 Apr 16:54 compact_monitor_2_1776174889930.mp4\n-rw-r--r-- 1 lukas staff 5414828 14 Apr 17:00 compact_monitor_2_1776175198918.mp4\n-rw-r--r-- 1 lukas staff 5727100 14 Apr 17:05 compact_monitor_2_1776175518133.mp4\n-rw-r--r-- 1 lukas staff 6080220 14 Apr 17:10 compact_monitor_2_1776175835473.mp4\n-rw-r--r-- 1 lukas staff 3631681 14 Apr 17:16 compact_monitor_2_1776176159421.mp4\n-rw-r--r-- 1 lukas staff 1861818 14 Apr 17:21 compact_monitor_2_1776176479999.mp4\n-rw-r--r-- 1 lukas staff 1471229 14 Apr 17:26 compact_monitor_2_1776176794129.mp4\n-rw-r--r-- 1 lukas staff 1792667 14 Apr 17:32 compact_monitor_2_1776177119122.mp4\n-rw-r--r-- 1 lukas staff 2398088 14 Apr 17:37 compact_monitor_2_1776177447361.mp4\n-rw-r--r-- 1 lukas staff 1873376 14 Apr 17:42 compact_monitor_2_1776177755837.mp4\n-rw-r--r-- 1 lukas staff 3686281 14 Apr 17:47 compact_monitor_2_1776178069540.mp4\n-rw-r--r-- 1 lukas staff 1842517 14 Apr 17:53 compact_monitor_2_1776178382342.mp4\n-rw-r--r-- 1 lukas staff 2595005 14 Apr 17:58 compact_monitor_2_1776178688999.mp4\n-rw-r--r-- 1 lukas staff 3352578 14 Apr 18:03 compact_monitor_2_1776178994368.mp4\n-rw-r--r-- 1 lukas staff 7474140 14 Apr 18:08 compact_monitor_2_1776179301874.mp4\n-rw-r--r-- 1 lukas staff 18300640 14 Apr 18:13 compact_monitor_2_1776179614376.mp4\n-rw-r--r-- 1 lukas staff 8302944 14 Apr 18:13 compact_monitor_2_1776179625270.mp4\n-rw-r--r-- 1 lukas staff 27338956 14 Apr 18:19 compact_monitor_2_1776179934590.mp4\n-rw-r--r-- 1 lukas staff 1061768 14 Apr 18:19 compact_monitor_2_1776179947276.mp4\n-rw-r--r-- 1 lukas staff 24282145 14 Apr 18:24 compact_monitor_2_1776180254284.mp4\n-rw-r--r-- 1 lukas staff 5647384 14 Apr 18:24 compact_monitor_2_1776180266890.mp4\n-rw-r--r-- 1 lukas staff 32748524 14 Apr 18:29 compact_monitor_2_1776180574284.mp4\n-rw-r--r-- 1 lukas staff 25769571 14 Apr 18:35 compact_monitor_2_1776180892046.mp4\n-rw-r--r-- 1 lukas staff 41983533 14 Apr 18:40 compact_monitor_2_1776181207025.mp4\n-rw-r--r-- 1 lukas staff 3365850 14 Apr 18:40 compact_monitor_2_1776181223864.mp4\n-rw-r--r-- 1 lukas staff 40919053 14 Apr 18:45 compact_monitor_2_1776181530742.mp4\n-rw-r--r-- 1 lukas staff 3870375 14 Apr 18:45 compact_monitor_2_1776181546619.mp4\n-rw-r--r-- 1 lukas staff 36175005 14 Apr 18:51 compact_monitor_2_1776181853124.mp4\n-rw-r--r-- 1 lukas staff 36717883 14 Apr 18:56 compact_monitor_2_1776182171990.mp4\n-rw-r--r-- 1 lukas staff 27140350 14 Apr 19:01 compact_monitor_2_1776182491150.mp4\n-rw-r--r-- 1 lukas staff 20914618 14 Apr 19:06 compact_monitor_2_1776182808796.mp4\n-rw-r--r-- 1 lukas staff 4716229 14 Apr 19:07 compact_monitor_2_1776182820060.mp4\n-rw-r--r-- 1 lukas staff 24788277 14 Apr 19:12 compact_monitor_2_1776183129006.mp4\n-rw-r--r-- 1 lukas staff 7974655 14 Apr 19:12 compact_monitor_2_1776183141483.mp4\n-rw-r--r-- 1 lukas staff 22872307 14 Apr 19:17 compact_monitor_2_1776183451042.mp4\n-rw-r--r-- 1 lukas staff 3283631 14 Apr 19:17 compact_monitor_2_1776183462827.mp4\n-rw-r--r-- 1 lukas staff 32308259 14 Apr 19:23 compact_monitor_2_1776183769519.mp4\n-rw-r--r-- 1 lukas staff 2847482 14 Apr 19:23 compact_monitor_2_1776183783534.mp4\n-rw-r--r-- 1 lukas staff 36823186 14 Apr 19:28 compact_monitor_2_1776184089558.mp4\n-rw-r--r-- 1 lukas staff 5825352 14 Apr 19:28 compact_monitor_2_1776184104421.mp4\n-rw-r--r-- 1 lukas staff 30437061 15 Apr 09:59 compact_monitor_2_1776236357169.mp4\n-rw-r--r-- 1 lukas staff 4350302 15 Apr 09:59 compact_monitor_2_1776236373794.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 11:58:00] ========================================\n[2026-04-18 11:58:00] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 11:58:00] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 11:58:04] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✗ 531 / 245 files\n\n[2026-04-18 11:58:09] Archive DB size: 3.0G\n[2026-04-18 11:58:09] Total time: 0m9s\n[2026-04-18 11:58:09] Sync complete for 2026-04-14\n[2026-04-18 11:58:09] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 11:59:41] ========================================\n[2026-04-18 11:59:41] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 11:59:41] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 11:59:45] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✓ 2m07s (245 files, 1.0G)\n\n[2026-04-18 12:01:52] Archive DB size: 3.0G\n[2026-04-18 12:01:52] Total time: 2m11s\n[2026-04-18 12:01:52] Sync complete for 2026-04-14\n[2026-04-18 12:01:52] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:03:13] ========================================\n[2026-04-18 12:03:13] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:03:13] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: will be created\n Data dir: OK (245 files, 1.0G)\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)\nParse error near line 3: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames \n error here ---^\nParse error near line 4: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements \n error here ---^\nParse error near line 5: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events \n error here ---^\nParse error near line 6: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text \n error here ---^\nParse error near line 7: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks\n error here ---^\nParse error near line 8: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings \n error here ---^\nRuntime error near line 9: no such database: nas\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ls /Volumes/screenpipe/\nls: /Volumes/screenpipe/: Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ cd /Volumes \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll\ntotal 96\ndrwxr-xr-x 6 root wheel 192 18 Apr 11:17 .\ndrwxr-xr-x 20 root wheel 640 4 Aug 2024 ..\nlrwxr-xr-x 1 root wheel 1 16 Apr 15:43 Macintosh HD -> /\ndrwx------ 1 lukas staff 16384 11 Apr 15:46 Test\ndrwx------ 1 lukas staff 16384 13 Mar 10:17 Work\ndrwx------ 1 lukas staff 16384 17 Apr 21:29 screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls -la /Volumes/screenpipe/\ntotal 0\nls: /Volumes/screenpipe/: Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ mount | grep screenpipe\n//Adm1n@DXP4800PLUS-B5F8/screenpipe on /Volumes/screenpipe (smbfs, nodev, nosuid, mounted by lukas)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ umount /Volumes/screenpipe\numount: unmount(/Volumes/screenpipe): Operation not permitted\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:06:45] ========================================\n[2026-04-18 12:06:45] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:06:45] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: will be created\n Data dir: OK (245 files, 1.0G)\n\n[+00m00s] ▶ Counting source rows for 2026-04-14\n frames: 10733\n elements: 695969\n ui_events: 10542\n ocr_text: 8206\n meetings: 0\n\n[+00m01s] ▶ Initialising tables, indexes, FTS\n creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)\nParse error near line 3: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames \n error here ---^\nParse error near line 4: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements \n error here ---^\nParse error near line 5: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events \n error here ---^\nParse error near line 6: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text \n error here ---^\nParse error near line 7: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks\n error here ---^\nParse error near line 8: unknown database nas\n CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings \n error here ---^\nRuntime error near line 9: no such database: nas\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14\n[2026-04-18 12:06:51] ========================================\n[2026-04-18 12:06:51] Screenpipe sync starting for: 2026-04-14\n[2026-04-18 12:06:51] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:06:55] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync\n Data dir: OK (245 files, 1.0G)\n\n[+00m05s] ▶ Copying data folder for 2026-04-14\n rsync 2026-04-14/ → NAS ✓ 0m04s (245 files, 1.0G)\n\n[2026-04-18 12:07:00] Archive DB size: 3.0G\n[2026-04-18 12:07:00] Total time: 0m9s\n[2026-04-18 12:07:00] Sync complete for 2026-04-14\n[2026-04-18 12:07:00] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15\n[2026-04-18 12:07:03] ========================================\n[2026-04-18 12:07:03] Screenpipe sync starting for: 2026-04-15\n[2026-04-18 12:07:03] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:07:07] Date 2026-04-15 already has 12874 frames in archive — skipping DB sync\n Data dir: OK (241 files, 2.0G)\n\n[+00m04s] ▶ Copying data folder for 2026-04-15\n rsync 2026-04-15/ → NAS ✓ 3m22s (241 files, 2.0G)\n\n[2026-04-18 12:10:30] Archive DB size: 3.0G\n[2026-04-18 12:10:30] Total time: 3m27s\n[2026-04-18 12:10:30] Sync complete for 2026-04-15\n[2026-04-18 12:10:30] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-16\n[2026-04-18 12:16:30] ========================================\n[2026-04-18 12:16:30] Screenpipe sync starting for: 2026-04-16\n[2026-04-18 12:16:30] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:16:33] Date 2026-04-16 already has 9270 frames in archive — skipping DB sync\n Data dir: OK (232 files, 799M)\n\n[+00m03s] ▶ Copying data folder for 2026-04-16\n rsync 2026-04-16/ → NAS ✓ 1m46s (232 files, 799M)\n\n[2026-04-18 12:18:20] Archive DB size: 3.0G\n[2026-04-18 12:18:20] Total time: 1m50s\n[2026-04-18 12:18:20] Sync complete for 2026-04-16\n[2026-04-18 12:18:20] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-17\n[2026-04-18 12:18:38] ========================================\n[2026-04-18 12:18:38] Screenpipe sync starting for: 2026-04-17\n[2026-04-18 12:18:38] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.6G)\n NAS mount: OK /Volumes/Test/screenpipe\n[2026-04-18 12:18:42] Date 2026-04-17 already has 10040 frames in archive — skipping DB sync\n Data dir: OK (250 files, 671M)\n\n[+00m04s] ▶ Copying data folder for 2026-04-17\n rsync 2026-04-17/ → NAS ✓ 1m44s (250 files, 671M)\n\n[2026-04-18 12:20:26] Archive DB size: 3.0G\n[2026-04-18 12:20:26] Total time: 1m48s\n[2026-04-18 12:20:26] Sync complete for 2026-04-17\n[2026-04-18 12:20:26] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sqlite3 ~/.screenpipe/db.sqlite \\\n \"SELECT name FROM sqlite_master WHERE type='table' AND name LIKE '%fts%';\"\nui_events_fts\nui_events_fts_data\nui_events_fts_idx\nui_events_fts_docsize\nui_events_fts_config\nelements_fts\nelements_fts_data\nelements_fts_idx\nelements_fts_docsize\nelements_fts_config\naudio_transcriptions_fts\naudio_transcriptions_fts_data\naudio_transcriptions_fts_idx\naudio_transcriptions_fts_docsize\naudio_transcriptions_fts_config\nmemories_fts\nmemories_fts_data\nmemories_fts_idx\nmemories_fts_docsize\nmemories_fts_config\nframes_fts\nframes_fts_data\nframes_fts_idx\nframes_fts_content\nframes_fts_docsize\nframes_fts_config\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ sqlite3 ~/.screenpipe/db.sqlite \\\n \"SELECT name, sql FROM sqlite_master WHERE type='table' AND name='ui_events_fts';\"\nui_events_fts|CREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content,\n app_name,\n window_title,\n element_name,\n content='ui_events',\n content_rowid='id',\n tokenize='unicode61'\n)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ cd ~/.screenpipe \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls\nconfig.json\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdb.sqlite-wal\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-12.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-16.0.log\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpipes\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-13.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-17.0.log\ndb.sqlite\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-09.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-14.0.log\u0000\u0000\u0000\u0000\tscreenpipe_sync.sh\ndb.sqlite-shm\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-11.0.log\u0000\u0000\u0000\u0000\tscreenpipe.2026-04-15.0.log\u0000\u0000\u0000\u0000\tsync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ alias sp-start\nsp-start='npx screenpipe@latest record --disable-audio &'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ source ~/.zprofile\n\nPoetry could not find a pyproject.toml file in /Users/lukas/.screenpipe or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ alias sp-start \nsp-start='npx screenpipe@latest record --disable-audio --ignored-windows \"Boosteroid\"'\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ls ~/.screenpipe/data/\ndata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpending-transcriptions\u0000\tscreenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ ll \ntotal 7614824\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 .\ndrwx------+ 91 lukas staff 2912 18 Apr 12:53 ..\n-rw-r--r--@ 1 lukas staff 8196 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 358 16 Apr 16:49 config.json\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 data\n-rw-r--r--@ 1 lukas staff 3897454592 17 Apr 21:19 db.sqlite\n-rw-r--r--@ 1 lukas staff 32768 18 Apr 13:13 db.sqlite-shm\n-rw-r--r--@ 1 lukas staff 0 17 Apr 21:19 db.sqlite-wal\ndrwxr-xr-x 9 lukas staff 288 15 Apr 14:53 pipes\n-rw-r--r-- 1 lukas staff 132736 9 Apr 21:27 screenpipe.2026-04-09.0.log\n-rw-r--r-- 1 lukas staff 95425 11 Apr 23:14 screenpipe.2026-04-11.0.log\n-rw-r--r-- 1 lukas staff 72332 12 Apr 23:55 screenpipe.2026-04-12.0.log\n-rw-r--r-- 1 lukas staff 71555 13 Apr 19:50 screenpipe.2026-04-13.0.log\n-rw-r--r-- 1 lukas staff 162389 14 Apr 19:31 screenpipe.2026-04-14.0.log\n-rw-r--r-- 1 lukas staff 175763 15 Apr 18:55 screenpipe.2026-04-15.0.log\n-rw-r--r-- 1 lukas staff 196994 16 Apr 20:33 screenpipe.2026-04-16.0.log\n-rw-r--r-- 1 lukas staff 208424 17 Apr 21:06 screenpipe.2026-04-17.0.log\n-rwxr-xr-x@ 1 lukas staff 14323 18 Apr 12:06 screenpipe_sync.sh\n-rw-r--r--@ 1 lukas staff 12669 18 Apr 12:20 sync.log\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ cd data\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 16\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 .\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 data\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd pending-transcriptions \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/pending-transcriptions $ ll\ntotal 0\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 .\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/pending-transcriptions $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ data\nzsh: command not found: data\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 16\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 .\ndrwxr-xr-x 19 lukas staff 608 17 Apr 21:04 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 data\ndrwxr-xr-x 2 lukas staff 64 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ cd data \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll\ntotal 40\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 .\ndrwxr-xr-x 6 lukas staff 192 15 Apr 14:53 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 252 lukas staff 8064 17 Apr 21:06 2026-04-17\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-09 \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-09 $ ll\ntotal 79400\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 .\ndrwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..\n-rw-r--r-- 1 lukas staff 2558635 9 Apr 20:04 compact_monitor_1_1775754248190.mp4\n-rw-r--r-- 1 lukas staff 5272347 9 Apr 20:09 compact_monitor_1_1775754549504.mp4\n-rw-r--r-- 1 lukas staff 951943 9 Apr 20:15 compact_monitor_1_1775754928127.mp4\n-rw-r--r-- 1 lukas staff 780343 9 Apr 20:20 compact_monitor_1_1775755253065.mp4\n-rw-r--r-- 1 lukas staff 3129755 9 Apr 20:26 compact_monitor_1_1775755561408.mp4\n-rw-r--r-- 1 lukas staff 2369134 9 Apr 20:29 compact_monitor_1_1775755764874.mp4\n-rw-r--r-- 1 lukas staff 2879527 9 Apr 20:32 compact_monitor_1_1775755951928.mp4\n-rw-r--r-- 1 lukas staff 5597115 9 Apr 20:47 compact_monitor_1_1775756847339.mp4\n-rw-r--r-- 1 lukas staff 3460978 9 Apr 21:15 compact_monitor_1_1775758509024.mp4\n-rw-r--r-- 1 lukas staff 1876809 9 Apr 21:15 compact_monitor_1_1775758515203.mp4\n-rw-r--r-- 1 lukas staff 2813430 9 Apr 21:25 compact_monitor_1_1775759143411.mp4\n-rw-r--r-- 1 lukas staff 8937177 11 Apr 14:53 compact_monitor_1_1775908431491.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-09 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll\ntotal 40\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 .\ndrwxr-xr-x 14 lukas staff 448 18 Apr 13:36 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 229 lukas staff 7328 18 Apr 13:35 2026-04-17\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:36 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ll\ntotal 5696\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:36 .\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 ..\n-rw-r--r-- 1 lukas staff 215433 18 Apr 13:33 1776508419390_m1.jpg\n-rw-r--r-- 1 lukas staff 107206 18 Apr 13:33 1776508419555_m2.jpg\n-rw-r--r-- 1 lukas staff 155997 18 Apr 13:33 1776508422128_m1.jpg\n-rw-r--r-- 1 lukas staff 244304 18 Apr 13:33 1776508428450_m1.jpg\n-rw-r--r-- 1 lukas staff 107203 18 Apr 13:33 1776508428554_m2.jpg\n-rw-r--r-- 1 lukas staff 107202 18 Apr 13:33 1776508429142_m2.jpg\n-rw-r--r-- 1 lukas staff 208296 18 Apr 13:34 1776508453522_m1.jpg\n-rw-r--r-- 1 lukas staff 107122 18 Apr 13:34 1776508453670_m2.jpg\n-rw-r--r-- 1 lukas staff 130447 18 Apr 13:34 1776508456271_m1.jpg\n-rw-r--r-- 1 lukas staff 200633 18 Apr 13:34 1776508465399_m1.jpg\n-rw-r--r-- 1 lukas staff 201006 18 Apr 13:34 1776508479214_m1.jpg\n-rw-r--r-- 1 lukas staff 107315 18 Apr 13:34 1776508479222_m2.jpg\n-rw-r--r-- 1 lukas staff 217542 18 Apr 13:35 1776508510109_m1.jpg\n-rw-r--r-- 1 lukas staff 107558 18 Apr 13:35 1776508520117_m2.jpg\n-rw-r--r-- 1 lukas staff 217529 18 Apr 13:35 1776508540416_m1.jpg\n-rw-r--r-- 1 lukas staff 107438 18 Apr 13:35 1776508550498_m2.jpg\n-rw-r--r-- 1 lukas staff 217565 18 Apr 13:36 1776508570741_m1.jpg\n-rw-r--r-- 1 lukas staff 107323 18 Apr 13:36 1776508580887_m2.jpg\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ curl -s http://localhost:3030/health | jq '{audio_status, last_audio: .last_audio_timestamp}'\n{\n \"audio_status\": \"ok\",\n \"last_audio\": \"2026-04-18T13:36:57+03:00\"\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ls ~/.screenpipe/data/\nSystem Audio (output)_2026-04-18_10-34-25.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-36-39.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-34-24.mp4\nSystem Audio (output)_2026-04-18_10-34-49.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-37-02.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-34-56.mp4\nSystem Audio (output)_2026-04-18_10-35-11.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tSystem Audio (output)_2026-04-18_10-37-24.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-35-26.mp4\nSystem Audio (output)_2026-04-18_10-35-33.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tdata\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-35-56.mp4\nSystem Audio (output)_2026-04-18_10-35-55.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpending-transcriptions\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-36-26.mp4\nSystem Audio (output)_2026-04-18_10-36-17.mp4\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tscreenpipe.db\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tsoundcore AeroClip (input)_2026-04-18_10-36-56.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ ll\ntotal 13080\ndrwxr-xr-x 44 lukas staff 1408 18 Apr 13:37 .\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 ..\n-rw-r--r-- 1 lukas staff 215433 18 Apr 13:33 1776508419390_m1.jpg\n-rw-r--r-- 1 lukas staff 107206 18 Apr 13:33 1776508419555_m2.jpg\n-rw-r--r-- 1 lukas staff 155997 18 Apr 13:33 1776508422128_m1.jpg\n-rw-r--r-- 1 lukas staff 244304 18 Apr 13:33 1776508428450_m1.jpg\n-rw-r--r-- 1 lukas staff 107203 18 Apr 13:33 1776508428554_m2.jpg\n-rw-r--r-- 1 lukas staff 107202 18 Apr 13:33 1776508429142_m2.jpg\n-rw-r--r-- 1 lukas staff 208296 18 Apr 13:34 1776508453522_m1.jpg\n-rw-r--r-- 1 lukas staff 107122 18 Apr 13:34 1776508453670_m2.jpg\n-rw-r--r-- 1 lukas staff 130447 18 Apr 13:34 1776508456271_m1.jpg\n-rw-r--r-- 1 lukas staff 200633 18 Apr 13:34 1776508465399_m1.jpg\n-rw-r--r-- 1 lukas staff 201006 18 Apr 13:34 1776508479214_m1.jpg\n-rw-r--r-- 1 lukas staff 107315 18 Apr 13:34 1776508479222_m2.jpg\n-rw-r--r-- 1 lukas staff 217542 18 Apr 13:35 1776508510109_m1.jpg\n-rw-r--r-- 1 lukas staff 107558 18 Apr 13:35 1776508520117_m2.jpg\n-rw-r--r-- 1 lukas staff 217529 18 Apr 13:35 1776508540416_m1.jpg\n-rw-r--r-- 1 lukas staff 107438 18 Apr 13:35 1776508550498_m2.jpg\n-rw-r--r-- 1 lukas staff 217565 18 Apr 13:36 1776508570741_m1.jpg\n-rw-r--r-- 1 lukas staff 107323 18 Apr 13:36 1776508580887_m2.jpg\n-rw-r--r-- 1 lukas staff 223931 18 Apr 13:36 1776508601010_m1.jpg\n-rw-r--r-- 1 lukas staff 110527 18 Apr 13:36 1776508601828_m2.jpg\n-rw-r--r-- 1 lukas staff 220887 18 Apr 13:36 1776508601839_m1.jpg\n-rw-r--r-- 1 lukas staff 110573 18 Apr 13:36 1776508604812_m2.jpg\n-rw-r--r-- 1 lukas staff 219398 18 Apr 13:37 1776508632417_m1.jpg\n-rw-r--r-- 1 lukas staff 83219 18 Apr 13:37 1776508635039_m2.jpg\n-rw-r--r-- 1 lukas staff 219514 18 Apr 13:37 1776508638212_m1.jpg\n-rw-r--r-- 1 lukas staff 87339 18 Apr 13:37 1776508638212_m2.jpg\n-rw-r--r-- 1 lukas staff 221109 18 Apr 13:37 1776508639686_m1.jpg\n-rw-r--r-- 1 lukas staff 84740 18 Apr 13:37 1776508639725_m2.jpg\n-rw-r--r-- 1 lukas staff 224486 18 Apr 13:37 1776508640520_m1.jpg\n-rw-r--r-- 1 lukas staff 84838 18 Apr 13:37 1776508640592_m2.jpg\n-rw-r--r-- 1 lukas staff 84841 18 Apr 13:37 1776508647855_m2.jpg\n-rw-r--r-- 1 lukas staff 217131 18 Apr 13:37 1776508647864_m1.jpg\n-rw-r--r-- 1 lukas staff 223897 18 Apr 13:37 1776508651398_m1.jpg\n-rw-r--r-- 1 lukas staff 85463 18 Apr 13:37 1776508651398_m2.jpg\n-rw-r--r-- 1 lukas staff 219804 18 Apr 13:37 1776508653328_m1.jpg\n-rw-r--r-- 1 lukas staff 97034 18 Apr 13:37 1776508653420_m2.jpg\n-rw-r--r-- 1 lukas staff 82829 18 Apr 13:37 1776508659506_m2.jpg\n-rw-r--r-- 1 lukas staff 91337 18 Apr 13:37 1776508665504_m2.jpg\n-rw-r--r-- 1 lukas staff 219393 18 Apr 13:37 1776508665924_m1.jpg\n-rw-r--r-- 1 lukas staff 221275 18 Apr 13:37 1776508666761_m1.jpg\n-rw-r--r-- 1 lukas staff 88185 18 Apr 13:37 1776508666868_m2.jpg\n-rw-r--r-- 1 lukas staff 218919 18 Apr 13:37 1776508668460_m1.jpg\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-18 $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ ll \ntotal 40\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 .\ndrwxr-xr-x 22 lukas staff 704 18 Apr 13:37 ..\n-rw-r--r--@ 1 lukas staff 18436 16 Apr 17:07 .DS_Store\ndrwxr-xr-x 14 lukas staff 448 11 Apr 14:53 2026-04-09\ndrwxr-xr-x 30 lukas staff 960 12 Apr 09:02 2026-04-11\ndrwxr-xr-x 46 lukas staff 1472 13 Apr 15:13 2026-04-12\ndrwxr-xr-x 71 lukas staff 2272 14 Apr 09:24 2026-04-13\ndrwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 2026-04-14\ndrwxr-xr-x 243 lukas staff 7776 16 Apr 09:13 2026-04-15\ndrwxr-xr-x 234 lukas staff 7488 17 Apr 08:57 2026-04-16\ndrwxr-xr-x 229 lukas staff 7328 18 Apr 13:35 2026-04-17\ndrwxr-xr-x 44 lukas staff 1408 18 Apr 13:37 2026-04-18\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd ..\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 1776\ndrwxr-xr-x 23 lukas staff 736 18 Apr 13:38 .\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:34 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:34 System Audio (output)_2026-04-18_10-34-25.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-02.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-37-46.mp4\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 data\ndrwxr-xr-x 2 lukas staff 64 18 Apr 13:36 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\n-rw-r--r-- 1 lukas staff 173278 18 Apr 13:34 soundcore AeroClip (input)_2026-04-18_10-34-24.mp4\n-rw-r--r-- 1 lukas staff 134890 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-34-56.mp4\n-rw-r--r-- 1 lukas staff 172333 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-35-26.mp4\n-rw-r--r-- 1 lukas staff 151441 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-35-56.mp4\n-rw-r--r-- 1 lukas staff 71265 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-36-26.mp4\n-rw-r--r-- 1 lukas staff 22227 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-36-56.mp4\n-rw-r--r-- 1 lukas staff 78730 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-37-26.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ ll\ntotal 2256\ndrwxr-xr-x 30 lukas staff 960 18 Apr 13:39 .\ndrwxr-xr-x 20 lukas staff 640 18 Apr 13:34 ..\n-rw-r--r--@ 1 lukas staff 6148 16 Apr 17:07 .DS_Store\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:34 System Audio (output)_2026-04-18_10-34-25.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-34-49.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-11.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:35 System Audio (output)_2026-04-18_10-35-33.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-35-55.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:36 System Audio (output)_2026-04-18_10-36-17.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-36-39.mp4\n-rw-r--r-- 1 lukas staff 4628 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-02.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:37 System Audio (output)_2026-04-18_10-37-24.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-37-46.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-38-08.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:38 System Audio (output)_2026-04-18_10-38-30.mp4\n-rw-r--r-- 1 lukas staff 4620 18 Apr 13:39 System Audio (output)_2026-04-18_10-38-52.mp4\n-rw-r--r-- 1 lukas staff 33475 18 Apr 13:39 System Audio (output)_2026-04-18_10-39-15.mp4\ndrwxr-xr-x 12 lukas staff 384 18 Apr 13:33 data\ndrwxr-xr-x 2 lukas staff 64 18 Apr 13:38 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0 11 Apr 15:03 screenpipe.db\n-rw-r--r-- 1 lukas staff 173278 18 Apr 13:34 soundcore AeroClip (input)_2026-04-18_10-34-24.mp4\n-rw-r--r-- 1 lukas staff 134890 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-34-56.mp4\n-rw-r--r-- 1 lukas staff 172333 18 Apr 13:35 soundcore AeroClip (input)_2026-04-18_10-35-26.mp4\n-rw-r--r-- 1 lukas staff 151441 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-35-56.mp4\n-rw-r--r-- 1 lukas staff 71265 18 Apr 13:36 soundcore AeroClip (input)_2026-04-18_10-36-26.mp4\n-rw-r--r-- 1 lukas staff 22227 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-36-56.mp4\n-rw-r--r-- 1 lukas staff 78730 18 Apr 13:37 soundcore AeroClip (input)_2026-04-18_10-37-26.mp4\n-rw-r--r-- 1 lukas staff 54903 18 Apr 13:38 soundcore AeroClip (input)_2026-04-18_10-37-55.mp4\n-rw-r--r-- 1 lukas staff 58492 18 Apr 13:38 soundcore AeroClip (input)_2026-04-18_10-38-25.mp4\n-rw-r--r-- 1 lukas staff 64925 18 Apr 13:39 soundcore AeroClip (input)_2026-04-18_10-38-55.mp4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ curl -s http://localhost:3030/health | jq '.pipeline'\n{\n \"avg_db_latency_ms\": 169.36220472440945,\n \"avg_ocr_latency_ms\": 0.0,\n \"capture_fps_actual\": 0.2466395779893504,\n \"frame_drop_rate\": 0.0,\n \"frames_captured\": 127,\n \"frames_db_written\": 127,\n \"frames_dropped\": 0,\n \"ocr_cache_hit_rate\": 0.0,\n \"ocr_queue_depth\": 0,\n \"pipeline_stall_count\": 0,\n \"time_to_first_frame_ms\": 1434.727,\n \"uptime_secs\": 514.921413,\n \"video_queue_depth\": 0\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.23320313,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.23554687,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (docker)","depth":2,"bounds":{"left":0.29472655,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.29707032,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.35625,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.35859376,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.41777343,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.4201172,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.47929686,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.48164064,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"✳ Review screenpipe usage and Boosteroid integration (claude)","depth":2,"bounds":{"left":0.5408203,"top":1.0,"width":0.061523438,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.5431641,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-30-159-186:~ (nc)","depth":2,"bounds":{"left":0.60234374,"top":1.0,"width":0.061328124,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6046875,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"ec2-user@ip-10-20-6-111:~ (nc)","depth":2,"bounds":{"left":0.66367185,"top":1.0,"width":0.061328124,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.6660156,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.725,"top":1.0,"width":0.061328124,"height":-0.03680551},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.72734374,"top":1.0,"width":0.00625,"height":-0.039583325},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7703125,"top":1.0,"width":0.021875,"height":-0.02013886},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.5078125,"top":1.0,"width":0.012890625,"height":-0.020833373},"role_description":"text"}]...
|
6026116265553732678
|
-6096010058767810957
|
app_switch
|
accessibility
|
NULL
|
-rw-r--r-- 1 lukas staff 361011 17 Apr 09:5 -rw-r--r-- 1 lukas staff 361011 17 Apr 09:53 compact_monitor_1_1776408824270.mp4
-rw-r--r-- 1 lukas staff 3365373 17 Apr 09:59 compact_monitor_1_1776409136717.mp4
-rw-r--r-- 1 lukas staff 2601020 17 Apr 10:04 compact_monitor_1_1776409450395.mp4
-rw-r--r-- 1 lukas staff 3497066 17 Apr 10:09 compact_monitor_1_1776409759172.mp4
-rw-r--r-- 1 lukas staff 1507571 17 Apr 10:14 compact_monitor_1_1776410067944.mp4
-rw-r--r-- 1 lukas staff 943396 17 Apr 10:19 compact_monitor_1_1776410372484.mp4
-rw-r--r-- 1 lukas staff 1225040 17 Apr 10:24 compact_monitor_1_1776410674629.mp4
-rw-r--r-- 1 lukas staff 2224229 17 Apr 10:29 compact_monitor_1_1776410981487.mp4
-rw-r--r-- 1 lukas staff 398291 17 Apr 10:34 compact_monitor_1_1776411298373.mp4
-rw-r--r-- 1 lukas staff 4376235 17 Apr 10:40 compact_monitor_1_1776411601686.mp4
-rw-r--r-- 1 lukas staff 5007720 17 Apr 10:45 compact_monitor_1_1776411923026.mp4
-rw-r--r-- 1 lukas staff 2281319 17 Apr 10:50 compact_monitor_1_1776412242015.mp4
-rw-r--r-- 1 lukas staff 3182872 17 Apr 10:56 compact_monitor_1_1776412560658.mp4
-rw-r--r-- 1 lukas staff 3896056 17 Apr 11:01 compact_monitor_1_1776412881181.mp4
-rw-r--r-- 1 lukas staff 6279582 17 Apr 11:06 compact_monitor_1_1776413192507.mp4
-rw-r--r-- 1 lukas staff 6492126 17 Apr 11:12 compact_monitor_1_1776413508291.mp4
-rw-r--r-- 1 lukas staff 6045038 17 Apr 11:17 compact_monitor_1_1776413848971.mp4
-rw-r--r-- 1 lukas staff 4968033 17 Apr 11:23 compact_monitor_1_1776414180658.mp4
-rw-r--r-- 1 lukas staff 7109088 17 Apr 11:28 compact_monitor_1_1776414513921.mp4
-rw-r--r-- 1 lukas staff 9099339 17 Apr 11:34 compact_monitor_1_1776414839842.mp4
-rw-r--r-- 1 lukas staff 926165 17 Apr 11:34 compact_monitor_1_1776414858793.mp4
-rw-r--r-- 1 lukas staff 9246778 17 Apr 11:39 compact_monitor_1_1776415182593.mp4
-rw-r--r-- 1 lukas staff 8361876 17 Apr 11:45 compact_monitor_1_1776415505403.mp4
-rw-r--r-- 1 lukas staff 7215549 17 Apr 11:50 compact_monitor_1_1776415841776.mp4
-rw-r--r-- 1 lukas staff 6234445 17 Apr 11:56 compact_monitor_1_1776416174658.mp4
-rw-r--r-- 1 lukas staff 11694078 17 Apr 12:01 compact_monitor_1_1776416497484.mp4
-rw-r--r-- 1 lukas staff 7033085 17 Apr 12:07 compact_monitor_1_1776416834587.mp4
-rw-r--r-- 1 lukas staff 4309161 17 Apr 12:12 compact_monitor_1_1776417157754.mp4
-rw-r--r-- 1 lukas staff 3782878 17 Apr 12:18 compact_monitor_1_1776417481425.mp4
-rw-r--r-- 1 lukas staff 5597264 17 Apr 12:23 compact_monitor_1_1776417802134.mp4
-rw-r--r-- 1 lukas staff 5667747 17 Apr 12:28 compact_monitor_1_1776418119908.mp4
-rw-r--r-- 1 lukas staff 8840842 17 Apr 12:34 compact_monitor_1_1776418443506.mp4
-rw-r--r-- 1 lukas staff 5442395 17 Apr 12:39 compact_monitor_1_1776418761701.mp4
-rw-r--r-- 1 lukas staff 4054014 17 Apr 12:44 compact_monitor_1_1776419074083.mp4
-rw-r--r-- 1 lukas staff 3734539 17 Apr 12:49 compact_monitor_1_1776419388949.mp4
-rw-r--r-- 1 lukas staff 3137915 17 Apr 12:55 compact_monitor_1_1776419701686.mp4
-rw-r--r-- 1 lukas staff 3064654 17 Apr 13:00 compact_monitor_1_1776420015547.mp4
-rw-r--r-- 1 lukas staff 1189833 17 Apr 13:05 compact_monitor_1_1776420321592.mp4
-rw-r--r-- 1 lukas staff 1862832 17 Apr 13:10 compact_monitor_1_1776420633887.mp4
-rw-r--r-- 1 lukas staff 520517 17 Apr 13:15 compact_monitor_1_1776420947144.mp4
-rw-r--r-- 1 lukas staff 790509 17 Apr 13:20 compact_monitor_1_1776421253865.mp4
-rw-r--r-- 1 lukas staff 1155599 17 Apr 13:26 compact_monitor_1_1776421566995.mp4
-rw-r--r-- 1 lukas staff 626836 17 Apr 13:31 compact_monitor_1_1776421884013.mp4
-rw-r--r-- 1 lukas staff 2709758 17 Apr 13:36 compact_monitor_1_1776422194788.mp4
-rw-r--r-- 1 lukas staff 894214 17 Apr 13:41 compact_monitor_1_1776422513565.mp4
-rw-r--r-- 1 lukas staff 1298826 17 Apr 13:47 compact_monitor_1_1776422829105.mp4
-rw-r--r-- 1 lukas staff 3454896 17 Apr 13:52 compact_monitor_1_1776423143916.mp4
-rw-r--r-- 1 lukas staff 1369217 17 Apr 13:57 compact_monitor_1_1776423466196.mp4
-rw-r--r-- 1 lukas staff 1677163 17 Apr 14:03 compact_monitor_1_1776423783420.mp4
-rw-r--r-- 1 lukas staff 556702 17 Apr 14:08 compact_monitor_1_1776424109344.mp4
-rw-r--r-- 1 lukas staff 1001886 17 Apr 14:13 compact_monitor_1_1776424416957.mp4
-rw-r--r-- 1 lukas staff 1485547 17 Apr 14:18 compact_monitor_1_1776424730536.mp4
-rw-r--r-- 1 lukas staff 935536 17 Apr 14:24 compact_monitor_1_1776425050631.mp4
-rw-r--r-- 1 lukas staff 1119642 17 Apr 14:29 compact_monitor_1_1776425372446.mp4
-rw-r--r-- 1 lukas staff 430883 17 Apr 14:34 compact_monitor_1_1776425690857.mp4
-rw-r--r-- 1 lukas staff 427035 17 Apr 14:40 compact_monitor_1_1776426003278.mp4
-rw-r--r-- 1 lukas staff 654605 17 Apr 14:45 compact_monitor_1_1776426312497.mp4
-rw-r--r-- 1 lukas staff 440539 17 Apr 14:50 compact_monitor_1_1776426625506.mp4
-rw-r--r-- 1 lukas staff 439802 17 Apr 14:55 compact_monitor_1_1776426939895.mp4
-rw-r--r-- 1 lukas staff 557755 17 Apr 15:01 compact_monitor_1_1776427261945.mp4
-rw-r--r-- 1 lukas staff 1071442 17 Apr 15:06 compact_monitor_1_1776427571985.mp4
-rw-r--r-- 1 lukas staff 2606361 17 Apr 15:11 compact_monitor_1_1776427882803.mp4
-rw-r--r-- 1 lukas staff 951201 17 Apr 15:16 compact_monitor_1_1776428192090.mp4
-rw-r--r-- 1 lukas staff 322306 17 Apr 15:21 compact_monitor_1_1776428505150.mp4
-rw-r--r-- 1 lukas staff 331163 17 Apr 15:26 compact_monitor_1_1776428811953.mp4
-rw-r--r-- 1 lukas staff 737469 17 Apr 15:32 compact_monitor_1_1776429127526.mp4
-rw-r--r-- 1 lukas staff 352621 17 Apr 15:37 compact_monitor_1_1776429442374.mp4
-rw-r--r-- 1 lukas staff 444203 17 Apr 15:42 compact_monitor_1_1776429752217.mp4
-rw-r--r-- 1 lukas staff 1407505 17 Apr 15:47 compact_monitor_1_1776430066920.mp4
-rw-r--r-- 1 lukas staff 360974 17 Apr 15:53 compact_monitor_1_1776430376918.mp4
-rw-r--r-- 1 lukas staff 321565 17 Apr 15:58 compact_monitor_1_1776430691588.mp4
-rw-r--r-- 1 lukas staff 317048 17 Apr 16:03 compact_monitor_1_1776431003504.mp4
-rw-r--r-- 1 lukas staff 321894 17 Apr 16:08 compact_monitor_1_1776431317637.mp4
-rw-r--r-- 1 lukas staff 333513 17 Apr 16:13 compact_monitor_1_1776431629041.mp4
-rw-r--r-- 1 lukas staff 326264 17 Apr 16:19 compact_monitor_1_1776431942238.mp4
-rw-r--r-- 1 lukas staff 366336 17 Apr 16:24 compact_monitor_1_1776432254490.mp4
-rw-r--r-- 1 lukas staff 327825 17 Apr 16:29 compact_monitor_1_1776432574989.mp4
-rw-r--r-- 1 lukas staff 1048363 17 Apr 16:34 compact_monitor_1_1776432882794.mp4
-rw-r--r-- 1 lukas staff 1668969 17 Apr 16:39 compact_monitor_1_1776433188842.mp4
-rw-r--r-- 1 lukas staff 1283899 17 Apr 16:44 compact_monitor_1_1776433493858.mp4
-rw-r--r-- 1 lukas staff 314118 17 Apr 16:50 compact_monitor_1_1776433800642.mp4
-rw-r--r-- 1 lukas staff 547478 17 Apr 16:55 compact_monitor_1_1776434111371.mp4
-rw-r--r-- 1 lukas staff 868654 17 Apr 17:00 compact_monitor_1_1776434420728.mp4
-rw-r--r-- 1 lukas staff 885215 17 Apr 17:05 compact_monitor_1_1776434723901.mp4
-rw-r--r-- 1 lukas staff 508905 17 Apr 17:10 compact_monitor_1_1776435038035.mp4
-rw-r--r-- 1 lukas staff 591766 17 Apr 17:16 compact_monitor_1_1776435363044.mp4
-rw-r--r-- 1 lukas staff 2031034 17 Apr 17:21 compact_monitor_1_1776435683729.mp4
-rw-r--r-- 1 lukas staff 2136043 17 Apr 17:26 compact_monitor_1_1776436005076.mp4
-rw-r--r-- 1 lukas staff 578716 17 Apr 17:32 compact_monitor_1_1776436319163.mp4
-rw-r--r-- 1 lukas staff 1308705 17 Apr 17:37 compact_monitor_1_1776436630439.mp4
-rw-r--r-- 1 lukas staff 958771 17 Apr 17:42 compact_monitor_1_1776436939049.mp4
-rw-r--r-- 1 lukas staff 797771 17 Apr 17:47 compact_monitor_1_1776437247467.mp4
-rw-r--r-- 1 lukas staff 1230186 17 Apr 17:52 compact_monitor_1_1776437554897.mp4
-rw-r--r-- 1 lukas staff 862632 17 Apr 17:57 compact_monitor_1_1776437862465.mp4
-rw-r--r-- 1 lukas staff 757441 17 Apr 18:02 compact_monitor_1_1776438171931.mp4
-rw-r--r-- 1 lukas staff 686680 17 Apr 18:08 compact_monitor_1_1776438479816.mp4
-rw-r--r-- 1 lukas staff 1078524 17 Apr 18:13 compact_monitor_1_1776438783339.mp4
-rw-r--r-- 1 lukas staff 496616 17 Apr 18:18 compact_monitor_1_1776439090720.mp4
-rw-r--r-- 1 lukas staff 774571 17 Apr 18:23 compact_monitor_1_1776439396975.mp4
-rw-r--r-- 1 lukas staff 1160291 17 Apr 18:28 compact_monitor_1_1776439703924.mp4
-rw-r--r-- 1 lukas staff 632541 17 Apr 18:34 compact_monitor_1_1776440053428.mp4
-rw-r--r-- 1 lukas staff 3291212 17 Apr 21:05 compact_monitor_1_1776449135667.mp4
-rw-r--r-- 1 lukas staff 768306 17 Apr 09:07 compact_monitor_2_1776406035126.mp4
-rw-r--r-- 1 lukas staff 9277508 17 Apr 09:12 compact_monitor_2_1776406343152.mp4
-rw-r--r-- 1 lukas staff 627114 17 Apr 09:12 compact_monitor_2_1776406349962.mp4
-rw-r--r-- 1 lukas staff 11129246 17 Apr 09:17 compact_monitor_2_1776406653780.mp4
-rw-r--r-- 1 lukas staff 8352174 17 Apr 09:22 compact_monitor_2_1776406964880.mp4
-rw-r--r-- 1 lukas staff 8551960 17 Apr 09:28 compact_monitor_2_1776407277493.mp4
-rw-r--r-- 1 lukas staff 679244 17 Apr 09:28 compact_monitor_2_1776407283693.mp4
-rw-r--r-- 1 lukas staff 12641011 17 Apr 09:33 compact_monitor_2_1776407588804.mp4
-rw-r--r-- 1 lukas staff 9384615 17 Apr 09:38 compact_monitor_2_1776407900099.mp4
-rw-r--r-- 1 lukas staff 4024767 17 Apr 09:43 compact_monitor_2_1776408207652.mp4
-rw-r--r-- 1 lukas staff 2627851 17 Apr 09:48 compact_monitor_2_1776408517311.mp4
-rw-r--r-- 1 lukas staff 4877190 17 Apr 09:53 compact_monitor_2_1776408826734.mp4
-rw-r--r-- 1 lukas staff 3807909 17 Apr 09:59 compact_monitor_2_1776409142638.mp4
-rw-r--r-- 1 lukas staff 4217716 17 Apr 10:04 compact_monitor_2_1776409454184.mp4
-rw-r--r-- 1 lukas staff 1717578 17 Apr 10:09 compact_monitor_2_1776409763153.mp4
-rw-r--r-- 1 lukas staff 1067064 17 Apr 10:14 compact_monitor_2_1776410070480.mp4
-rw-r--r-- 1 lukas staff 442425 17 Apr 10:19 compact_monitor_2_1776410373664.mp4
-rw-r--r-- 1 lukas staff 444497 17 Apr 10:24 compact_monitor_2_1776410676126.mp4
-rw-r--r-- 1 lukas staff 3670025 17 Apr 10:29 compact_monitor_2_1776410986705.mp4
-rw-r--r-- 1 lukas staff 448939 17 Apr 10:35 compact_monitor_2_1776411299875.mp4
-rw-r--r-- 1 lukas staff 4490377 17 Apr 10:40 compact_monitor_2_1776411611306.mp4
-rw-r--r-- 1 lukas staff 7437798 17 Apr 10:45 compact_monitor_2_1776411929615.mp4
-rw-r--r-- 1 lukas staff 6915447 17 Apr 10:50 compact_monitor_2_1776412245368.mp4
-rw-r--r-- 1 lukas staff 7988703 17 Apr 10:56 compact_monitor_2_1776412568330.mp4
-rw-r--r-- 1 lukas staff 5512416 17 Apr 11:01 compact_monitor_2_1776412886253.mp4
-rw-r--r-- 1 lukas staff 3107875 17 Apr 11:06 compact_monitor_2_1776413199096.mp4
-rw-r--r-- 1 lukas staff 4158550 17 Apr 11:12 compact_monitor_2_1776413529707.mp4
-rw-r--r-- 1 lukas staff 4756064 17 Apr 11:17 compact_monitor_2_1776413863997.mp4
-rw-r--r-- 1 lukas staff 5281060 17 Apr 11:23 compact_monitor_2_1776414194026.mp4
-rw-r--r-- 1 lukas staff 2605046 17 Apr 11:28 compact_monitor_2_1776414528521.mp4
-rw-r--r-- 1 lukas staff 5473302 17 Apr 11:34 compact_monitor_2_1776414861255.mp4
-rw-r--r-- 1 lukas staff 2791759 17 Apr 11:40 compact_monitor_2_1776415194836.mp4
-rw-r--r-- 1 lukas staff 5494699 17 Apr 11:45 compact_monitor_2_1776415523929.mp4
-rw-r--r-- 1 lukas staff 4025150 17 Apr 11:51 compact_monitor_2_1776415859261.mp4
-rw-r--r-- 1 lukas staff 2583684 17 Apr 11:56 compact_monitor_2_1776416187267.mp4
-rw-r--r-- 1 lukas staff 5240195 17 Apr 12:02 compact_monitor_2_1776416514967.mp4
-rw-r--r-- 1 lukas staff 3629687 17 Apr 12:07 compact_monitor_2_1776416846005.mp4
-rw-r--r-- 1 lukas staff 5021721 17 Apr 12:12 compact_monitor_2_1776417172355.mp4
-rw-r--r-- 1 lukas staff 2986447 17 Apr 12:18 compact_monitor_2_1776417492277.mp4
-rw-r--r-- 1 lukas staff 3976942 17 Apr 12:23 compact_monitor_2_1776417810578.mp4
-rw-r--r-- 1 lukas staff 4294715 17 Apr 12:29 compact_monitor_2_1776418132304.mp4
-rw-r--r-- 1 lukas staff 4698998 17 Apr 12:34 compact_monitor_2_1776418452374.mp4
-rw-r--r-- 1 lukas staff 3160886 17 Apr 12:39 compact_monitor_2_1776418768555.mp4
-rw-r--r-- 1 lukas staff 1776908 17 Apr 12:44 compact_monitor_2_1776419082274.mp4
-rw-r--r-- 1 lukas staff 1500725 17 Apr 12:49 compact_monitor_2_1776419394506.mp4
-rw-r--r-- 1 lukas staff 1279602 17 Apr 12:55 compact_monitor_2_1776419709571.mp4
-rw-r--r-- 1 lukas staff 2017894 17 Apr 13:00 compact_monitor_2_1776420018859.mp4
-rw-r--r-- 1 lukas staff 5639690 17 Apr 13:05 compact_monitor_2_1776420324337.mp4
-rw-r--r-- 1 lukas staff 4587635 17 Apr 13:10 compact_monitor_2_1776420636421.mp4
-rw-r--r-- 1 lukas staff 2001162 17 Apr 13:15 compact_monitor_2_1776420949555.mp4
-rw-r--r-- 1 lukas staff 3658362 17 Apr 13:21 compact_monitor_2_1776421256306.mp4
-rw-r--r-- 1 lukas staff 7755716 17 Apr 13:26 compact_monitor_2_1776421570292.mp4
-rw-r--r-- 1 lukas staff 3362766 17 Apr 13:31 compact_monitor_2_1776421886698.mp4
-rw-r--r-- 1 lukas staff 6893513 17 Apr 13:36 compact_monitor_2_1776422197625.mp4
-rw-r--r-- 1 lukas staff 4788146 17 Apr 13:42 compact_monitor_2_1776422516390.mp4
-rw-r--r-- 1 lukas staff 4840848 17 Apr 13:47 compact_monitor_2_1776422832136.mp4
-rw-r--r-- 1 lukas staff 9094075 17 Apr 13:52 compact_monitor_2_1776423148671.mp4
-rw-r--r-- 1 lukas staff 10072846 17 Apr 13:57 compact_monitor_2_1776423469970.mp4
-rw-r--r-- 1 lukas staff 13504297 17 Apr 14:03 compact_monitor_2_1776423787536.mp4
-rw-r--r-- 1 lukas staff 1622612 17 Apr 14:08 compact_monitor_2_1776424110832.mp4
-rw-r--r-- 1 lukas staff 5427700 17 Apr 14:13 compact_monitor_2_1776424419206.mp4
-rw-r--r-- 1 lukas staff 1746789 17 Apr 14:19 compact_monitor_2_1776424736034.mp4
-rw-r--r-- 1 lukas staff 4232204 17 Apr 14:24 compact_monitor_2_1776425054084.mp4
-rw-r--r-- 1 lukas staff 4457408 17 Apr 14:29 compact_monitor_2_1776425375574.mp4
-rw-r--r-- 1 lukas staff 174979 17 Apr 14:34 compact_monitor_2_1776425692307.mp4
-rw-r--r-- 1 lukas staff 169969 17 Apr 14:40 compact_monitor_2_1776426005170.mp4
-rw-r--r-- 1 lukas staff 2723106 17 Apr 14:45 compact_monitor_2_1776426315173.mp4
-rw-r--r-- 1 lukas staff 3313658 17 Apr 14:50 compact_monitor_2_1776426627449.mp4
-rw-r--r-- 1 lukas staff 4720437 17 Apr 14:55 compact_monitor_2_1776426943213.mp4
-rw-r--r-- 1 lukas staff 3589313 17 Apr 15:01 compact_monitor_2_1776427263991.mp4
-rw-r--r-- 1 lukas staff 6295236 17 Apr 15:06 compact_monitor_2_1776427573875.mp4
-rw-r--r-- 1 lukas staff 3390902 17 Apr 15:11 compact_monitor_2_1776427885283.mp4
-rw-r--r-- 1 lukas staff 1637607 17 Apr 15:16 compact_monitor_2_1776428194704.mp4
-rw-r--r-- 1 lukas staff 1355327 17 Apr 15:21 compact_monitor_2_1776428506246.mp4
-rw-r--r-- 1 lukas staff 4897048 17 Apr 15:27 compact_monitor_2_1776428815157.mp4
-rw-r--r-- 1 lukas staff 4930900 17 Apr 15:32 compact_monitor_2_1776429130905.mp4
-rw-r--r-- 1 lukas staff 2581578 17 Apr 15:37 compact_monitor_2_1776429444142.mp4
-rw-r--r-- 1 lukas staff 4764105 17 Apr 15:42 compact_monitor_2_1776429755437.mp4
-rw-r--r-- 1 lukas staff 4039902 17 Apr 15:47 compact_monitor_2_1776430069174.mp4
-rw-r--r-- 1 lukas staff 4735734 17 Apr 15:53 compact_monitor_2_1776430380212.mp4
-rw-r--r-- 1 lukas staff 2195410 17 Apr 15:58 compact_monitor_2_1776430693483.mp4
-rw-r--r-- 1 lukas staff 1857322 17 Apr 16:03 compact_monitor_2_1776431005386.mp4
-rw-r--r-- 1 lukas staff 3412100 17 Apr 16:08 compact_monitor_2_1776431319373.mp4
-rw-r--r-- 1 lukas staff 6928537 17 Apr 16:13 compact_monitor_2_1776431631778.mp4
-rw-r--r-- 1 lukas staff 4990793 17 Apr 16:19 compact_monitor_2_1776431944571.mp4
-rw-r--r-- 1 lukas staff 8242278 17 Apr 16:24 compact_monitor_2_1776432258818.mp4
-rw-r--r-- 1 lukas staff 451999 17 Apr 16:24 compact_monitor_2_1776432269036.mp4
-rw-r--r-- 1 lukas staff 2978452 17 Apr 16:29 compact_monitor_2_1776432577467.mp4
-rw-r--r-- 1 lukas staff 1248291 17 Apr 16:34 compact_monitor_2_1776432884349.mp4
-rw-r--r-- 1 lukas staff 2963525 17 Apr 16:39 compact_monitor_2_1776433190284.mp4
-rw-r--r-- 1 lukas staff 1958858 17 Apr 16:44 compact_monitor_2_1776433495477.mp4
-rw-r--r-- 1 lukas staff 1656966 17 Apr 16:50 compact_monitor_2_1776433802347.mp4
-rw-r--r-- 1 lukas staff 2813856 17 Apr 16:55 compact_monitor_2_1776434112909.mp4
-rw-r--r-- 1 lukas staff 510112 17 Apr 17:00 compact_monitor_2_1776434422384.mp4
-rw-r--r-- 1 lukas staff 4354386 17 Apr 17:05 compact_monitor_2_1776434725886.mp4
-rw-r--r-- 1 lukas staff 9798615 17 Apr 17:10 compact_monitor_2_1776435041115.mp4
-rw-r--r-- 1 lukas staff 4503179 17 Apr 17:16 compact_monitor_2_1776435368020.mp4
-rw-r--r-- 1 lukas staff 857002 17 Apr 17:16 compact_monitor_2_1776435376040.mp4
-rw-r--r-- 1 lukas staff 8587996 17 Apr 17:21 compact_monitor_2_1776435687051.mp4
-rw-r--r-- 1 lukas staff 5052247 17 Apr 17:26 compact_monitor_2_1776436009787.mp4
-rw-r--r-- 1 lukas staff 2947924 17 Apr 17:32 compact_monitor_2_1776436320877.mp4
-rw-r--r-- 1 lukas staff 689465 17 Apr 17:37 compact_monitor_2_1776436632536.mp4
-rw-r--r-- 1 lukas staff 1353469 17 Apr 17:42 compact_monitor_2_1776436940788.mp4
-rw-r--r-- 1 lukas staff 870893 17 Apr 17:47 compact_monitor_2_1776437249077.mp4
-rw-r--r-- 1 lukas staff 2653839 17 Apr 17:52 compact_monitor_2_1776437556659.mp4
-rw-r--r-- 1 lukas staff 4310138 17 Apr 17:57 compact_monitor_2_1776437864727.mp4
-rw-r--r-- 1 lukas staff 3683875 17 Apr 18:02 compact_monitor_2_1776438173313.mp4
-rw-r--r-- 1 lukas staff 1916129 17 Apr 18:08 compact_monitor_2_1776438481043.mp4
-rw-r--r-- 1 lukas staff 2349626 17 Apr 18:13 compact_monitor_2_1776438785553.mp4
-rw-r--r-- 1 lukas staff 641202 17 Apr 18:18 compact_monitor_2_1776439092011.mp4
-rw-r--r-- 1 lukas staff 3006319 17 Apr 18:23 compact_monitor_2_1776439398485.mp4
-rw-r--r-- 1 lukas staff 1675776 17 Apr 18:28 compact_monitor_2_1776439705765.mp4
-rw-r--r-- 1 lukas staff 4465225 17 Apr 18:34 compact_monitor_2_1776440055922.mp4
-rw-r--r-- 1 lukas staff 2351472 17 Apr 21:05 compact_monitor_2_1776449140917.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ rsync -av --ignore-existing \
~/.screenpipe/data/data/2026-04-14/ \
/Volumes/Test/screenpipe/data/2026-04-14/
building file list ... done
./
compact_monitor_1_1776236348162.mp4
compact_monitor_1_1776236355103.mp4
compact_monitor_2_1776236357169.mp4
compact_monitor_2_1776236373794.mp4
sent 41217485 bytes received 114 bytes 4338694.63 bytes/sec
total size is 1085072596 speedup is 26.33
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-17 $ cd ..
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data $ cd 2026-04-14
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ll
total 2120256
drwxr-xr-x 247 lukas staff 7904 15 Apr 09:59 .
drwxr-xr-x 11 lukas staff 352 17 Apr 08:56 ..
-rw-r--r--@ 1 lukas staff 581687 14 Apr 09:34 compact_monitor_1_1776148466581.mp4
-rw-r--r--@ 1 lukas staff 702153 14 Apr 09:39 compact_monitor_1_1776148768082.mp4
-rw-r--r--@ 1 lukas staff 251978 14 Apr 09:44 compact_monitor_1_1776149071467.mp4
-rw-r--r-- 1 lukas staff 1717429 14 Apr 09:49 compact_monitor_1_1776149373136.mp4
-rw-r--r-- 1 lukas staff 3477530 14 Apr 09:54 compact_monitor_1_1776149679747.mp4
-rw-r--r-- 1 lukas staff 4579266 14 Apr 09:59 compact_monitor_1_1776149991618.mp4
-rw-r--r-- 1 lukas staff 2305892 14 Apr 10:05 compact_monitor_1_1776150305479.mp4
-rw-r--r-- 1 lukas staff 2464098 14 Apr 10:10 compact_monitor_1_1776150611148.mp4
-rw-r--r-- 1 lukas staff 2640699 14 Apr 10:15 compact_monitor_1_1776150917977.mp4
-rw-r--r-- 1 lukas staff 2938324 14 Apr 10:20 compact_monitor_1_1776151225175.mp4
-rw-r--r-- 1 lukas staff 5734426 14 Apr 10:25 compact_monitor_1_1776151533655.mp4
-rw-r--r-- 1 lukas staff 711441 14 Apr 10:30 compact_monitor_1_1776151841776.mp4
-rw-r--r-- 1 lukas staff 373214 14 Apr 10:35 compact_monitor_1_1776152149591.mp4
-rw-r--r-- 1 lukas staff 259200 14 Apr 10:40 compact_monitor_1_1776152456802.mp4
-rw-r--r-- 1 lukas staff 563549 14 Apr 10:46 compact_monitor_1_1776152770846.mp4
-rw-r--r-- 1 lukas staff 1085034 14 Apr 10:51 compact_monitor_1_1776153081304.mp4
-rw-r--r-- 1 lukas staff 5856145 14 Apr 10:56 compact_monitor_1_1776153389824.mp4
-rw-r--r-- 1 lukas staff 3729206 14 Apr 11:01 compact_monitor_1_1776153702196.mp4
-rw-r--r-- 1 lukas staff 1381857 14 Apr 11:06 compact_monitor_1_1776154011626.mp4
-rw-r--r-- 1 lukas staff 590718 14 Apr 11:12 compact_monitor_1_1776154319547.mp4
-rw-r--r-- 1 lukas staff 1306438 14 Apr 11:17 compact_monitor_1_1776154623893.mp4
-rw-r--r-- 1 lukas staff 216930 14 Apr 11:22 compact_monitor_1_1776154930014.mp4
-rw-r--r-- 1 lukas staff 473698 14 Apr 11:27 compact_monitor_1_1776155238144.mp4
-rw-r--r-- 1 lukas staff 3051314 14 Apr 11:32 compact_monitor_1_1776155547239.mp4
-rw-r--r-- 1 lukas staff 253380 14 Apr 11:37 compact_monitor_1_1776155850943.mp4
-rw-r--r-- 1 lukas staff 258154 14 Apr 11:42 compact_monitor_1_1776156154229.mp4
-rw-r--r-- 1 lukas staff 962893 14 Apr 11:47 compact_monitor_1_1776156458244.mp4
-rw-r--r-- 1 lukas staff 1806149 14 Apr 11:52 compact_monitor_1_1776156762972.mp4
-rw-r--r-- 1 lukas staff 2280711 14 Apr 11:57 compact_monitor_1_1776157067935.mp4
-rw-r--r-- 1 lukas staff 1779777 14 Apr 12:03 compact_monitor_1_1776157380235.mp4
-rw-r--r-- 1 lukas staff 792745 14 Apr 12:08 compact_monitor_1_1776157700511.mp4
-rw-r--r-- 1 lukas staff 290618 14 Apr 12:13 compact_monitor_1_1776158016840.mp4
-rw-r--r-- 1 lukas staff 572761 14 Apr 12:18 compact_monitor_1_1776158333836.mp4
-rw-r--r-- 1 lukas staff 200419 14 Apr 12:24 compact_monitor_1_1776158651565.mp4
-rw-r--r-- 1 lukas staff 190795 14 Apr 12:29 compact_monitor_1_1776158966333.mp4
-rw-r--r-- 1 lukas staff 2126277 14 Apr 12:34 compact_monitor_1_1776159274939.mp4
-rw-r--r-- 1 lukas staff 3747860 14 Apr 12:39 compact_monitor_1_1776159588710.mp4
-rw-r--r-- 1 lukas staff 2152422 14 Apr 12:45 compact_monitor_1_1776159900733.mp4
-rw-r--r-- 1 lukas staff 709258 14 Apr 12:50 compact_monitor_1_1776160204634.mp4
-rw-r--r-- 1 lukas staff 1158847 14 Apr 12:55 compact_monitor_1_1776160508015.mp4
-rw-r--r-- 1 lukas staff 1813578 14 Apr 13:00 compact_monitor_1_1776160811806.mp4
-rw-r--r-- 1 lukas staff 684607 14 Apr 13:05 compact_monitor_1_1776161119981.mp4
-rw-r--r-- 1 lukas staff 636562 14 Apr 13:10 compact_monitor_1_1776161424648.mp4
-rw-r--r-- 1 lukas staff 323432 14 Apr 13:15 compact_monitor_1_1776161728448.mp4
-rw-r--r-- 1 lukas staff 294055 14 Apr 13:20 compact_monitor_1_1776162032394.mp4
-rw-r--r-- 1 lukas staff 296941 14 Apr 13:25 compact_monitor_1_1776162336175.mp4
-rw-r--r-- 1 lukas staff 292219 14 Apr 13:30 compact_monitor_1_1776162640619.mp4
-rw-r--r-- 1 lukas staff 293726 14 Apr 13:35 compact_monitor_1_1776162943050.mp4
-rw-r--r-- 1 lukas staff 832989 14 Apr 13:40 compact_monitor_1_1776163246420.mp4
-rw-r--r-- 1 lukas staff 1068134 14 Apr 13:45 compact_monitor_1_1776163549145.mp4
-rw-r--r-- 1 lukas staff 501189 14 Apr 13:50 compact_monitor_1_1776163853383.mp4
-rw-r--r-- 1 lukas staff 930299 14 Apr 13:55 compact_monitor_1_1776164155311.mp4
-rw-r--r-- 1 lukas staff 2515358 14 Apr 14:01 compact_monitor_1_1776164459131.mp4
-rw-r--r-- 1 lukas staff 1286863 14 Apr 14:06 compact_monitor_1_1776164766940.mp4
-rw-r--r-- 1 lukas staff 1472795 14 Apr 14:15 compact_monitor_1_1776165318512.mp4
-rw-r--r-- 1 lukas staff 439699 14 Apr 14:20 compact_monitor_1_1776165627501.mp4
-rw-r--r-- 1 lukas staff 519424 14 Apr 14:25 compact_monitor_1_1776165931952.mp4
-rw-r--r-- 1 lukas staff 2267443 14 Apr 14:30 compact_monitor_1_1776166235408.mp4
-rw-r--r-- 1 lukas staff 1637916 14 Apr 14:35 compact_monitor_1_1776166551721.mp4
-rw-r--r-- 1 lukas staff 1111434 14 Apr 14:41 compact_monitor_1_1776166862836.mp4
-rw-r--r-- 1 lukas staff 1546177 14 Apr 14:46 compact_monitor_1_1776167176709.mp4
-rw-r--r-- 1 lukas staff 466769 14 Apr 14:51 compact_monitor_1_1776167484535.mp4
-rw-r--r-- 1 lukas staff 993316 14 Apr 14:56 compact_monitor_1_1776167793776.mp4
-rw-r--r-- 1 lukas staff 2902714 14 Apr 15:01 compact_monitor_1_1776168105399.mp4
-rw-r--r-- 1 lukas staff 1279133 14 Apr 15:06 compact_monitor_1_1776168413169.mp4
-rw-r--r-- 1 lukas staff 1132592 14 Apr 15:12 compact_monitor_1_1776168722629.mp4
-rw-r--r-- 1 lukas staff 355416 14 Apr 15:17 compact_monitor_1_1776169031962.mp4
-rw-r--r-- 1 lukas staff 345697 14 Apr 15:22 compact_monitor_1_1776169337693.mp4
-rw-r--r-- 1 lukas staff 3063911 14 Apr 15:27 compact_monitor_1_1776169641353.mp4
-rw-r--r-- 1 lukas staff 5369163 14 Apr 15:32 compact_monitor_1_1776169957193.mp4
-rw-r--r-- 1 lukas staff 3605997 14 Apr 15:38 compact_monitor_1_1776170274586.mp4
-rw-r--r-- 1 lukas staff 1662201 14 Apr 15:43 compact_monitor_1_1776170596259.mp4
-rw-r--r-- 1 lukas staff 2518520 14 Apr 15:48 compact_monitor_1_1776170900299.mp4
-rw-r--r-- 1 lukas staff 2298616 14 Apr 15:53 compact_monitor_1_1776171206621.mp4
-rw-r--r-- 1 lukas staff 252208 14 Apr 15:58 compact_monitor_1_1776171511042.mp4
-rw-r--r-- 1 lukas staff 547163 14 Apr 16:03 compact_monitor_1_1776171816609.mp4
-rw-r--r-- 1 lukas staff 3548604 14 Apr 16:08 compact_monitor_1_1776172119791.mp4
-rw-r--r-- 1 lukas staff 1006390 14 Apr 16:13 compact_monitor_1_1776172427942.mp4
-rw-r--r-- 1 lukas staff 1168310 14 Apr 16:18 compact_monitor_1_1776172735350.mp4
-rw-r--r-- 1 lukas staff 2138214 14 Apr 16:24 compact_monitor_1_1776173046731.mp4
-rw-r--r-- 1 lukas staff 2138875 14 Apr 16:29 compact_monitor_1_1776173354299.mp4
-rw-r--r-- 1 lukas staff 336470 14 Apr 16:34 compact_monitor_1_1776173662610.mp4
-rw-r--r-- 1 lukas staff 330494 14 Apr 16:39 compact_monitor_1_1776173971011.mp4
-rw-r--r-- 1 lukas staff 574889 14 Apr 16:44 compact_monitor_1_1776174275028.mp4
-rw-r--r-- 1 lukas staff 450335 14 Apr 16:49 compact_monitor_1_1776174580719.mp4
-rw-r--r-- 1 lukas staff 452365 14 Apr 16:54 compact_monitor_1_1776174888498.mp4
-rw-r--r-- 1 lukas staff 499947 14 Apr 16:59 compact_monitor_1_1776175195769.mp4
-rw-r--r-- 1 lukas staff 501324 14 Apr 17:05 compact_monitor_1_1776175516084.mp4
-rw-r--r-- 1 lukas staff 1187862 14 Apr 17:10 compact_monitor_1_1776175831658.mp4
-rw-r--r-- 1 lukas staff 4276500 14 Apr 17:15 compact_monitor_1_1776176143265.mp4
-rw-r--r-- 1 lukas staff 3712128 14 Apr 17:21 compact_monitor_1_1776176471641.mp4
-rw-r--r-- 1 lukas staff 3520036 14 Apr 17:26 compact_monitor_1_1776176786477.mp4
-rw-r--r-- 1 lukas staff 4125306 14 Apr 17:31 compact_monitor_1_1776177099043.mp4
-rw-r--r-- 1 lukas staff 3547886 14 Apr 17:37 compact_monitor_1_1776177433201.mp4
-rw-r--r-- 1 lukas staff 2400891 14 Apr 17:42 compact_monitor_1_1776177752872.mp4
-rw-r--r-- 1 lukas staff 4689207 14 Apr 17:47 compact_monitor_1_1776178058207.mp4
-rw-r--r-- 1 lukas staff 1801277 14 Apr 17:53 compact_monitor_1_1776178379517.mp4
-rw-r--r-- 1 lukas staff 3259926 14 Apr 17:58 compact_monitor_1_1776178686281.mp4
-rw-r--r-- 1 lukas staff 1470635 14 Apr 18:03 compact_monitor_1_1776178992046.mp4
-rw-r--r-- 1 lukas staff 3102429 14 Apr 18:08 compact_monitor_1_1776179297527.mp4
-rw-r--r-- 1 lukas staff 223940 14 Apr 18:13 compact_monitor_1_1776179607218.mp4
-rw-r--r-- 1 lukas staff 871065 14 Apr 18:13 compact_monitor_1_1776179613012.mp4
-rw-r--r-- 1 lukas staff 1029083 14 Apr 18:18 compact_monitor_1_1776179929971.mp4
-rw-r--r-- 1 lukas staff 1117436 14 Apr 18:24 compact_monitor_1_1776180248849.mp4
-rw-r--r-- 1 lukas staff 987269 14 Apr 18:29 compact_monitor_1_1776180569996.mp4
-rw-r--r-- 1 lukas staff 896704 14 Apr 18:34 compact_monitor_1_1776180888049.mp4
-rw-r--r-- 1 lukas staff 1945946 14 Apr 18:40 compact_monitor_1_1776181202583.mp4
-rw-r--r-- 1 lukas staff 862072 14 Apr 18:45 compact_monitor_1_1776181526071.mp4
-rw-r--r-- 1 lukas staff 813756 14 Apr 18:50 compact_monitor_1_1776181848713.mp4
-rw-r--r-- 1 lukas staff 813226 14 Apr 18:56 compact_monitor_1_1776182167765.mp4
-rw-r--r-- 1 lukas staff 792289 14 Apr 19:01 compact_monitor_1_1776182486906.mp4
-rw-r--r-- 1 lukas staff 900197 14 Apr 19:06 compact_monitor_1_1776182803477.mp4
-rw-r--r-- 1 lukas staff 903090 14 Apr 19:12 compact_monitor_1_1776183124102.mp4
-rw-r--r-- 1 lukas staff 821885 14 Apr 19:17 compact_monitor_1_1776183446647.mp4
-rw-r--r-- 1 lukas staff 827224 14 Apr 19:22 compact_monitor_1_1776183765602.mp4
-rw-r--r-- 1 lukas staff 844977 14 Apr 19:28 compact_monitor_1_1776184085319.mp4
-rw-r--r-- 1 lukas staff 4160651 15 Apr 09:59 compact_monitor_1_1776236348162.mp4
-rw-r--r-- 1 lukas staff 2257702 15 Apr 09:59 compact_monitor_1_1776236355103.mp4
-rw-r--r-- 1 lukas staff 803789 14 Apr 09:34 compact_monitor_2_1776148467123.mp4
-rw-r--r-- 1 lukas staff 846598 14 Apr 09:39 compact_monitor_2_1776148769344.mp4
-rw-r--r-- 1 lukas staff 380187 14 Apr 09:44 compact_monitor_2_1776149072222.mp4
-rw-r--r-- 1 lukas staff 4330357 14 Apr 09:49 compact_monitor_2_1776149375411.mp4
-rw-r--r-- 1 lukas staff 5979630 14 Apr 09:54 compact_monitor_2_1776149684838.mp4
-rw-r--r-- 1 lukas staff 5685863 14 Apr 10:00 compact_monitor_2_1776149997069.mp4
-rw-r--r-- 1 lukas staff 1817789 14 Apr 10:05 compact_monitor_2_1776150308175.mp4
-rw-r--r-- 1 lukas staff 3734598 14 Apr 10:10 compact_monitor_2_1776150613826.mp4
-rw-r--r-- 1 lukas staff 7824075 14 Apr 10:15 compact_monitor_2_1776150920663.mp4
-rw-r--r-- 1 lukas staff 6299436 14 Apr 10:20 compact_monitor_2_1776151228707.mp4
-rw-r--r-- 1 lukas staff 3269154 14 Apr 10:25 compact_monitor_2_1776151537695.mp4
-rw-r--r-- 1 lukas staff 9004762 14 Apr 10:30 compact_monitor_2_1776151844100.mp4
-rw-r--r-- 1 lukas staff 4710671 14 Apr 10:35 compact_monitor_2_1776152152089.mp4
-rw-r--r-- 1 lukas staff 11173604 14 Apr 10:41 compact_monitor_2_1776152458959.mp4
-rw-r--r-- 1 lukas staff 6761014 14 Apr 10:46 compact_monitor_2_1776152773411.mp4
-rw-r--r-- 1 lukas staff 3510200 14 Apr 10:51 compact_monitor_2_1776153084189.mp4
-rw-r--r-- 1 lukas staff 5292708 14 Apr 10:56 compact_monitor_2_1776153395785.mp4
-rw-r--r-- 1 lukas staff 5487046 14 Apr 11:01 compact_monitor_2_1776153706319.mp4
-rw-r--r-- 1 lukas staff 5305685 14 Apr 11:06 compact_monitor_2_1776154014738.mp4
-rw-r--r-- 1 lukas staff 1963074 14 Apr 11:12 compact_monitor_2_1776154320980.mp4
-rw-r--r-- 1 lukas staff 2513039 14 Apr 11:17 compact_monitor_2_1776154625932.mp4
-rw-r--r-- 1 lukas staff 2532455 14 Apr 11:22 compact_monitor_2_1776154932083.mp4
-rw-r--r-- 1 lukas staff 5825408 14 Apr 11:27 compact_monitor_2_1776155240989.mp4
-rw-r--r-- 1 lukas staff 2066410 14 Apr 11:32 compact_monitor_2_1776155549265.mp4
-rw-r--r-- 1 lukas staff 3082476 14 Apr 11:37 compact_monitor_2_1776155851806.mp4
-rw-r--r-- 1 lukas staff 1587810 14 Apr 11:42 compact_monitor_2_1776156155857.mp4
-rw-r--r-- 1 lukas staff 2346718 14 Apr 11:47 compact_monitor_2_1776156460205.mp4
-rw-r--r-- 1 lukas staff 1579555 14 Apr 11:52 compact_monitor_2_1776156764898.mp4
-rw-r--r-- 1 lukas staff 5481864 14 Apr 11:57 compact_monitor_2_1776157072094.mp4
-rw-r--r-- 1 lukas staff 6527601 14 Apr 12:03 compact_monitor_2_1776157385210.mp4
-rw-r--r-- 1 lukas staff 9023055 14 Apr 12:08 compact_monitor_2_1776157705883.mp4
-rw-r--r-- 1 lukas staff 7566360 14 Apr 12:13 compact_monitor_2_1776158020136.mp4
-rw-r--r-- 1 lukas staff 8801302 14 Apr 12:19 compact_monitor_2_1776158336585.mp4
-rw-r--r-- 1 lukas staff 4139540 14 Apr 12:24 compact_monitor_2_1776158655295.mp4
-rw-r--r-- 1 lukas staff 2987994 14 Apr 12:29 compact_monitor_2_1776158968629.mp4
-rw-r--r-- 1 lukas staff 6323688 14 Apr 12:34 compact_monitor_2_1776159279327.mp4
-rw-r--r-- 1 lukas staff 2684920 14 Apr 12:40 compact_monitor_2_1776159594527.mp4
-rw-r--r-- 1 lukas staff 1646460 14 Apr 12:45 compact_monitor_2_1776159902504.mp4
-rw-r--r-- 1 lukas staff 1767063 14 Apr 12:50 compact_monitor_2_1776160206071.mp4
-rw-r--r-- 1 lukas staff 1910044 14 Apr 12:55 compact_monitor_2_1776160509646.mp4
-rw-r--r-- 1 lukas staff 5101631 14 Apr 13:00 compact_monitor_2_1776160814860.mp4
-rw-r--r-- 1 lukas staff 2487221 14 Apr 13:05 compact_monitor_2_1776161121862.mp4
-rw-r--r-- 1 lukas staff 1452868 14 Apr 13:10 compact_monitor_2_1776161425872.mp4
-rw-r--r-- 1 lukas staff 2963557 14 Apr 13:15 compact_monitor_2_1776161729470.mp4
-rw-r--r-- 1 lukas staff 984939 14 Apr 13:20 compact_monitor_2_1776162033592.mp4
-rw-r--r-- 1 lukas staff 3411829 14 Apr 13:25 compact_monitor_2_1776162337569.mp4
-rw-r--r-- 1 lukas staff 622723 14 Apr 13:30 compact_monitor_2_1776162641477.mp4
-rw-r--r-- 1 lukas staff 2472562 14 Apr 13:35 compact_monitor_2_1776162943983.mp4
-rw-r--r-- 1 lukas staff 1139489 14 Apr 13:40 compact_monitor_2_1776163247509.mp4
-rw-r--r-- 1 lukas staff 862846 14 Apr 13:45 compact_monitor_2_1776163550848.mp4
-rw-r--r-- 1 lukas staff 274959 14 Apr 13:50 compact_monitor_2_1776163854468.mp4
-rw-r--r-- 1 lukas staff 2036659 14 Apr 13:55 compact_monitor_2_1776164156817.mp4
-rw-r--r-- 1 lukas staff 6134905 14 Apr 14:01 compact_monitor_2_1776164461879.mp4
-rw-r--r-- 1 lukas staff 9022378 14 Apr 14:06 compact_monitor_2_1776164770881.mp4
-rw-r--r-- 1 lukas staff 4566763 14 Apr 14:15 compact_monitor_2_1776165320959.mp4
-rw-r--r-- 1 lukas staff 462447 14 Apr 14:20 compact_monitor_2_1776165629627.mp4
-rw-r--r-- 1 lukas staff 709149 14 Apr 14:25 compact_monitor_2_1776165933147.mp4
-rw-r--r-- 1 lukas staff 4478027 14 Apr 14:30 compact_monitor_2_1776166241146.mp4
-rw-r--r-- 1 lukas staff 7488847 14 Apr 14:36 compact_monitor_2_1776166555947.mp4
-rw-r--r-- 1 lukas staff 7883274 14 Apr 14:41 compact_monitor_2_1776166866538.mp4
-rw-r--r-- 1 lukas staff 2869256 14 Apr 14:46 compact_monitor_2_1776167179562.mp4
-rw-r--r-- 1 lukas staff 3068440 14 Apr 14:51 compact_monitor_2_1776167487518.mp4
-rw-r--r-- 1 lukas staff 1816545 14 Apr 14:56 compact_monitor_2_1776167799896.mp4
-rw-r--r-- 1 lukas staff 3180474 14 Apr 15:01 compact_monitor_2_1776168109470.mp4
-rw-r--r-- 1 lukas staff 3774140 14 Apr 15:07 compact_monitor_2_1776168415670.mp4
-rw-r--r-- 1 lukas staff 4536363 14 Apr 15:12 compact_monitor_2_1776168725137.mp4
-rw-r--r-- 1 lukas staff 2387221 14 Apr 15:17 compact_monitor_2_1776169033283.mp4
-rw-r--r-- 1 lukas staff 2605350 14 Apr 15:22 compact_monitor_2_1776169338888.mp4
-rw-r--r-- 1 lukas staff 6906038 14 Apr 15:27 compact_monitor_2_1776169645977.mp4
-rw-r--r-- 1 lukas staff 5738495 14 Apr 15:32 compact_monitor_2_1776169965047.mp4
-rw-r--r-- 1 lukas staff 5595644 14 Apr 15:38 compact_monitor_2_1776170281359.mp4
-rw-r--r-- 1 lukas staff 584749 14 Apr 15:43 compact_monitor_2_1776170598047.mp4
-rw-r--r-- 1 lukas staff 2633541 14 Apr 15:48 compact_monitor_2_1776170903735.mp4
-rw-r--r-- 1 lukas staff 770182 14 Apr 15:53 compact_monitor_2_1776171208825.mp4
-rw-r--r-- 1 lukas staff 1658362 14 Apr 15:58 compact_monitor_2_1776171512473.mp4
-rw-r--r-- 1 lukas staff 295793 14 Apr 16:03 compact_monitor_2_1776171817959.mp4
-rw-r--r-- 1 lukas staff 3540965 14 Apr 16:08 compact_monitor_2_1776172123631.mp4
-rw-r--r-- 1 lukas staff 3589660 14 Apr 16:13 compact_monitor_2_1776172430586.mp4
-rw-r--r-- 1 lukas staff 4735044 14 Apr 16:19 compact_monitor_2_1776172739210.mp4
-rw-r--r-- 1 lukas staff 4951644 14 Apr 16:24 compact_monitor_2_1776173049122.mp4
-rw-r--r-- 1 lukas staff 5939102 14 Apr 16:29 compact_monitor_2_1776173357170.mp4
-rw-r--r-- 1 lukas staff 2549744 14 Apr 16:34 compact_monitor_2_1776173665142.mp4
-rw-r--r-- 1 lukas staff 996149 14 Apr 16:39 compact_monitor_2_1776173972456.mp4
-rw-r--r-- 1 lukas staff 2663346 14 Apr 16:44 compact_monitor_2_1776174276676.mp4
-rw-r--r-- 1 lukas staff 1776844 14 Apr 16:49 compact_monitor_2_1776174582351.mp4
-rw-r--r-- 1 lukas staff 1669202 14 Apr 16:54 compact_monitor_2_1776174889930.mp4
-rw-r--r-- 1 lukas staff 5414828 14 Apr 17:00 compact_monitor_2_1776175198918.mp4
-rw-r--r-- 1 lukas staff 5727100 14 Apr 17:05 compact_monitor_2_1776175518133.mp4
-rw-r--r-- 1 lukas staff 6080220 14 Apr 17:10 compact_monitor_2_1776175835473.mp4
-rw-r--r-- 1 lukas staff 3631681 14 Apr 17:16 compact_monitor_2_1776176159421.mp4
-rw-r--r-- 1 lukas staff 1861818 14 Apr 17:21 compact_monitor_2_1776176479999.mp4
-rw-r--r-- 1 lukas staff 1471229 14 Apr 17:26 compact_monitor_2_1776176794129.mp4
-rw-r--r-- 1 lukas staff 1792667 14 Apr 17:32 compact_monitor_2_1776177119122.mp4
-rw-r--r-- 1 lukas staff 2398088 14 Apr 17:37 compact_monitor_2_1776177447361.mp4
-rw-r--r-- 1 lukas staff 1873376 14 Apr 17:42 compact_monitor_2_1776177755837.mp4
-rw-r--r-- 1 lukas staff 3686281 14 Apr 17:47 compact_monitor_2_1776178069540.mp4
-rw-r--r-- 1 lukas staff 1842517 14 Apr 17:53 compact_monitor_2_1776178382342.mp4
-rw-r--r-- 1 lukas staff 2595005 14 Apr 17:58 compact_monitor_2_1776178688999.mp4
-rw-r--r-- 1 lukas staff 3352578 14 Apr 18:03 compact_monitor_2_1776178994368.mp4
-rw-r--r-- 1 lukas staff 7474140 14 Apr 18:08 compact_monitor_2_1776179301874.mp4
-rw-r--r-- 1 lukas staff 18300640 14 Apr 18:13 compact_monitor_2_1776179614376.mp4
-rw-r--r-- 1 lukas staff 8302944 14 Apr 18:13 compact_monitor_2_1776179625270.mp4
-rw-r--r-- 1 lukas staff 27338956 14 Apr 18:19 compact_monitor_2_1776179934590.mp4
-rw-r--r-- 1 lukas staff 1061768 14 Apr 18:19 compact_monitor_2_1776179947276.mp4
-rw-r--r-- 1 lukas staff 24282145 14 Apr 18:24 compact_monitor_2_1776180254284.mp4
-rw-r--r-- 1 lukas staff 5647384 14 Apr 18:24 compact_monitor_2_1776180266890.mp4
-rw-r--r-- 1 lukas staff 32748524 14 Apr 18:29 compact_monitor_2_1776180574284.mp4
-rw-r--r-- 1 lukas staff 25769571 14 Apr 18:35 compact_monitor_2_1776180892046.mp4
-rw-r--r-- 1 lukas staff 41983533 14 Apr 18:40 compact_monitor_2_1776181207025.mp4
-rw-r--r-- 1 lukas staff 3365850 14 Apr 18:40 compact_monitor_2_1776181223864.mp4
-rw-r--r-- 1 lukas staff 40919053 14 Apr 18:45 compact_monitor_2_1776181530742.mp4
-rw-r--r-- 1 lukas staff 3870375 14 Apr 18:45 compact_monitor_2_1776181546619.mp4
-rw-r--r-- 1 lukas staff 36175005 14 Apr 18:51 compact_monitor_2_1776181853124.mp4
-rw-r--r-- 1 lukas staff 36717883 14 Apr 18:56 compact_monitor_2_1776182171990.mp4
-rw-r--r-- 1 lukas staff 27140350 14 Apr 19:01 compact_monitor_2_1776182491150.mp4
-rw-r--r-- 1 lukas staff 20914618 14 Apr 19:06 compact_monitor_2_1776182808796.mp4
-rw-r--r-- 1 lukas staff 4716229 14 Apr 19:07 compact_monitor_2_1776182820060.mp4
-rw-r--r-- 1 lukas staff 24788277 14 Apr 19:12 compact_monitor_2_1776183129006.mp4
-rw-r--r-- 1 lukas staff 7974655 14 Apr 19:12 compact_monitor_2_1776183141483.mp4
-rw-r--r-- 1 lukas staff 22872307 14 Apr 19:17 compact_monitor_2_1776183451042.mp4
-rw-r--r-- 1 lukas staff 3283631 14 Apr 19:17 compact_monitor_2_1776183462827.mp4
-rw-r--r-- 1 lukas staff 32308259 14 Apr 19:23 compact_monitor_2_1776183769519.mp4
-rw-r--r-- 1 lukas staff 2847482 14 Apr 19:23 compact_monitor_2_1776183783534.mp4
-rw-r--r-- 1 lukas staff 36823186 14 Apr 19:28 compact_monitor_2_1776184089558.mp4
-rw-r--r-- 1 lukas staff 5825352 14 Apr 19:28 compact_monitor_2_1776184104421.mp4
-rw-r--r-- 1 lukas staff 30437061 15 Apr 09:59 compact_monitor_2_1776236357169.mp4
-rw-r--r-- 1 lukas staff 4350302 15 Apr 09:59 compact_monitor_2_1776236373794.mp4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 11:58:00] ========================================
[2026-04-18 11:58:00] Screenpipe sync starting for: 2026-04-14
[2026-04-18 11:58:00] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 11:58:04] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync
Data dir: OK (245 files, 1.0G)
[+00m04s] ▶ Copying data folder for 2026-04-14
rsync 2026-04-14/ → NAS ✗ 531 / 245 files
[2026-04-18 11:58:09] Archive DB size: 3.0G
[2026-04-18 11:58:09] Total time: 0m9s
[2026-04-18 11:58:09] Sync complete for 2026-04-14
[2026-04-18 11:58:09] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 11:59:41] ========================================
[2026-04-18 11:59:41] Screenpipe sync starting for: 2026-04-14
[2026-04-18 11:59:41] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 11:59:45] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync
Data dir: OK (245 files, 1.0G)
[+00m04s] ▶ Copying data folder for 2026-04-14
rsync 2026-04-14/ → NAS ✓ 2m07s (245 files, 1.0G)
[2026-04-18 12:01:52] Archive DB size: 3.0G
[2026-04-18 12:01:52] Total time: 2m11s
[2026-04-18 12:01:52] Sync complete for 2026-04-14
[2026-04-18 12:01:52] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 12:03:13] ========================================
[2026-04-18 12:03:13] Screenpipe sync starting for: 2026-04-14
[2026-04-18 12:03:13] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/screenpipe
Archive DB: will be created
Data dir: OK (245 files, 1.0G)
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)
Parse error near line 3: unknown database nas
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames
error here ---^
Parse error near line 4: unknown database nas
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements
error here ---^
Parse error near line 5: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events
error here ---^
Parse error near line 6: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text
error here ---^
Parse error near line 7: unknown database nas
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks
error here ---^
Parse error near line 8: unknown database nas
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings
error here ---^
Runtime error near line 9: no such database: nas
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ ls /Volumes/screenpipe/
ls: /Volumes/screenpipe/: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data/data/2026-04-14 $ cd /Volumes
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ll
total 96
drwxr-xr-x 6 root wheel 192 18 Apr 11:17 .
drwxr-xr-x 20 root wheel 640 4 Aug 2024 ..
lrwxr-xr-x 1 root wheel 1 16 Apr 15:43 Macintosh HD -> /
drwx------ 1 lukas staff 16384 11 Apr 15:46 Test
drwx------ 1 lukas staff 16384 13 Mar 10:17 Work
drwx------ 1 lukas staff 16384 17 Apr 21:29 screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ls -la /Volumes/screenpipe/
total 0
ls: /Volumes/screenpipe/: Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ mount | grep screenpipe
//Adm1n@DXP4800PLUS-B5F8/screenpipe on /Volumes/screenpipe (smbfs, nodev, nosuid, mounted by lukas)
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ umount /Volumes/screenpipe
umount: unmount(/Volumes/screenpipe): Operation not permitted
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 12:06:45] ========================================
[2026-04-18 12:06:45] Screenpipe sync starting for: 2026-04-14
[2026-04-18 12:06:45] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/screenpipe
Archive DB: will be created
Data dir: OK (245 files, 1.0G)
[+00m00s] ▶ Counting source rows for 2026-04-14
frames: 10733
elements: 695969
ui_events: 10542
ocr_text: 8206
meetings: 0
[+00m01s] ▶ Initialising tables, indexes, FTS
creating tables ⠋ Runtime error near line 2: unable to open database: /Volumes/screenpipe/archive.db (14)
Parse error near line 3: unknown database nas
CREATE TABLE IF NOT EXISTS nas.frames AS SELECT * FROM main.frames
error here ---^
Parse error near line 4: unknown database nas
CREATE TABLE IF NOT EXISTS nas.elements AS SELECT * FROM main.elements
error here ---^
Parse error near line 5: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ui_events AS SELECT * FROM main.ui_events
error here ---^
Parse error near line 6: unknown database nas
CREATE TABLE IF NOT EXISTS nas.ocr_text AS SELECT * FROM main.ocr_text
error here ---^
Parse error near line 7: unknown database nas
CREATE TABLE IF NOT EXISTS nas.video_chunks AS SELECT * FROM main.video_chunks
error here ---^
Parse error near line 8: unknown database nas
CREATE TABLE IF NOT EXISTS nas.meetings AS SELECT * FROM main.meetings
error here ---^
Runtime error near line 9: no such database: nas
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-14
[2026-04-18 12:06:51] ========================================
[2026-04-18 12:06:51] Screenpipe sync starting for: 2026-04-14
[2026-04-18 12:06:51] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 12:06:55] Date 2026-04-14 already has 10733 frames in archive — skipping DB sync
Data dir: OK (245 files, 1.0G)
[+00m05s] ▶ Copying data folder for 2026-04-14
rsync 2026-04-14/ → NAS ✓ 0m04s (245 files, 1.0G)
[2026-04-18 12:07:00] Archive DB size: 3.0G
[2026-04-18 12:07:00] Total time: 0m9s
[2026-04-18 12:07:00] Sync complete for 2026-04-14
[2026-04-18 12:07:00] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny /Volumes $ ~/.screenpipe/screenpipe_sync.sh 2026-04-15
[2026-04-18 12:07:03] ========================================
[2026-04-18 12:07:03] Screenpipe sync starting for: 2026-04-15
[2026-04-18 12:07:03] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.6G)
NAS mount: OK /Volumes/Test/screenpipe
[2026-04-18 12:07:07] Date 2026-04-15 already has 12874 frames in archive — skipping DB sync
Data dir: OK (241 files, 2.0G)
[+00m04s] ▶ Copying data folder for 2026-04-15
rsync 2026-04-15/ → NAS ✓ 3m22s (241 files, 2.0G)
[2026-04-18 12:10:30] Archive DB size: 3.0G
[2026-04-18 12:10:30] Total time: 3m27s
[2026-04-18 12:10:30] Sync complete for 2026-04-15
[2026-04-18 12:10:30] ============...
|
NULL
|
|
51123
|
1102
|
42
|
2026-04-18T10:44:22.610178+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-18/1776 /Users/lukas/.screenpipe/data/data/2026-04-18/1776509062610_m2.jpg...
|
Finder
|
|
True
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FinderFileEditViewWindowHelpscreenpipe=llminny® Ai FinderFileEditViewWindowHelpscreenpipe=llminny® AirDropC kecentsA ApplicationsD Documents• Desktop( DownloadsA lukasIcloudiCloud Drive283 Sync folderLocations• DXP4800PLUS-B5... ⅔ge NerworeDCKMI• Orange• Redl• Yellow• Green• Blue• Purple@ All Tags..v dataVoalc•2026-04-15>2026-04-14•2026-04-16>2026-04-17> 2026-04-13)2026-04-11> 2026-04-12> 2026-04-09—2026-04-18• System Audio (output)_2026-04-18_10-43-40.mp4soundcore AeroCio (inout) 2026-04-18 10-34-24.m04• soundcore AeroClip (input)_2026-04-18_10-35-26.mp4sounacore Aerocllp inouc 20z0-04-1810-30-06.m04soundcore AeroClip (input)_2026-04-18_10-34-56.mp4• soundcore AeroClip (input)_2026-04-18_10-42-54.mp4• sounccore Aeroclo (1n0u0 2020-04-8 10-32-20.m04• soundcore AeroClip (input) 2026-04-18_10-39-55.mp4• soundcore AeroClip (input)_2026-04-18_10-37-26.mp4C soundcore AeroCio (inout) 2026-04-18 10-43-24.m04• System Audio (output)_2026-04-18_10-39-37.mp4• soundcore AeroClip (input)_2026-04-18_10-36-26.mp4soundcore AeroClip (input)_2026-04-18_10-41-24.mp4• soundcore AeroClip (input)_2026-04-18_10-41-54.mp4• sounccore Aeroclo (1n0u0 2020-04-8 10-38-00.194soundcore AeroClip (input)_2026-04-18_10-38-25.mp4D soundcore AeroClip (input)_2026-04-18_10-42-24.mp4C soundcore AeroCip (inout) 2026-04-18 10-3 -55.mo4• soundcore AeroClip (input)_2026-04-18_10-40-25.mp4• System Audio (output)_2026-04-18_10-39-15.mp4soundcore AeroClip (input)_2026-04-18_10-40-55.mp4System Audio (output)_2026-04-18_10-41-27.mp4• sounccore Aeroclo (1n0u0 2020-04-8 10-30-00.104• System Audio (output)__2026-04-1810-43-18.mp4• System Audio (output)_2026-04-18_10-41-05.mp4• Svstem Aucio (outout) 2026-04-18 10-34-25.m04• System Audio (output)_2026-04-18_10-37-02.mp4• System Audio (output)_2026-04-18_10-42-12.mp4• System Audio (output)_2026-04-18_10-34-49.mp4System Audio (output)_2026-04-18_10-35-11.mp4csysemAucl0 0U10ul 2020-04-8 10-30-33.104• System Audio (output)_2026-04-18_10-35-55.mp4System Audio (output)_2026-04-18_10-36-17.mp4• Svstem Aucio (outout) 2026-04-18 10-36-39.mo4• System Audio (output)_2026-04-18 10-37-24.mp4System Audlo outout 2020-04-18 10-3/-40.M04• System Audio (output)_2026-04-18_10-38-08.mp4System Audio (output)_2026-04-18_10-38-30.mp4sysemAuc0 0U10u0 2020-04-8 10-30-02104• System Audio (output)_2026-04-18_10-39-59.mp4• system Aualo outoul 4040-04-10 10-40-41.M94Svstem Aucio (outout) 2026-04-18 10-40-43.mp4• System Audio (output)_2026-04-18_10-41-50.mp4• System Audio (output)_2026-04-18_10-42-34.mp4• System Audio (output)_2026-04-18_10-42-56.mp4pending-transcriptionsscreenoloe.o.db.sqlite• screenpipe.2026-04-17.0.log• screenpipe.2026-04-16.0.10gscreenpipe.2026-04-15.0.logscreenpipe.2026-04-14.0.log• screenpipe.2026-04-09.0.10gscreenpipe.2026-04-11.0.log88| =|9Date ModifiedToday at 13:44Today at 13:3316 Apr 2026 at 9:1315 Apr 2026 at 9:59Yesterday at 8:57Today at 13:3514 Apr 2026 at 9:2412 Apr 2026 at 9:0213 Apr 2026 at 15:1311 Apr 2026 at 14:53Today at 13:44Today at 13:44odav at 13.34Today at 13:35Today at 13:36Today at 13:35Today at 13:43Today at 13:39Today at 13:40Today at 13:37Today at 13:43Today at 13:39Today at 13:36Today at 13:41Today at 13:42Today at 13:39Today at 13:38Today at 13:42Today at 13:38Today at 13:40Today at 13:39Today at 13:41Today at 13:41Today at 13:37Today at 13:43Today at 13:41Today at 13:34Today at 13:37Today at 13:42Today at 13:35Today at 13:35Today at 13:35Today at 13:36Today at 13:36lodav at 13.3Today at 13:37Today at 13:38Today at 13:38Today at 13:38Today at 13:39Today at 13:40Today at 13:40Today at 13:41Today at 13:42Today at 13:42Today at 13:43Today at 13:3811 Apr 2026 at 15:03Today at 13:44Yesterday at 21:0616 Apr 2026 at 20:3315 Apr 2026 at 18:5514 Apr 2026 at 19:319 Apr 2026 at 21:2/11 Apr 2026 at 23:1474 items, 31,63 GB availableQ Search4,24 GBb.02g-2,15 GB1,09 GB83 .2 MB699,6 MB74,2 MB67.6Mb51 MB40.0 МB34,6 MB198 KB173 KB172 KB151 KB135 KB128 KBFolderTO cerFolderrolderFolderFolderFolderHolderFolderrocenFolderMPCO-4 movieMP-G-4 movieMPEG-4 movieMPEG-4 movieMPEG-4 movieMPEG-4 movieMP-C-4 movle95 KBJSADMPEG-4 movieMPCO-4 movieMP-G-4 movie73 KBMPEG-4 movie/1KbMPEG-4 movie/0 K:MP-G-4 movie67 KBMPEG-4 movieDo KЫMP-C-4 movle58 KBMPEG-4 movie58 KBMPEG-4 movieb5KBMP-G-4 movie48 KBMPEG-4 movie33 KbMPEG-4 movie27 KBMPEG-4 movie22 KBMPEG-4 movieMP-C-4 movle14 KB12 KBMPEG-4 movieMPCO-4 movieMP-G-4 movie5 KB5 KBMPEG-4 movieMPEG-4 movieMPEG-4 movie5 KB5 KB5 KB5 KBMPEG-4 movieMP-C-4 movleMPEG-4 movieMPEG-4 movieMP-G-4 movie5 KBokb5 KB5 KBMPEG-4 movieMPEG-4 movieMPEG-4 movieMPEG-4 movieMP-C-4 movle5 KB5 KBMPEG-4 movieMPCO-4 movieMPEG-4 movie5 KB5 KBMPEG-4 movieMPEG-4 movieMP-G-4 movieZero bytesFolderlero ovesDocu ment3,9 GBDocument208 KBLog File19/ KBLog File176 KBLog File162 KbLoc FlleJKx K.Log File95 KBLog File> 0.Lukas Kovalik's Mac.Lukas Kovallk's Mac,=llminny• AirDrop•) RecentsA ApplicationsD Documents• Desktop•) Downloadsif lukasiCloudiCloud Drive283 Sync folderLocationsLJ DXP4800PLUS-B5... €Ga NetworkTagsDCKMI• Orange• Red• Yellow• Green• Blue• Purple@ All Tags..screenoloeNamedo.sclite-shm• db.sqlite-wal•ao.• data-1 screenpipe sync.sharchive..#recycleao.solleu screenpipe.db•pipesDate ModifiedToday at 13:15Today at 13:11Today at 12:54Today at 12:18Today at 12:06Yesterday at 22:19Yesterday at 21:2916 Apr 2026 at 17:0713 Aor 2026 at 1/.4111 Apr 2026 at 16:51100%4]Sat 18 Apr 13:44:22Q SearchV SIZe33 KBDocumentZero bytesDocument14/KBFolder4,99 GBFolder14 KBTerminal scripts3.l8GbDocu ment5,42 GBFolder2,82 GBDocumentZero bytesDocument13 KBFolder...
|
NULL
|
-91283292779991388
|
NULL
|
app_switch
|
ocr
|
NULL
|
FinderFileEditViewWindowHelpscreenpipe=llminny® Ai FinderFileEditViewWindowHelpscreenpipe=llminny® AirDropC kecentsA ApplicationsD Documents• Desktop( DownloadsA lukasIcloudiCloud Drive283 Sync folderLocations• DXP4800PLUS-B5... ⅔ge NerworeDCKMI• Orange• Redl• Yellow• Green• Blue• Purple@ All Tags..v dataVoalc•2026-04-15>2026-04-14•2026-04-16>2026-04-17> 2026-04-13)2026-04-11> 2026-04-12> 2026-04-09—2026-04-18• System Audio (output)_2026-04-18_10-43-40.mp4soundcore AeroCio (inout) 2026-04-18 10-34-24.m04• soundcore AeroClip (input)_2026-04-18_10-35-26.mp4sounacore Aerocllp inouc 20z0-04-1810-30-06.m04soundcore AeroClip (input)_2026-04-18_10-34-56.mp4• soundcore AeroClip (input)_2026-04-18_10-42-54.mp4• sounccore Aeroclo (1n0u0 2020-04-8 10-32-20.m04• soundcore AeroClip (input) 2026-04-18_10-39-55.mp4• soundcore AeroClip (input)_2026-04-18_10-37-26.mp4C soundcore AeroCio (inout) 2026-04-18 10-43-24.m04• System Audio (output)_2026-04-18_10-39-37.mp4• soundcore AeroClip (input)_2026-04-18_10-36-26.mp4soundcore AeroClip (input)_2026-04-18_10-41-24.mp4• soundcore AeroClip (input)_2026-04-18_10-41-54.mp4• sounccore Aeroclo (1n0u0 2020-04-8 10-38-00.194soundcore AeroClip (input)_2026-04-18_10-38-25.mp4D soundcore AeroClip (input)_2026-04-18_10-42-24.mp4C soundcore AeroCip (inout) 2026-04-18 10-3 -55.mo4• soundcore AeroClip (input)_2026-04-18_10-40-25.mp4• System Audio (output)_2026-04-18_10-39-15.mp4soundcore AeroClip (input)_2026-04-18_10-40-55.mp4System Audio (output)_2026-04-18_10-41-27.mp4• sounccore Aeroclo (1n0u0 2020-04-8 10-30-00.104• System Audio (output)__2026-04-1810-43-18.mp4• System Audio (output)_2026-04-18_10-41-05.mp4• Svstem Aucio (outout) 2026-04-18 10-34-25.m04• System Audio (output)_2026-04-18_10-37-02.mp4• System Audio (output)_2026-04-18_10-42-12.mp4• System Audio (output)_2026-04-18_10-34-49.mp4System Audio (output)_2026-04-18_10-35-11.mp4csysemAucl0 0U10ul 2020-04-8 10-30-33.104• System Audio (output)_2026-04-18_10-35-55.mp4System Audio (output)_2026-04-18_10-36-17.mp4• Svstem Aucio (outout) 2026-04-18 10-36-39.mo4• System Audio (output)_2026-04-18 10-37-24.mp4System Audlo outout 2020-04-18 10-3/-40.M04• System Audio (output)_2026-04-18_10-38-08.mp4System Audio (output)_2026-04-18_10-38-30.mp4sysemAuc0 0U10u0 2020-04-8 10-30-02104• System Audio (output)_2026-04-18_10-39-59.mp4• system Aualo outoul 4040-04-10 10-40-41.M94Svstem Aucio (outout) 2026-04-18 10-40-43.mp4• System Audio (output)_2026-04-18_10-41-50.mp4• System Audio (output)_2026-04-18_10-42-34.mp4• System Audio (output)_2026-04-18_10-42-56.mp4pending-transcriptionsscreenoloe.o.db.sqlite• screenpipe.2026-04-17.0.log• screenpipe.2026-04-16.0.10gscreenpipe.2026-04-15.0.logscreenpipe.2026-04-14.0.log• screenpipe.2026-04-09.0.10gscreenpipe.2026-04-11.0.log88| =|9Date ModifiedToday at 13:44Today at 13:3316 Apr 2026 at 9:1315 Apr 2026 at 9:59Yesterday at 8:57Today at 13:3514 Apr 2026 at 9:2412 Apr 2026 at 9:0213 Apr 2026 at 15:1311 Apr 2026 at 14:53Today at 13:44Today at 13:44odav at 13.34Today at 13:35Today at 13:36Today at 13:35Today at 13:43Today at 13:39Today at 13:40Today at 13:37Today at 13:43Today at 13:39Today at 13:36Today at 13:41Today at 13:42Today at 13:39Today at 13:38Today at 13:42Today at 13:38Today at 13:40Today at 13:39Today at 13:41Today at 13:41Today at 13:37Today at 13:43Today at 13:41Today at 13:34Today at 13:37Today at 13:42Today at 13:35Today at 13:35Today at 13:35Today at 13:36Today at 13:36lodav at 13.3Today at 13:37Today at 13:38Today at 13:38Today at 13:38Today at 13:39Today at 13:40Today at 13:40Today at 13:41Today at 13:42Today at 13:42Today at 13:43Today at 13:3811 Apr 2026 at 15:03Today at 13:44Yesterday at 21:0616 Apr 2026 at 20:3315 Apr 2026 at 18:5514 Apr 2026 at 19:319 Apr 2026 at 21:2/11 Apr 2026 at 23:1474 items, 31,63 GB availableQ Search4,24 GBb.02g-2,15 GB1,09 GB83 .2 MB699,6 MB74,2 MB67.6Mb51 MB40.0 МB34,6 MB198 KB173 KB172 KB151 KB135 KB128 KBFolderTO cerFolderrolderFolderFolderFolderHolderFolderrocenFolderMPCO-4 movieMP-G-4 movieMPEG-4 movieMPEG-4 movieMPEG-4 movieMPEG-4 movieMP-C-4 movle95 KBJSADMPEG-4 movieMPCO-4 movieMP-G-4 movie73 KBMPEG-4 movie/1KbMPEG-4 movie/0 K:MP-G-4 movie67 KBMPEG-4 movieDo KЫMP-C-4 movle58 KBMPEG-4 movie58 KBMPEG-4 movieb5KBMP-G-4 movie48 KBMPEG-4 movie33 KbMPEG-4 movie27 KBMPEG-4 movie22 KBMPEG-4 movieMP-C-4 movle14 KB12 KBMPEG-4 movieMPCO-4 movieMP-G-4 movie5 KB5 KBMPEG-4 movieMPEG-4 movieMPEG-4 movie5 KB5 KB5 KB5 KBMPEG-4 movieMP-C-4 movleMPEG-4 movieMPEG-4 movieMP-G-4 movie5 KBokb5 KB5 KBMPEG-4 movieMPEG-4 movieMPEG-4 movieMPEG-4 movieMP-C-4 movle5 KB5 KBMPEG-4 movieMPCO-4 movieMPEG-4 movie5 KB5 KBMPEG-4 movieMPEG-4 movieMP-G-4 movieZero bytesFolderlero ovesDocu ment3,9 GBDocument208 KBLog File19/ KBLog File176 KBLog File162 KbLoc FlleJKx K.Log File95 KBLog File> 0.Lukas Kovalik's Mac.Lukas Kovallk's Mac,=llminny• AirDrop•) RecentsA ApplicationsD Documents• Desktop•) Downloadsif lukasiCloudiCloud Drive283 Sync folderLocationsLJ DXP4800PLUS-B5... €Ga NetworkTagsDCKMI• Orange• Red• Yellow• Green• Blue• Purple@ All Tags..screenoloeNamedo.sclite-shm• db.sqlite-wal•ao.• data-1 screenpipe sync.sharchive..#recycleao.solleu screenpipe.db•pipesDate ModifiedToday at 13:15Today at 13:11Today at 12:54Today at 12:18Today at 12:06Yesterday at 22:19Yesterday at 21:2916 Apr 2026 at 17:0713 Aor 2026 at 1/.4111 Apr 2026 at 16:51100%4]Sat 18 Apr 13:44:22Q SearchV SIZe33 KBDocumentZero bytesDocument14/KBFolder4,99 GBFolder14 KBTerminal scripts3.l8GbDocu ment5,42 GBFolder2,82 GBDocumentZero bytesDocument13 KBFolder...
|
NULL
|
|
51124
|
1101
|
37
|
2026-04-18T10:44:22.641681+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-18/1776 /Users/lukas/.screenpipe/data/data/2026-04-18/1776509062641_m1.jpg...
|
Finder
|
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹ >0 lol-zshDOCKER-rw-r--r--→< ₴81DEV (docker)О 882APP (-zsh)• 83-zsh*4screenpipe"• 851lukasstaff0 11Apr15:03screenpipe.dblukasstaff17327818Apr13:34-rw-r--r---rw-r--r--rw-r--r---rw-r-lukasstaffsoundcore AeroClip (input)_2026-04-18_10-34-24.mp413489018 Apr13:35soundcore AeroClip (input)_2026-04-18_10-34-56.mp4lukasstaff17233318Apr13:35soundcore AeroClip (input)_2026-04-18_10-35-26.mp4lukasstaff15144118Apr13:36soundcore AeroClip (input)_2026-04-18_10-35-56.mp4lukasstaff7126518 Apr13:36soundcore AeroClip (input)_2026-04-18_10-36-26.mp4lukasstaff2222718 Apr13:37soundcore AeroClip (input)_2026-04-18_10-36-56.mp4-rw-r--r--1lukasstaff7873018Apr13:37soundcore AeroClip (input)[EMAIL]/data $ 11total2256drwxr-xr-xdrwxr-xr-x-rw-r--r--@-=--30 lukas20lukaslukaslukas1lukas1 lukasstaffstaffstaffstaffstaffstaff96018Apr 13:3964018Apr13:34614816 Apr17:07.DS_Store462818Apr13:34System Audio (output)_2026-04-18_10-34-25.mp4462018Apr13:35System Audio (output)_2026-04-18_10-34-49.mp4462018 Apr13:35System Audio (output)_2026-04-18_10-35-11.mp4* Review scre...• 86ec2-user@ip-..O 87ec2-user@ip-..100% C8•Sat 18 Apr 13:44:22T81О *8-zsh• *9$INClaude-rw-r--r--drwxr-xr-xdrwxr-xr-x-rw-r--rw-r--r---rw-r--r---rw-r--r--rw-r--r---rw-r--r---rw-r--r---rw-r--r---rw-r--r--{lukas1lukas12 lukas2lukaslukaslukaslukaslukaslukas1lukaslukaslukaslukaslukas1lukasstatt464018Apr13:39SystemAud1o (output)_<026-04-18_10-38-S4.mp4staff3347518 Apr13:39System Audio (output)_2026-04-18_10-39-15.mp4staff38418Apr13:33datastaff6418 Apr13:38pending-transcriptionsstaff11 Apr15:03screenpipe.dbstaff17327818Apr13:34soundcore AeroClip (input)_2026-04-18_10-34-24.mp4staff134890staff18 Apr13:35soundcore AeroClip (input)_2026-04-18_10-34-56.mp417233318 Apr13:35soundcore AeroClip (input)_2026-04-18_10-35-26.mp4staff15144118Apr13:36soundcore AeroClip (input)_2026-04-18_10-35-56.mp4staff7126518Apr13:36soundcore AeroClip (input)_2026-04-18_10-36-26.mp4staff2222718 Apr13:37soundcore AeroClip (input)_2026-04-18_10-36-56.mp4staff7873018Apr13:37soundcore AeroClip (input)_2026-04-18_10-37-26.mp4staff5490318Apr13:38soundcore AeroClip (input)_2026-04-18_10-37-55.mp4staff5849218 Apr13:38soundcore AeroClip (input)_2026-04-18_10-38-25.mp4staff6492518 Apr 13:39soundcore AeroClip (input)_2026-04-18_10-38-55.mp4lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ curl -s http://localhost:3030/health | ja 'pipeline'"avg_db_latency_ms":169.36220472440945,"avg_ocr_latency_ms": 0.0,"capture_fps_actual": 0.[CREDIT_CARD],...
|
NULL
|
6208659839752672904
|
NULL
|
app_switch
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹ >0 lol-zshDOCKER-rw-r--r--→< ₴81DEV (docker)О 882APP (-zsh)• 83-zsh*4screenpipe"• 851lukasstaff0 11Apr15:03screenpipe.dblukasstaff17327818Apr13:34-rw-r--r---rw-r--r--rw-r--r---rw-r-lukasstaffsoundcore AeroClip (input)_2026-04-18_10-34-24.mp413489018 Apr13:35soundcore AeroClip (input)_2026-04-18_10-34-56.mp4lukasstaff17233318Apr13:35soundcore AeroClip (input)_2026-04-18_10-35-26.mp4lukasstaff15144118Apr13:36soundcore AeroClip (input)_2026-04-18_10-35-56.mp4lukasstaff7126518 Apr13:36soundcore AeroClip (input)_2026-04-18_10-36-26.mp4lukasstaff2222718 Apr13:37soundcore AeroClip (input)_2026-04-18_10-36-56.mp4-rw-r--r--1lukasstaff7873018Apr13:37soundcore AeroClip (input)[EMAIL]/data $ 11total2256drwxr-xr-xdrwxr-xr-x-rw-r--r--@-=--30 lukas20lukaslukaslukas1lukas1 lukasstaffstaffstaffstaffstaffstaff96018Apr 13:3964018Apr13:34614816 Apr17:07.DS_Store462818Apr13:34System Audio (output)_2026-04-18_10-34-25.mp4462018Apr13:35System Audio (output)_2026-04-18_10-34-49.mp4462018 Apr13:35System Audio (output)_2026-04-18_10-35-11.mp4* Review scre...• 86ec2-user@ip-..O 87ec2-user@ip-..100% C8•Sat 18 Apr 13:44:22T81О *8-zsh• *9$INClaude-rw-r--r--drwxr-xr-xdrwxr-xr-x-rw-r--rw-r--r---rw-r--r---rw-r--r--rw-r--r---rw-r--r---rw-r--r---rw-r--r---rw-r--r--{lukas1lukas12 lukas2lukaslukaslukaslukaslukaslukas1lukaslukaslukaslukaslukas1lukasstatt464018Apr13:39SystemAud1o (output)_<026-04-18_10-38-S4.mp4staff3347518 Apr13:39System Audio (output)_2026-04-18_10-39-15.mp4staff38418Apr13:33datastaff6418 Apr13:38pending-transcriptionsstaff11 Apr15:03screenpipe.dbstaff17327818Apr13:34soundcore AeroClip (input)_2026-04-18_10-34-24.mp4staff134890staff18 Apr13:35soundcore AeroClip (input)_2026-04-18_10-34-56.mp417233318 Apr13:35soundcore AeroClip (input)_2026-04-18_10-35-26.mp4staff15144118Apr13:36soundcore AeroClip (input)_2026-04-18_10-35-56.mp4staff7126518Apr13:36soundcore AeroClip (input)_2026-04-18_10-36-26.mp4staff2222718 Apr13:37soundcore AeroClip (input)_2026-04-18_10-36-56.mp4staff7873018Apr13:37soundcore AeroClip (input)_2026-04-18_10-37-26.mp4staff5490318Apr13:38soundcore AeroClip (input)_2026-04-18_10-37-55.mp4staff5849218 Apr13:38soundcore AeroClip (input)_2026-04-18_10-38-25.mp4staff6492518 Apr 13:39soundcore AeroClip (input)_2026-04-18_10-38-55.mp4lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe/data $ curl -s http://localhost:3030/health | ja 'pipeline'"avg_db_latency_ms":169.36220472440945,"avg_ocr_latency_ms": 0.0,"capture_fps_actual": 0.[CREDIT_CARD],...
|
NULL
|