|
65266
|
2290
|
7
|
2026-05-20T15:38:35.674789+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-20/1779 /Users/lukas/.screenpipe/data/data/2026-05-20/1779291515674_m2.jpg...
|
Firefox
|
JY-20915 add alias for EU by LakyLak · Pull Reques JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12105
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
Close tab
Coverage on New Code - app in Jiminny SonarQube Cloud
Coverage on New Code - app in Jiminny SonarQube Cloud
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Copy prompt
Gemini said
Gemini said
Here is a concise summary of the changes made in the code selection:
Refactoring and Dependencies
Refactoring and Dependencies
Replaced Interface with Implementation:
Changed
BatchStatusInterface
to
BatchStatusManager
in the imports and constructor dependency injection.
Added Redis Support:
Imported
Illuminate\Support\Facades\Redis
to handle a newly introduced memory-logging lock mechanism.
Removed Traits:
Removed
WorkerIdTrait
, along with the
worker
field tracking in the final logs.
Loop and Worker Lifecycle Adjustments
Loop and Worker Lifecycle Adjustments
Removed Worker Auto-Restart:
Deleted the
$counter
property, the
RESTART_AFTER
constant, and the
shouldIterateAgain()
method. The script no longer tracks execution iterations or triggers a self-managed worker restart.
Simplified Chunk Method Return:
Modified
doUpdateEntitiesChunk()
to always return
true
upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.
Priority Handling for Throttled Entities
Priority Handling for Throttled Entities
Stale Record Elevation:
Updated the logic in
rescheduleThrottledEntities()
to check if a throttled entity group is classified as "stale". If it is, the entities are rescheduled using
QueuePriorityEnum::NORMAL
; otherwise, they keep their respective queue priority.
Metrics, Logging, and Environment Handling
Metrics, Logging, and Environment Handling
Added Environment Tracking:
Introduced a
$environment
property (defaulting to
'local'
) and a
setEnvironment()
method to dynamically assign it.
Memory Monitoring via Datadog Gauge:
Added a
logMemoryUsage()
method that submits peak memory allocation to Datadog as a gauge metric (
jiminny.reindex-memory-usage
).
Redis Lock for Metrics Throttling:
Implemented a Redis-backed lock (
%s-process-manager-lock
) with a 60-second expiration inside
logMemoryUsage()
to prevent over-reporting metrics.
Log Payload Update:
Added total processed items (
$updatedDocuments + $deletedDocuments
) to the final information log.
Good response
Bad response
Share & export
Copy
Show more options
You said are there any issues or potential bottlenecks
You said
are there any issues or potential bottlenecks
Copy prompt
Edit
Gemini said
Gemini said
Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.
Here is a breakdown of the potential issues to look out for:
1. Memory Leak Risk (OOM Crashes)
1. Memory Leak Risk (OOM Crashes)
Removed Restart Logic:
The most significant change is the removal of the
$counter
and
RESTART_AFTER
logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (
gc_collect_cycles()
).
Dependency Leaks:
If any underlying service (like the
ElasticSearchClient
, ORM, or Datadog helper) retains references to processed entities,
gc_collect_cycles()
will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.
Hardcoded Limits:
The code still includes
ini_set('memory_limit', '512M');
. Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.
2. Race Condition in Redis Lock
2. Race Condition in Redis Lock
Non-Atomic Operations:
The
logMemoryUsage
method uses three distinct steps to handle the lock:
get()
,
set()
, and
expire()
.
The Bottleneck:
If multiple workers process the same
$this->updateTarget
concurrently, they can both pass the
if (! is_null(Redis::get(...)))
check at the exact same millisecond. Both will then execute
set()
and push duplicate metrics to Datadog.
The Fix:
This should be replaced with a single atomic operation using Redis's
NX
(Not eXists) and
EX
(Expire) flags, or Laravel’s built-in atomic cache locks:
Redis::set($gaugeLockName, true, 'EX', 60, 'NX')
.
3. Infinite Loops and Caller Contract
3. Infinite Loops and Caller Contract
Return Value Change:
doUpdateEntitiesChunk()
previously returned whether it should iterate again based on staleness or chunk size. It now always returns
true
(unless the selection is totally empty).
The Bottleneck:
If the code calling this method relies on a
false
return to pause, sleep, or gracefully terminate, changing this to an unconditional
true
could result in an aggressive "busy loop" that spikes CPU usage.
4. Performance Overhead
4. Performance Overhead
Expensive Garbage Collection:
Calling
gc_collect_cycles();
on
every single chunk
can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.
Synchronous Metric Dispatch:
If the
Datadog::increment
or
Datadog::gauge
methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.
5. Lack of Explicit Error Handling
5. Lack of Explicit Error Handling
No
try/catch
Blocks:
The script executes complex network operations (
loadDocuments
, Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (32)
Pull requests
(
32
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality
Security and quality
Insights
Insights
Settings
Settings
JY-20915 add alias for EU #12105 Edit title
JY-20915 add alias for EU
#
12105
Edit title
Awaiting approval
Awaiting approval
Code
Code
Open
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Lines changed: 365 additions & 1 deletion
Conversation (1)
Conversation
(
1
)
Commits (5)
Commits
(
5
)
Checks (3)
Checks
(
3
)
Files changed (4)
Files changed
(
4
)
Open
JY-20915 add alias for EU #12105 LakyLak wants to merge 5 commits into master from JY-20915-add-domain-specific-email-text-relay Copy head branch name to clipboard
JY-20915 add alias for EU
JY-20915 add alias for EU
#
12105
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Conversation
Conversation
@LakyLak
Show options
LakyLak commented yesterday
LakyLak
LakyLak
commented
yesterday
yesterday
JIRA: JY-20915
JIRA:
JY-20915
JY-20915
Changes:
Changes:
Support text relay for EU
Prevent errors from EU on US
Add or remove reactions
LakyLak
LakyLak
added
5
commits
yesterday
yesterday
@LakyLak
JY-20915
JY-20915
add alias for EU
add alias for EU
8 / 10 checks OK
e5255d5
e5255d5
@LakyLak...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.10721409,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.15791224,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.12699468,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.18994413,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Coverage on New Code - app in Jiminny SonarQube Cloud","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Coverage on New Code - app in Jiminny SonarQube Cloud","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.10139628,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.18068483,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.4644282,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.15824468,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.38068634,"width":0.07413564,"height":0.025538707},"on_screen":true,"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.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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,"bounds":{"left":0.35854387,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"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,"bounds":{"left":0.37051198,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Main menu","depth":13,"bounds":{"left":0.08228058,"top":0.09736632,"width":0.015957447,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"bounds":{"left":0.09823803,"top":0.10215483,"width":0.028091755,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"bounds":{"left":0.1008976,"top":0.10654429,"width":0.02144282,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":13,"bounds":{"left":0.35854387,"top":0.10215483,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":13,"bounds":{"left":0.37051198,"top":0.10215483,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.079288565,"top":0.14445332,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.079288565,"top":0.14684756,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\\LaravelDatadogHelper\\Datadog;7use ChaseConey\\LaravelDatadogHelper\\Datadog;8use Illuminate\\Support\\Facades\\Log;8use Illuminate\\Support\\Facades\\Log;9+use Illuminate\\Support\\Facades\\Redis;9use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14-use Jiminny\\Component\\ES\\Processor\\BatchStatusInterface;15+use Jiminny\\Component\\ES\\Processor\\BatchStatusManager;15use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21-use Jiminny\\Component\\ES\\Processor\\Traits\\WorkerIdTrait;22use Jiminny\\Utils\\StringUtil;22use Jiminny\\Utils\\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\\LaravelDatadogHelper\\Datadog;7use ChaseConey\\LaravelDatadogHelper\\Datadog;8use Illuminate\\Support\\Facades\\Log;8use Illuminate\\Support\\Facades\\Log;9+use Illuminate\\Support\\Facades\\Redis;9use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14-use Jiminny\\Component\\ES\\Processor\\BatchStatusInterface;15+use Jiminny\\Component\\ES\\Processor\\BatchStatusManager;15use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21-use Jiminny\\Component\\ES\\Processor\\Traits\\WorkerIdTrait;22use Jiminny\\Utils\\StringUtil;22use Jiminny\\Utils\\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a concise summary of the changes made in the code selection:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactoring and Dependencies","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactoring and Dependencies","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaced Interface with Implementation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changed","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BatchStatusInterface","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BatchStatusManager","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"in the imports and constructor dependency injection.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added Redis Support:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Imported","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Illuminate\\Support\\Facades\\Redis","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to handle a newly introduced memory-logging lock mechanism.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Traits:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WorkerIdTrait","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", along with the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"worker","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"field tracking in the final logs.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Loop and Worker Lifecycle Adjustments","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Loop and Worker Lifecycle Adjustments","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Worker Auto-Restart:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deleted the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$counter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"property, the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RESTART_AFTER","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"constant, and the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"shouldIterateAgain()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method. The script no longer tracks execution iterations or triggers a self-managed worker restart.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Simplified Chunk Method Return:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Modified","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"doUpdateEntitiesChunk()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to always return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Priority Handling for Throttled Entities","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Priority Handling for Throttled Entities","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Record Elevation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated the logic in","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"rescheduleThrottledEntities()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to check if a throttled entity group is classified as \"stale\". If it is, the entities are rescheduled using","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum::NORMAL","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"; otherwise, they keep their respective queue priority.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Metrics, Logging, and Environment Handling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Metrics, Logging, and Environment Handling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added Environment Tracking:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduced a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$environment","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"property (defaulting to","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'local'","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") and a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setEnvironment()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method to dynamically assign it.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Memory Monitoring via Datadog Gauge:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method that submits peak memory allocation to Datadog as a gauge metric (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"jiminny.reindex-memory-usage","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Redis Lock for Metrics Throttling:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Implemented a Redis-backed lock (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"%s-process-manager-lock","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") with a 60-second expiration inside","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to prevent over-reporting metrics.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Log Payload Update:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added total processed items (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$updatedDocuments + $deletedDocuments","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to the final information log.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":23,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":23,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":23,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said are there any issues or potential bottlenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"are there any issues or potential bottlenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a breakdown of the potential issues to look out for:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Memory Leak Risk (OOM Crashes)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Memory Leak Risk (OOM Crashes)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Restart Logic:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The most significant change is the removal of the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$counter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RESTART_AFTER","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dependency Leaks:","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.050033245,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If any underlying service (like the","depth":26,"bounds":{"left":0.17453457,"top":0.0,"width":0.08277926,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ElasticSearchClient","depth":27,"bounds":{"left":0.25930852,"top":0.0,"width":0.056848403,"height":0.015163607},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ORM, or Datadog helper) retains references to processed entities,","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.21775267,"height":0.03631285},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles()","depth":27,"bounds":{"left":0.26811835,"top":0.0,"width":0.056848403,"height":0.015163607},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.23138298,"height":0.05546688},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hardcoded Limits:","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.047041222,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The code still includes","depth":26,"bounds":{"left":0.17154256,"top":0.0,"width":0.05651596,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ini_set('memory_limit', '512M');","depth":27,"bounds":{"left":0.23005319,"top":0.0,"width":0.095744684,"height":0.015163607},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.23055187,"height":0.05546688},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Race Condition in Redis Lock","depth":23,"bounds":{"left":0.111369684,"top":0.07940942,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Race Condition in Redis Lock","depth":24,"bounds":{"left":0.111369684,"top":0.079010375,"width":0.09125665,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Non-Atomic Operations:","depth":26,"bounds":{"left":0.12450133,"top":0.10614525,"width":0.062333778,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":26,"bounds":{"left":0.18683511,"top":0.10614525,"width":0.011635638,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage","depth":27,"bounds":{"left":0.20046543,"top":0.10774142,"width":0.041888297,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method uses three distinct steps to handle the lock:","depth":26,"bounds":{"left":0.12450133,"top":0.10614525,"width":0.22722739,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"get()","depth":27,"bounds":{"left":0.14860372,"top":0.12689546,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"bounds":{"left":0.16555852,"top":0.12529927,"width":0.002493351,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"set()","depth":27,"bounds":{"left":0.17004654,"top":0.12689546,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":26,"bounds":{"left":0.18700133,"top":0.12529927,"width":0.013131649,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"expire()","depth":27,"bounds":{"left":0.20212767,"top":0.12689546,"width":0.023936171,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"bounds":{"left":0.22805852,"top":0.12529927,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"bounds":{"left":0.12450133,"top":0.15403032,"width":0.040059842,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If multiple workers process the same","depth":26,"bounds":{"left":0.16456117,"top":0.15403032,"width":0.09275266,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$this->updateTarget","depth":27,"bounds":{"left":0.25930852,"top":0.15562649,"width":0.056848403,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"concurrently, they can both pass the","depth":26,"bounds":{"left":0.12450133,"top":0.15403032,"width":0.22855718,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if (! is_null(Redis::get(...)))","depth":27,"bounds":{"left":0.18351063,"top":0.17478053,"width":0.09275266,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"check at the exact same millisecond. Both will then execute","depth":26,"bounds":{"left":0.12450133,"top":0.17318435,"width":0.21575798,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"set()","depth":27,"bounds":{"left":0.2122673,"top":0.19393456,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and push duplicate metrics to Datadog.","depth":26,"bounds":{"left":0.22922207,"top":0.19233839,"width":0.09823803,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Fix:","depth":26,"bounds":{"left":0.12450133,"top":0.22106944,"width":0.019281914,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This should be replaced with a single atomic operation using Redis's","depth":26,"bounds":{"left":0.14378324,"top":0.22106944,"width":0.16821809,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NX","depth":27,"bounds":{"left":0.31399602,"top":0.22266561,"width":0.005984043,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Not eXists) and","depth":26,"bounds":{"left":0.12450133,"top":0.22106944,"width":0.22855718,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EX","depth":27,"bounds":{"left":0.13696809,"top":0.24181964,"width":0.005984043,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Expire) flags, or Laravel’s built-in atomic cache locks:","depth":26,"bounds":{"left":0.14494681,"top":0.24022347,"width":0.13264628,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Redis::set($gaugeLockName, true, 'EX', 60, 'NX')","depth":27,"bounds":{"left":0.12649602,"top":0.26097366,"width":0.14361702,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"bounds":{"left":0.27210772,"top":0.25937748,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Infinite Loops and Caller Contract","depth":23,"bounds":{"left":0.111369684,"top":0.30925778,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Infinite Loops and Caller Contract","depth":24,"bounds":{"left":0.111369684,"top":0.30885875,"width":0.10571808,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Return Value Change:","depth":26,"bounds":{"left":0.12450133,"top":0.33599362,"width":0.055352394,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"doUpdateEntitiesChunk()","depth":27,"bounds":{"left":0.18301196,"top":0.33758977,"width":0.06881649,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"previously returned whether it should iterate again based on staleness or chunk size. It now always returns","depth":26,"bounds":{"left":0.12450133,"top":0.33599362,"width":0.2237367,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"bounds":{"left":0.29438165,"top":0.3567438,"width":0.011968086,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(unless the selection is totally empty).","depth":26,"bounds":{"left":0.12450133,"top":0.35514766,"width":0.2130984,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"bounds":{"left":0.12450133,"top":0.40303272,"width":0.040059842,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the code calling this method relies on a","depth":26,"bounds":{"left":0.16456117,"top":0.40303272,"width":0.10305851,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":27,"bounds":{"left":0.26961437,"top":0.4046289,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return to pause, sleep, or gracefully terminate, changing this to an unconditional","depth":26,"bounds":{"left":0.12450133,"top":0.40303272,"width":0.22589761,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"bounds":{"left":0.26163563,"top":0.4237829,"width":0.011968086,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"could result in an aggressive \"busy loop\" that spikes CPU usage.","depth":26,"bounds":{"left":0.12450133,"top":0.42218676,"width":0.22290559,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Performance Overhead","depth":23,"bounds":{"left":0.111369684,"top":0.49122107,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Performance Overhead","depth":24,"bounds":{"left":0.111369684,"top":0.49082202,"width":0.076130316,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Expensive Garbage Collection:","depth":26,"bounds":{"left":0.12450133,"top":0.5179569,"width":0.078457445,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Calling","depth":26,"bounds":{"left":0.20295878,"top":0.5179569,"width":0.019281914,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles();","depth":27,"bounds":{"left":0.22423537,"top":0.51955307,"width":0.059840426,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"on","depth":26,"bounds":{"left":0.28607047,"top":0.5179569,"width":0.00880984,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"every single chunk","depth":26,"bounds":{"left":0.29488033,"top":0.5179569,"width":0.045545213,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.","depth":26,"bounds":{"left":0.12450133,"top":0.5179569,"width":0.23420878,"height":0.05546688},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Synchronous Metric Dispatch:","depth":26,"bounds":{"left":0.12450133,"top":0.584996,"width":0.07712766,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the","depth":26,"bounds":{"left":0.20162898,"top":0.584996,"width":0.015292553,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Datadog::increment","depth":27,"bounds":{"left":0.21891622,"top":0.5865922,"width":0.053856384,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"bounds":{"left":0.27476728,"top":0.584996,"width":0.0078125,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Datadog::gauge","depth":27,"bounds":{"left":0.28457448,"top":0.5865922,"width":0.041888297,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.","depth":26,"bounds":{"left":0.12450133,"top":0.584996,"width":0.23420878,"height":0.05546688},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"5. Lack of Explicit Error Handling","depth":23,"bounds":{"left":0.111369684,"top":0.67318434,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5. Lack of Explicit Error Handling","depth":24,"bounds":{"left":0.111369684,"top":0.67278534,"width":0.094913565,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No","depth":26,"bounds":{"left":0.12450133,"top":0.6999202,"width":0.008477394,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"try/catch","depth":27,"bounds":{"left":0.1349734,"top":0.7015164,"width":0.026928192,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Blocks:","depth":26,"bounds":{"left":0.16389628,"top":0.6999202,"width":0.019614361,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The script executes complex network operations (","depth":26,"bounds":{"left":0.18351063,"top":0.6999202,"width":0.12367021,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"loadDocuments","depth":27,"bounds":{"left":0.30917552,"top":0.7015164,"width":0.038896278,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.","depth":26,"bounds":{"left":0.12450133,"top":0.6999202,"width":0.22888963,"height":0.09377494},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"bounds":{"left":0.1087101,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"bounds":{"left":0.124667555,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":22,"bounds":{"left":0.140625,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"bounds":{"left":0.15658244,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.17253989,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"bounds":{"left":0.18849733,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Ask Gemini","depth":21,"bounds":{"left":0.14594415,"top":0.86632085,"width":0.17021276,"height":0.01915403},"on_screen":true,"value":"Ask Gemini","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Gemini","depth":22,"bounds":{"left":0.14594415,"top":0.8667199,"width":0.030418882,"height":0.018355945},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Upload & tools","depth":20,"bounds":{"left":0.12732713,"top":0.8567438,"width":0.015957447,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Microphone","depth":20,"bounds":{"left":0.32413563,"top":0.86153233,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send message","depth":20,"bounds":{"left":0.33211437,"top":0.8631285,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":17,"bounds":{"left":0.102726065,"top":0.9173983,"width":0.21775267,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":17,"bounds":{"left":0.32047874,"top":0.9173983,"width":0.043882977,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":18,"bounds":{"left":0.32047874,"top":0.9173983,"width":0.043882977,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":19,"bounds":{"left":0.079288565,"top":0.91660017,"width":0.04720745,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.08494016,"top":0.95730245,"width":0.053523935,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.09059176,"top":0.96249,"width":0.042220745,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to content","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":10,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (32)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"32","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Agents","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security and quality","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JY-20915 add alias for EU #12105 Edit title","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JY-20915 add alias for EU","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12105","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit title","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Awaiting approval","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Awaiting approval","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Code","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 5 commits into","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":15,"on_screen":false,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915-add-domain-specific-email-text-relay","depth":16,"on_screen":false,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915-add-domain-specific-email-text-relay","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":16,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 365 additions & 1 deletion","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Conversation (1)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Conversation","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Commits (5)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Commits","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Checks (3)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Files changed (4)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Files changed","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":14,"bounds":{"left":0.50332445,"top":0.07222666,"width":0.011968086,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JY-20915 add alias for EU #12105 LakyLak wants to merge 5 commits into master from JY-20915-add-domain-specific-email-text-relay Copy head branch name to clipboard","depth":14,"bounds":{"left":0.5219415,"top":0.058260176,"width":0.22922207,"height":0.042298485},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915 add alias for EU","depth":16,"bounds":{"left":0.5219415,"top":0.05865922,"width":0.05817819,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915 add alias for EU","depth":17,"bounds":{"left":0.5219415,"top":0.06304868,"width":0.05817819,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":16,"bounds":{"left":0.5827792,"top":0.06304868,"width":0.0028257978,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12105","depth":16,"bounds":{"left":0.585605,"top":0.06304868,"width":0.012799202,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":18,"bounds":{"left":0.5219415,"top":0.08339984,"width":0.016123671,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":19,"bounds":{"left":0.5219415,"top":0.08339984,"width":0.016123671,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 5 commits into","depth":18,"bounds":{"left":0.539395,"top":0.08339984,"width":0.058011968,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":18,"bounds":{"left":0.5987367,"top":0.08180367,"width":0.018450798,"height":0.015163607},"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":19,"bounds":{"left":0.6007314,"top":0.08339984,"width":0.014461436,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":19,"bounds":{"left":0.6185173,"top":0.08339984,"width":0.008643617,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915-add-domain-specific-email-text-relay","depth":19,"bounds":{"left":0.6284907,"top":0.08180367,"width":0.112034574,"height":0.015163607},"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915-add-domain-specific-email-text-relay","depth":20,"bounds":{"left":0.63048536,"top":0.08339984,"width":0.10804521,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":19,"bounds":{"left":0.741855,"top":0.07821229,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show options","depth":15,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"LakyLak commented yesterday","depth":14,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":16,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"commented","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"yesterday","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"yesterday","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JIRA: JY-20915","depth":16,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JIRA:","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915","depth":17,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Changes:","depth":16,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes:","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Support text relay for EU","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Prevent errors from EU on US","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add or remove reactions","depth":16,"on_screen":false,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"LakyLak","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"added","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"commits","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"yesterday","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"yesterday","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"JY-20915","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"add alias for EU","depth":14,"on_screen":false,"help_text":"JY-20915 add alias for EU","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"add alias for EU","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"8 / 10 checks OK","depth":14,"on_screen":false,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"e5255d5","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"e5255d5","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
2341065158970747303
|
-1048292959795792100
|
idle
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
Close tab
Coverage on New Code - app in Jiminny SonarQube Cloud
Coverage on New Code - app in Jiminny SonarQube Cloud
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Copy prompt
Gemini said
Gemini said
Here is a concise summary of the changes made in the code selection:
Refactoring and Dependencies
Refactoring and Dependencies
Replaced Interface with Implementation:
Changed
BatchStatusInterface
to
BatchStatusManager
in the imports and constructor dependency injection.
Added Redis Support:
Imported
Illuminate\Support\Facades\Redis
to handle a newly introduced memory-logging lock mechanism.
Removed Traits:
Removed
WorkerIdTrait
, along with the
worker
field tracking in the final logs.
Loop and Worker Lifecycle Adjustments
Loop and Worker Lifecycle Adjustments
Removed Worker Auto-Restart:
Deleted the
$counter
property, the
RESTART_AFTER
constant, and the
shouldIterateAgain()
method. The script no longer tracks execution iterations or triggers a self-managed worker restart.
Simplified Chunk Method Return:
Modified
doUpdateEntitiesChunk()
to always return
true
upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.
Priority Handling for Throttled Entities
Priority Handling for Throttled Entities
Stale Record Elevation:
Updated the logic in
rescheduleThrottledEntities()
to check if a throttled entity group is classified as "stale". If it is, the entities are rescheduled using
QueuePriorityEnum::NORMAL
; otherwise, they keep their respective queue priority.
Metrics, Logging, and Environment Handling
Metrics, Logging, and Environment Handling
Added Environment Tracking:
Introduced a
$environment
property (defaulting to
'local'
) and a
setEnvironment()
method to dynamically assign it.
Memory Monitoring via Datadog Gauge:
Added a
logMemoryUsage()
method that submits peak memory allocation to Datadog as a gauge metric (
jiminny.reindex-memory-usage
).
Redis Lock for Metrics Throttling:
Implemented a Redis-backed lock (
%s-process-manager-lock
) with a 60-second expiration inside
logMemoryUsage()
to prevent over-reporting metrics.
Log Payload Update:
Added total processed items (
$updatedDocuments + $deletedDocuments
) to the final information log.
Good response
Bad response
Share & export
Copy
Show more options
You said are there any issues or potential bottlenecks
You said
are there any issues or potential bottlenecks
Copy prompt
Edit
Gemini said
Gemini said
Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.
Here is a breakdown of the potential issues to look out for:
1. Memory Leak Risk (OOM Crashes)
1. Memory Leak Risk (OOM Crashes)
Removed Restart Logic:
The most significant change is the removal of the
$counter
and
RESTART_AFTER
logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (
gc_collect_cycles()
).
Dependency Leaks:
If any underlying service (like the
ElasticSearchClient
, ORM, or Datadog helper) retains references to processed entities,
gc_collect_cycles()
will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.
Hardcoded Limits:
The code still includes
ini_set('memory_limit', '512M');
. Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.
2. Race Condition in Redis Lock
2. Race Condition in Redis Lock
Non-Atomic Operations:
The
logMemoryUsage
method uses three distinct steps to handle the lock:
get()
,
set()
, and
expire()
.
The Bottleneck:
If multiple workers process the same
$this->updateTarget
concurrently, they can both pass the
if (! is_null(Redis::get(...)))
check at the exact same millisecond. Both will then execute
set()
and push duplicate metrics to Datadog.
The Fix:
This should be replaced with a single atomic operation using Redis's
NX
(Not eXists) and
EX
(Expire) flags, or Laravel’s built-in atomic cache locks:
Redis::set($gaugeLockName, true, 'EX', 60, 'NX')
.
3. Infinite Loops and Caller Contract
3. Infinite Loops and Caller Contract
Return Value Change:
doUpdateEntitiesChunk()
previously returned whether it should iterate again based on staleness or chunk size. It now always returns
true
(unless the selection is totally empty).
The Bottleneck:
If the code calling this method relies on a
false
return to pause, sleep, or gracefully terminate, changing this to an unconditional
true
could result in an aggressive "busy loop" that spikes CPU usage.
4. Performance Overhead
4. Performance Overhead
Expensive Garbage Collection:
Calling
gc_collect_cycles();
on
every single chunk
can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.
Synchronous Metric Dispatch:
If the
Datadog::increment
or
Datadog::gauge
methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.
5. Lack of Explicit Error Handling
5. Lack of Explicit Error Handling
No
try/catch
Blocks:
The script executes complex network operations (
loadDocuments
, Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (32)
Pull requests
(
32
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality
Security and quality
Insights
Insights
Settings
Settings
JY-20915 add alias for EU #12105 Edit title
JY-20915 add alias for EU
#
12105
Edit title
Awaiting approval
Awaiting approval
Code
Code
Open
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Lines changed: 365 additions & 1 deletion
Conversation (1)
Conversation
(
1
)
Commits (5)
Commits
(
5
)
Checks (3)
Checks
(
3
)
Files changed (4)
Files changed
(
4
)
Open
JY-20915 add alias for EU #12105 LakyLak wants to merge 5 commits into master from JY-20915-add-domain-specific-email-text-relay Copy head branch name to clipboard
JY-20915 add alias for EU
JY-20915 add alias for EU
#
12105
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Conversation
Conversation
@LakyLak
Show options
LakyLak commented yesterday
LakyLak
LakyLak
commented
yesterday
yesterday
JIRA: JY-20915
JIRA:
JY-20915
JY-20915
Changes:
Changes:
Support text relay for EU
Prevent errors from EU on US
Add or remove reactions
LakyLak
LakyLak
added
5
commits
yesterday
yesterday
@LakyLak
JY-20915
JY-20915
add alias for EU
add alias for EU
8 / 10 checks OK
e5255d5
e5255d5
@LakyLak...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
65267
|
2289
|
7
|
2026-05-20T15:38:52.998386+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-20/1779 /Users/lukas/.screenpipe/data/data/2026-05-20/1779291532998_m1.jpg...
|
Firefox
|
JY-20915 add alias for EU by LakyLak · Pull Reques JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12105
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
Close tab
Coverage on New Code - app in Jiminny SonarQube Cloud
Coverage on New Code - app in Jiminny SonarQube Cloud
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Copy prompt
Gemini said
Gemini said
Here is a concise summary of the changes made in the code selection:
Refactoring and Dependencies
Refactoring and Dependencies
Replaced Interface with Implementation:
Changed
BatchStatusInterface
to
BatchStatusManager
in the imports and constructor dependency injection.
Added Redis Support:
Imported
Illuminate\Support\Facades\Redis
to handle a newly introduced memory-logging lock mechanism.
Removed Traits:
Removed
WorkerIdTrait
, along with the
worker
field tracking in the final logs.
Loop and Worker Lifecycle Adjustments
Loop and Worker Lifecycle Adjustments
Removed Worker Auto-Restart:
Deleted the
$counter
property, the
RESTART_AFTER
constant, and the
shouldIterateAgain()
method. The script no longer tracks execution iterations or triggers a self-managed worker restart.
Simplified Chunk Method Return:
Modified
doUpdateEntitiesChunk()
to always return
true
upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.
Priority Handling for Throttled Entities
Priority Handling for Throttled Entities
Stale Record Elevation:
Updated the logic in
rescheduleThrottledEntities()
to check if a throttled entity group is classified as "stale". If it is, the entities are rescheduled using
QueuePriorityEnum::NORMAL
; otherwise, they keep their respective queue priority.
Metrics, Logging, and Environment Handling
Metrics, Logging, and Environment Handling
Added Environment Tracking:
Introduced a
$environment
property (defaulting to
'local'
) and a
setEnvironment()
method to dynamically assign it.
Memory Monitoring via Datadog Gauge:
Added a
logMemoryUsage()
method that submits peak memory allocation to Datadog as a gauge metric (
jiminny.reindex-memory-usage
).
Redis Lock for Metrics Throttling:
Implemented a Redis-backed lock (
%s-process-manager-lock
) with a 60-second expiration inside
logMemoryUsage()
to prevent over-reporting metrics.
Log Payload Update:
Added total processed items (
$updatedDocuments + $deletedDocuments
) to the final information log.
Good response
Bad response
Share & export
Copy
Show more options
You said are there any issues or potential bottlenecks
You said
are there any issues or potential bottlenecks
Copy prompt
Edit
Gemini said
Gemini said
Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.
Here is a breakdown of the potential issues to look out for:
1. Memory Leak Risk (OOM Crashes)
1. Memory Leak Risk (OOM Crashes)
Removed Restart Logic:
The most significant change is the removal of the
$counter
and
RESTART_AFTER
logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (
gc_collect_cycles()
).
Dependency Leaks:
If any underlying service (like the
ElasticSearchClient
, ORM, or Datadog helper) retains references to processed entities,
gc_collect_cycles()
will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.
Hardcoded Limits:
The code still includes
ini_set('memory_limit', '512M');
. Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.
2. Race Condition in Redis Lock
2. Race Condition in Redis Lock
Non-Atomic Operations:
The
logMemoryUsage
method uses three distinct steps to handle the lock:
get()
,
set()
, and
expire()
.
The Bottleneck:
If multiple workers process the same
$this->updateTarget
concurrently, they can both pass the
if (! is_null(Redis::get(...)))
check at the exact same millisecond. Both will then execute
set()
and push duplicate metrics to Datadog.
The Fix:
This should be replaced with a single atomic operation using Redis's
NX
(Not eXists) and
EX
(Expire) flags, or Laravel’s built-in atomic cache locks:
Redis::set($gaugeLockName, true, 'EX', 60, 'NX')
.
3. Infinite Loops and Caller Contract
3. Infinite Loops and Caller Contract
Return Value Change:
doUpdateEntitiesChunk()
previously returned whether it should iterate again based on staleness or chunk size. It now always returns
true
(unless the selection is totally empty).
The Bottleneck:
If the code calling this method relies on a
false
return to pause, sleep, or gracefully terminate, changing this to an unconditional
true
could result in an aggressive "busy loop" that spikes CPU usage.
4. Performance Overhead
4. Performance Overhead
Expensive Garbage Collection:
Calling
gc_collect_cycles();
on
every single chunk
can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.
Synchronous Metric Dispatch:
If the
Datadog::increment
or
Datadog::gauge
methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.
5. Lack of Explicit Error Handling
5. Lack of Explicit Error Handling
No
try/catch
Blocks:
The script executes complex network operations (
loadDocuments
, Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (32)
Pull requests
(
32
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality
Security and quality
Insights
Insights
Settings
Settings
JY-20915 add alias for EU #12105 Edit title
JY-20915 add alias for EU
#
12105
Edit title
Awaiting approval
Awaiting approval
Code
Code
Open
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Lines changed: 365 additions & 1 deletion
Conversation (1)
Conversation
(
1
)
Commits (5)
Commits
(
5
)
Checks (3)
Checks
(
3
)
Files changed (4)
Files changed
(
4
)
Open
JY-20915 add alias for EU #12105 LakyLak wants to merge 5 commits into master from JY-20915-add-domain-specific-email-text-relay Copy head branch name to clipboard
JY-20915 add alias for EU
JY-20915 add alias for EU
#
12105
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Conversation
Conversation
@LakyLak
Show options
LakyLak commented yesterday
LakyLak
LakyLak
commented
yesterday
yesterday
JIRA: JY-20915
JIRA:
JY-20915
JY-20915
Changes:
Changes:
Support text relay for EU
Prevent errors from EU on US
Add or remove reactions
LakyLak
LakyLak
added
5
commits
yesterday
yesterday
@LakyLak
JY-20915
JY-20915
add alias for EU
add alias for EU
8 / 10 checks OK
e5255d5
e5255d5
@LakyLak
JY-20915
JY-20915
fix env recognization
fix env recognization
11 / 12 checks OK
8953054
8953054
@LakyLak
JY-20915
JY-20915
code smells & tests
code smells & tests
11 / 12 checks OK
73d4bea
73d4bea
@LakyLak
JY-20915
JY-20915
add more tests
add more tests
11 / 12 checks OK
5d2dd3e
5d2dd3e
@LakyLak
JY-20915
JY-20915
add sms received test
add sms received test
12 / 12 checks OK...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Coverage on New Code - app in Jiminny SonarQube Cloud","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Coverage on New Code - app in Jiminny SonarQube Cloud","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Main menu","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\\LaravelDatadogHelper\\Datadog;7use ChaseConey\\LaravelDatadogHelper\\Datadog;8use Illuminate\\Support\\Facades\\Log;8use Illuminate\\Support\\Facades\\Log;9+use Illuminate\\Support\\Facades\\Redis;9use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14-use Jiminny\\Component\\ES\\Processor\\BatchStatusInterface;15+use Jiminny\\Component\\ES\\Processor\\BatchStatusManager;15use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21-use Jiminny\\Component\\ES\\Processor\\Traits\\WorkerIdTrait;22use Jiminny\\Utils\\StringUtil;22use Jiminny\\Utils\\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\\LaravelDatadogHelper\\Datadog;7use ChaseConey\\LaravelDatadogHelper\\Datadog;8use Illuminate\\Support\\Facades\\Log;8use Illuminate\\Support\\Facades\\Log;9+use Illuminate\\Support\\Facades\\Redis;9use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14-use Jiminny\\Component\\ES\\Processor\\BatchStatusInterface;15+use Jiminny\\Component\\ES\\Processor\\BatchStatusManager;15use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21-use Jiminny\\Component\\ES\\Processor\\Traits\\WorkerIdTrait;22use Jiminny\\Utils\\StringUtil;22use Jiminny\\Utils\\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a concise summary of the changes made in the code selection:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactoring and Dependencies","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactoring and Dependencies","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaced Interface with Implementation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changed","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BatchStatusInterface","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BatchStatusManager","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"in the imports and constructor dependency injection.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added Redis Support:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Imported","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Illuminate\\Support\\Facades\\Redis","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to handle a newly introduced memory-logging lock mechanism.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Traits:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WorkerIdTrait","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", along with the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"worker","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"field tracking in the final logs.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Loop and Worker Lifecycle Adjustments","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Loop and Worker Lifecycle Adjustments","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Worker Auto-Restart:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deleted the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$counter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"property, the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RESTART_AFTER","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"constant, and the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"shouldIterateAgain()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method. The script no longer tracks execution iterations or triggers a self-managed worker restart.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Simplified Chunk Method Return:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Modified","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"doUpdateEntitiesChunk()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to always return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Priority Handling for Throttled Entities","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Priority Handling for Throttled Entities","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Record Elevation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated the logic in","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"rescheduleThrottledEntities()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to check if a throttled entity group is classified as \"stale\". If it is, the entities are rescheduled using","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum::NORMAL","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"; otherwise, they keep their respective queue priority.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Metrics, Logging, and Environment Handling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Metrics, Logging, and Environment Handling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added Environment Tracking:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduced a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$environment","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"property (defaulting to","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'local'","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") and a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setEnvironment()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method to dynamically assign it.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Memory Monitoring via Datadog Gauge:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method that submits peak memory allocation to Datadog as a gauge metric (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"jiminny.reindex-memory-usage","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Redis Lock for Metrics Throttling:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Implemented a Redis-backed lock (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"%s-process-manager-lock","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") with a 60-second expiration inside","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to prevent over-reporting metrics.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Log Payload Update:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added total processed items (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$updatedDocuments + $deletedDocuments","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to the final information log.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":23,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":23,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":23,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said are there any issues or potential bottlenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"are there any issues or potential bottlenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a breakdown of the potential issues to look out for:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Memory Leak Risk (OOM Crashes)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Memory Leak Risk (OOM Crashes)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Restart Logic:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The most significant change is the removal of the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$counter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RESTART_AFTER","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dependency Leaks:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If any underlying service (like the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ElasticSearchClient","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ORM, or Datadog helper) retains references to processed entities,","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hardcoded Limits:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The code still includes","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ini_set('memory_limit', '512M');","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Race Condition in Redis Lock","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Race Condition in Redis Lock","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Non-Atomic Operations:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method uses three distinct steps to handle the lock:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"get()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"set()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"expire()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If multiple workers process the same","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$this->updateTarget","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"concurrently, they can both pass the","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if (! is_null(Redis::get(...)))","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"check at the exact same millisecond. Both will then execute","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"set()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and push duplicate metrics to Datadog.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Fix:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This should be replaced with a single atomic operation using Redis's","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NX","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Not eXists) and","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EX","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Expire) flags, or Laravel’s built-in atomic cache locks:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Redis::set($gaugeLockName, true, 'EX', 60, 'NX')","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Infinite Loops and Caller Contract","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Infinite Loops and Caller Contract","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Return Value Change:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"doUpdateEntitiesChunk()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"previously returned whether it should iterate again based on staleness or chunk size. It now always returns","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(unless the selection is totally empty).","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the code calling this method relies on a","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return to pause, sleep, or gracefully terminate, changing this to an unconditional","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"could result in an aggressive \"busy loop\" that spikes CPU usage.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Performance Overhead","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Performance Overhead","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Expensive Garbage Collection:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Calling","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles();","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"on","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"every single chunk","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Synchronous Metric Dispatch:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Datadog::increment","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Datadog::gauge","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"5. Lack of Explicit Error Handling","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5. Lack of Explicit Error Handling","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"try/catch","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Blocks:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The script executes complex network operations (","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"loadDocuments","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":22,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Ask Gemini","depth":21,"on_screen":true,"value":"Ask Gemini","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Gemini","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Upload & tools","depth":20,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Microphone","depth":20,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send message","depth":20,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":17,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to content","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":10,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (32)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"32","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Agents","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security and quality","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JY-20915 add alias for EU #12105 Edit title","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JY-20915 add alias for EU","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12105","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit title","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Awaiting approval","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Awaiting approval","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Code","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 5 commits into","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":15,"on_screen":false,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915-add-domain-specific-email-text-relay","depth":16,"on_screen":false,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915-add-domain-specific-email-text-relay","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":16,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 365 additions & 1 deletion","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Conversation (1)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Conversation","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Commits (5)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Commits","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Checks (3)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Files changed (4)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Files changed","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JY-20915 add alias for EU #12105 LakyLak wants to merge 5 commits into master from JY-20915-add-domain-specific-email-text-relay Copy head branch name to clipboard","depth":14,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915 add alias for EU","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915 add alias for EU","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12105","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":18,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 5 commits into","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":18,"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915-add-domain-specific-email-text-relay","depth":19,"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915-add-domain-specific-email-text-relay","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":19,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show options","depth":15,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"LakyLak commented yesterday","depth":14,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":16,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"commented","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"yesterday","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"yesterday","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JIRA: JY-20915","depth":16,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JIRA:","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915","depth":17,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Changes:","depth":16,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes:","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Support text relay for EU","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Prevent errors from EU on US","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add or remove reactions","depth":16,"on_screen":false,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"LakyLak","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"added","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"commits","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"yesterday","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"yesterday","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"JY-20915","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"add alias for EU","depth":14,"on_screen":false,"help_text":"JY-20915 add alias for EU","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"add alias for EU","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"8 / 10 checks OK","depth":14,"on_screen":false,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"e5255d5","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"e5255d5","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"JY-20915","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"fix env recognization","depth":14,"on_screen":false,"help_text":"JY-20915 fix env recognization","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"fix env recognization","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"11 / 12 checks OK","depth":14,"on_screen":false,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"8953054","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8953054","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"JY-20915","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"code smells & tests","depth":14,"on_screen":false,"help_text":"JY-20915 code smells & tests","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"code smells & tests","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"11 / 12 checks OK","depth":14,"on_screen":false,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"73d4bea","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"73d4bea","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"JY-20915","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"add more tests","depth":14,"on_screen":false,"help_text":"JY-20915 add more tests","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"add more tests","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"11 / 12 checks OK","depth":14,"on_screen":false,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"5d2dd3e","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5d2dd3e","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"JY-20915","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"add sms received test","depth":14,"on_screen":false,"help_text":"JY-20915 add sms received test","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"add sms received test","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"12 / 12 checks OK","depth":14,"on_screen":false,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
380400995060395706
|
-1066448645554686184
|
idle
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
Close tab
Coverage on New Code - app in Jiminny SonarQube Cloud
Coverage on New Code - app in Jiminny SonarQube Cloud
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Copy prompt
Gemini said
Gemini said
Here is a concise summary of the changes made in the code selection:
Refactoring and Dependencies
Refactoring and Dependencies
Replaced Interface with Implementation:
Changed
BatchStatusInterface
to
BatchStatusManager
in the imports and constructor dependency injection.
Added Redis Support:
Imported
Illuminate\Support\Facades\Redis
to handle a newly introduced memory-logging lock mechanism.
Removed Traits:
Removed
WorkerIdTrait
, along with the
worker
field tracking in the final logs.
Loop and Worker Lifecycle Adjustments
Loop and Worker Lifecycle Adjustments
Removed Worker Auto-Restart:
Deleted the
$counter
property, the
RESTART_AFTER
constant, and the
shouldIterateAgain()
method. The script no longer tracks execution iterations or triggers a self-managed worker restart.
Simplified Chunk Method Return:
Modified
doUpdateEntitiesChunk()
to always return
true
upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.
Priority Handling for Throttled Entities
Priority Handling for Throttled Entities
Stale Record Elevation:
Updated the logic in
rescheduleThrottledEntities()
to check if a throttled entity group is classified as "stale". If it is, the entities are rescheduled using
QueuePriorityEnum::NORMAL
; otherwise, they keep their respective queue priority.
Metrics, Logging, and Environment Handling
Metrics, Logging, and Environment Handling
Added Environment Tracking:
Introduced a
$environment
property (defaulting to
'local'
) and a
setEnvironment()
method to dynamically assign it.
Memory Monitoring via Datadog Gauge:
Added a
logMemoryUsage()
method that submits peak memory allocation to Datadog as a gauge metric (
jiminny.reindex-memory-usage
).
Redis Lock for Metrics Throttling:
Implemented a Redis-backed lock (
%s-process-manager-lock
) with a 60-second expiration inside
logMemoryUsage()
to prevent over-reporting metrics.
Log Payload Update:
Added total processed items (
$updatedDocuments + $deletedDocuments
) to the final information log.
Good response
Bad response
Share & export
Copy
Show more options
You said are there any issues or potential bottlenecks
You said
are there any issues or potential bottlenecks
Copy prompt
Edit
Gemini said
Gemini said
Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.
Here is a breakdown of the potential issues to look out for:
1. Memory Leak Risk (OOM Crashes)
1. Memory Leak Risk (OOM Crashes)
Removed Restart Logic:
The most significant change is the removal of the
$counter
and
RESTART_AFTER
logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (
gc_collect_cycles()
).
Dependency Leaks:
If any underlying service (like the
ElasticSearchClient
, ORM, or Datadog helper) retains references to processed entities,
gc_collect_cycles()
will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.
Hardcoded Limits:
The code still includes
ini_set('memory_limit', '512M');
. Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.
2. Race Condition in Redis Lock
2. Race Condition in Redis Lock
Non-Atomic Operations:
The
logMemoryUsage
method uses three distinct steps to handle the lock:
get()
,
set()
, and
expire()
.
The Bottleneck:
If multiple workers process the same
$this->updateTarget
concurrently, they can both pass the
if (! is_null(Redis::get(...)))
check at the exact same millisecond. Both will then execute
set()
and push duplicate metrics to Datadog.
The Fix:
This should be replaced with a single atomic operation using Redis's
NX
(Not eXists) and
EX
(Expire) flags, or Laravel’s built-in atomic cache locks:
Redis::set($gaugeLockName, true, 'EX', 60, 'NX')
.
3. Infinite Loops and Caller Contract
3. Infinite Loops and Caller Contract
Return Value Change:
doUpdateEntitiesChunk()
previously returned whether it should iterate again based on staleness or chunk size. It now always returns
true
(unless the selection is totally empty).
The Bottleneck:
If the code calling this method relies on a
false
return to pause, sleep, or gracefully terminate, changing this to an unconditional
true
could result in an aggressive "busy loop" that spikes CPU usage.
4. Performance Overhead
4. Performance Overhead
Expensive Garbage Collection:
Calling
gc_collect_cycles();
on
every single chunk
can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.
Synchronous Metric Dispatch:
If the
Datadog::increment
or
Datadog::gauge
methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.
5. Lack of Explicit Error Handling
5. Lack of Explicit Error Handling
No
try/catch
Blocks:
The script executes complex network operations (
loadDocuments
, Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (32)
Pull requests
(
32
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality
Security and quality
Insights
Insights
Settings
Settings
JY-20915 add alias for EU #12105 Edit title
JY-20915 add alias for EU
#
12105
Edit title
Awaiting approval
Awaiting approval
Code
Code
Open
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Lines changed: 365 additions & 1 deletion
Conversation (1)
Conversation
(
1
)
Commits (5)
Commits
(
5
)
Checks (3)
Checks
(
3
)
Files changed (4)
Files changed
(
4
)
Open
JY-20915 add alias for EU #12105 LakyLak wants to merge 5 commits into master from JY-20915-add-domain-specific-email-text-relay Copy head branch name to clipboard
JY-20915 add alias for EU
JY-20915 add alias for EU
#
12105
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Conversation
Conversation
@LakyLak
Show options
LakyLak commented yesterday
LakyLak
LakyLak
commented
yesterday
yesterday
JIRA: JY-20915
JIRA:
JY-20915
JY-20915
Changes:
Changes:
Support text relay for EU
Prevent errors from EU on US
Add or remove reactions
LakyLak
LakyLak
added
5
commits
yesterday
yesterday
@LakyLak
JY-20915
JY-20915
add alias for EU
add alias for EU
8 / 10 checks OK
e5255d5
e5255d5
@LakyLak
JY-20915
JY-20915
fix env recognization
fix env recognization
11 / 12 checks OK
8953054
8953054
@LakyLak
JY-20915
JY-20915
code smells & tests
code smells & tests
11 / 12 checks OK
73d4bea
73d4bea
@LakyLak
JY-20915
JY-20915
add more tests
add more tests
11 / 12 checks OK
5d2dd3e
5d2dd3e
@LakyLak
JY-20915
JY-20915
add sms received test
add sms received test
12 / 12 checks OK...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
65268
|
2290
|
8
|
2026-05-20T15:39:06.056677+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-20/1779 /Users/lukas/.screenpipe/data/data/2026-05-20/1779291546056_m2.jpg...
|
Firefox
|
JY-20915 add alias for EU by LakyLak · Pull Reques JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12105
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
Close tab
Coverage on New Code - app in Jiminny SonarQube Cloud
Coverage on New Code - app in Jiminny SonarQube Cloud
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Copy prompt
Gemini said
Gemini said
Here is a concise summary of the changes made in the code selection:
Refactoring and Dependencies
Refactoring and Dependencies
Replaced Interface with Implementation:
Changed
BatchStatusInterface
to
BatchStatusManager
in the imports and constructor dependency injection.
Added Redis Support:
Imported
Illuminate\Support\Facades\Redis
to handle a newly introduced memory-logging lock mechanism.
Removed Traits:
Removed
WorkerIdTrait
, along with the
worker
field tracking in the final logs.
Loop and Worker Lifecycle Adjustments
Loop and Worker Lifecycle Adjustments
Removed Worker Auto-Restart:
Deleted the
$counter
property, the
RESTART_AFTER
constant, and the
shouldIterateAgain()
method. The script no longer tracks execution iterations or triggers a self-managed worker restart.
Simplified Chunk Method Return:
Modified
doUpdateEntitiesChunk()
to always return
true
upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.
Priority Handling for Throttled Entities
Priority Handling for Throttled Entities
Stale Record Elevation:
Updated the logic in
rescheduleThrottledEntities()
to check if a throttled entity group is classified as "stale". If it is, the entities are rescheduled using
QueuePriorityEnum::NORMAL
; otherwise, they keep their respective queue priority.
Metrics, Logging, and Environment Handling
Metrics, Logging, and Environment Handling
Added Environment Tracking:
Introduced a
$environment
property (defaulting to
'local'
) and a
setEnvironment()
method to dynamically assign it.
Memory Monitoring via Datadog Gauge:
Added a
logMemoryUsage()
method that submits peak memory allocation to Datadog as a gauge metric (
jiminny.reindex-memory-usage
).
Redis Lock for Metrics Throttling:
Implemented a Redis-backed lock (
%s-process-manager-lock
) with a 60-second expiration inside
logMemoryUsage()
to prevent over-reporting metrics.
Log Payload Update:
Added total processed items (
$updatedDocuments + $deletedDocuments
) to the final information log.
Good response
Bad response
Share & export
Copy
Show more options
You said are there any issues or potential bottlenecks
You said
are there any issues or potential bottlenecks
Copy prompt
Edit
Gemini said
Gemini said
Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.
Here is a breakdown of the potential issues to look out for:
1. Memory Leak Risk (OOM Crashes)
1. Memory Leak Risk (OOM Crashes)
Removed Restart Logic:
The most significant change is the removal of the
$counter
and
RESTART_AFTER
logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (
gc_collect_cycles()
).
Dependency Leaks:
If any underlying service (like the
ElasticSearchClient
, ORM, or Datadog helper) retains references to processed entities,
gc_collect_cycles()
will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.
Hardcoded Limits:
The code still includes
ini_set('memory_limit', '512M');
. Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.
2. Race Condition in Redis Lock
2. Race Condition in Redis Lock
Non-Atomic Operations:
The
logMemoryUsage
method uses three distinct steps to handle the lock:
get()
,
set()
, and
expire()
.
The Bottleneck:
If multiple workers process the same
$this->updateTarget
concurrently, they can both pass the
if (! is_null(Redis::get(...)))
check at the exact same millisecond. Both will then execute
set()
and push duplicate metrics to Datadog.
The Fix:
This should be replaced with a single atomic operation using Redis's
NX
(Not eXists) and
EX
(Expire) flags, or Laravel’s built-in atomic cache locks:
Redis::set($gaugeLockName, true, 'EX', 60, 'NX')
.
3. Infinite Loops and Caller Contract
3. Infinite Loops and Caller Contract
Return Value Change:
doUpdateEntitiesChunk()
previously returned whether it should iterate again based on staleness or chunk size. It now always returns
true
(unless the selection is totally empty).
The Bottleneck:
If the code calling this method relies on a
false
return to pause, sleep, or gracefully terminate, changing this to an unconditional
true
could result in an aggressive "busy loop" that spikes CPU usage.
4. Performance Overhead
4. Performance Overhead
Expensive Garbage Collection:
Calling
gc_collect_cycles();
on
every single chunk
can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.
Synchronous Metric Dispatch:
If the
Datadog::increment
or
Datadog::gauge
methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.
5. Lack of Explicit Error Handling
5. Lack of Explicit Error Handling
No
try/catch
Blocks:
The script executes complex network operations (
loadDocuments
, Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.10721409,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.15791224,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.12699468,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.18994413,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Coverage on New Code - app in Jiminny SonarQube Cloud","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Coverage on New Code - app in Jiminny SonarQube Cloud","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.10139628,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.18068483,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.4644282,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.15824468,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.38068634,"width":0.07413564,"height":0.025538707},"on_screen":true,"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.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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,"bounds":{"left":0.35854387,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"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,"bounds":{"left":0.37051198,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Main menu","depth":13,"bounds":{"left":0.08228058,"top":0.09736632,"width":0.015957447,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"bounds":{"left":0.09823803,"top":0.10215483,"width":0.028091755,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"bounds":{"left":0.1008976,"top":0.10654429,"width":0.02144282,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":13,"bounds":{"left":0.35854387,"top":0.10215483,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":13,"bounds":{"left":0.37051198,"top":0.10215483,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.079288565,"top":0.14445332,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.079288565,"top":0.14684756,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\\LaravelDatadogHelper\\Datadog;7use ChaseConey\\LaravelDatadogHelper\\Datadog;8use Illuminate\\Support\\Facades\\Log;8use Illuminate\\Support\\Facades\\Log;9+use Illuminate\\Support\\Facades\\Redis;9use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14-use Jiminny\\Component\\ES\\Processor\\BatchStatusInterface;15+use Jiminny\\Component\\ES\\Processor\\BatchStatusManager;15use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21-use Jiminny\\Component\\ES\\Processor\\Traits\\WorkerIdTrait;22use Jiminny\\Utils\\StringUtil;22use Jiminny\\Utils\\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\\LaravelDatadogHelper\\Datadog;7use ChaseConey\\LaravelDatadogHelper\\Datadog;8use Illuminate\\Support\\Facades\\Log;8use Illuminate\\Support\\Facades\\Log;9+use Illuminate\\Support\\Facades\\Redis;9use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14-use Jiminny\\Component\\ES\\Processor\\BatchStatusInterface;15+use Jiminny\\Component\\ES\\Processor\\BatchStatusManager;15use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21-use Jiminny\\Component\\ES\\Processor\\Traits\\WorkerIdTrait;22use Jiminny\\Utils\\StringUtil;22use Jiminny\\Utils\\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a concise summary of the changes made in the code selection:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactoring and Dependencies","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactoring and Dependencies","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaced Interface with Implementation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changed","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BatchStatusInterface","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BatchStatusManager","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"in the imports and constructor dependency injection.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added Redis Support:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Imported","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Illuminate\\Support\\Facades\\Redis","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to handle a newly introduced memory-logging lock mechanism.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Traits:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WorkerIdTrait","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", along with the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"worker","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"field tracking in the final logs.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Loop and Worker Lifecycle Adjustments","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Loop and Worker Lifecycle Adjustments","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Worker Auto-Restart:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deleted the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$counter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"property, the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RESTART_AFTER","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"constant, and the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"shouldIterateAgain()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method. The script no longer tracks execution iterations or triggers a self-managed worker restart.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Simplified Chunk Method Return:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Modified","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"doUpdateEntitiesChunk()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to always return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Priority Handling for Throttled Entities","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Priority Handling for Throttled Entities","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Record Elevation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated the logic in","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"rescheduleThrottledEntities()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to check if a throttled entity group is classified as \"stale\". If it is, the entities are rescheduled using","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum::NORMAL","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"; otherwise, they keep their respective queue priority.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Metrics, Logging, and Environment Handling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Metrics, Logging, and Environment Handling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added Environment Tracking:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduced a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$environment","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"property (defaulting to","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'local'","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") and a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setEnvironment()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method to dynamically assign it.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Memory Monitoring via Datadog Gauge:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method that submits peak memory allocation to Datadog as a gauge metric (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"jiminny.reindex-memory-usage","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Redis Lock for Metrics Throttling:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Implemented a Redis-backed lock (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"%s-process-manager-lock","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") with a 60-second expiration inside","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to prevent over-reporting metrics.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Log Payload Update:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added total processed items (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$updatedDocuments + $deletedDocuments","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to the final information log.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":23,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":23,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":23,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said are there any issues or potential bottlenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"are there any issues or potential bottlenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a breakdown of the potential issues to look out for:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Memory Leak Risk (OOM Crashes)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Memory Leak Risk (OOM Crashes)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Restart Logic:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The most significant change is the removal of the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$counter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RESTART_AFTER","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dependency Leaks:","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.050033245,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If any underlying service (like the","depth":26,"bounds":{"left":0.17453457,"top":0.0,"width":0.08277926,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ElasticSearchClient","depth":27,"bounds":{"left":0.25930852,"top":0.0,"width":0.056848403,"height":0.015163607},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ORM, or Datadog helper) retains references to processed entities,","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.21775267,"height":0.03631285},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles()","depth":27,"bounds":{"left":0.26811835,"top":0.0,"width":0.056848403,"height":0.015163607},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.23138298,"height":0.05546688},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hardcoded Limits:","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.047041222,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The code still includes","depth":26,"bounds":{"left":0.17154256,"top":0.0,"width":0.05651596,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ini_set('memory_limit', '512M');","depth":27,"bounds":{"left":0.23005319,"top":0.0,"width":0.095744684,"height":0.015163607},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.23055187,"height":0.05546688},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Race Condition in Redis Lock","depth":23,"bounds":{"left":0.111369684,"top":0.07940942,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Race Condition in Redis Lock","depth":24,"bounds":{"left":0.111369684,"top":0.079010375,"width":0.09125665,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Non-Atomic Operations:","depth":26,"bounds":{"left":0.12450133,"top":0.10614525,"width":0.062333778,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":26,"bounds":{"left":0.18683511,"top":0.10614525,"width":0.011635638,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage","depth":27,"bounds":{"left":0.20046543,"top":0.10774142,"width":0.041888297,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method uses three distinct steps to handle the lock:","depth":26,"bounds":{"left":0.12450133,"top":0.10614525,"width":0.22722739,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"get()","depth":27,"bounds":{"left":0.14860372,"top":0.12689546,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"bounds":{"left":0.16555852,"top":0.12529927,"width":0.002493351,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"set()","depth":27,"bounds":{"left":0.17004654,"top":0.12689546,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":26,"bounds":{"left":0.18700133,"top":0.12529927,"width":0.013131649,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"expire()","depth":27,"bounds":{"left":0.20212767,"top":0.12689546,"width":0.023936171,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"bounds":{"left":0.22805852,"top":0.12529927,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"bounds":{"left":0.12450133,"top":0.15403032,"width":0.040059842,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If multiple workers process the same","depth":26,"bounds":{"left":0.16456117,"top":0.15403032,"width":0.09275266,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$this->updateTarget","depth":27,"bounds":{"left":0.25930852,"top":0.15562649,"width":0.056848403,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"concurrently, they can both pass the","depth":26,"bounds":{"left":0.12450133,"top":0.15403032,"width":0.22855718,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if (! is_null(Redis::get(...)))","depth":27,"bounds":{"left":0.18351063,"top":0.17478053,"width":0.09275266,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"check at the exact same millisecond. Both will then execute","depth":26,"bounds":{"left":0.12450133,"top":0.17318435,"width":0.21575798,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"set()","depth":27,"bounds":{"left":0.2122673,"top":0.19393456,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and push duplicate metrics to Datadog.","depth":26,"bounds":{"left":0.22922207,"top":0.19233839,"width":0.09823803,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Fix:","depth":26,"bounds":{"left":0.12450133,"top":0.22106944,"width":0.019281914,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This should be replaced with a single atomic operation using Redis's","depth":26,"bounds":{"left":0.14378324,"top":0.22106944,"width":0.16821809,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NX","depth":27,"bounds":{"left":0.31399602,"top":0.22266561,"width":0.005984043,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Not eXists) and","depth":26,"bounds":{"left":0.12450133,"top":0.22106944,"width":0.22855718,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EX","depth":27,"bounds":{"left":0.13696809,"top":0.24181964,"width":0.005984043,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Expire) flags, or Laravel’s built-in atomic cache locks:","depth":26,"bounds":{"left":0.14494681,"top":0.24022347,"width":0.13264628,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Redis::set($gaugeLockName, true, 'EX', 60, 'NX')","depth":27,"bounds":{"left":0.12649602,"top":0.26097366,"width":0.14361702,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"bounds":{"left":0.27210772,"top":0.25937748,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Infinite Loops and Caller Contract","depth":23,"bounds":{"left":0.111369684,"top":0.30925778,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Infinite Loops and Caller Contract","depth":24,"bounds":{"left":0.111369684,"top":0.30885875,"width":0.10571808,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Return Value Change:","depth":26,"bounds":{"left":0.12450133,"top":0.33599362,"width":0.055352394,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"doUpdateEntitiesChunk()","depth":27,"bounds":{"left":0.18301196,"top":0.33758977,"width":0.06881649,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"previously returned whether it should iterate again based on staleness or chunk size. It now always returns","depth":26,"bounds":{"left":0.12450133,"top":0.33599362,"width":0.2237367,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"bounds":{"left":0.29438165,"top":0.3567438,"width":0.011968086,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(unless the selection is totally empty).","depth":26,"bounds":{"left":0.12450133,"top":0.35514766,"width":0.2130984,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"bounds":{"left":0.12450133,"top":0.40303272,"width":0.040059842,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the code calling this method relies on a","depth":26,"bounds":{"left":0.16456117,"top":0.40303272,"width":0.10305851,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":27,"bounds":{"left":0.26961437,"top":0.4046289,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return to pause, sleep, or gracefully terminate, changing this to an unconditional","depth":26,"bounds":{"left":0.12450133,"top":0.40303272,"width":0.22589761,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"bounds":{"left":0.26163563,"top":0.4237829,"width":0.011968086,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"could result in an aggressive \"busy loop\" that spikes CPU usage.","depth":26,"bounds":{"left":0.12450133,"top":0.42218676,"width":0.22290559,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Performance Overhead","depth":23,"bounds":{"left":0.111369684,"top":0.49122107,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Performance Overhead","depth":24,"bounds":{"left":0.111369684,"top":0.49082202,"width":0.076130316,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Expensive Garbage Collection:","depth":26,"bounds":{"left":0.12450133,"top":0.5179569,"width":0.078457445,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Calling","depth":26,"bounds":{"left":0.20295878,"top":0.5179569,"width":0.019281914,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles();","depth":27,"bounds":{"left":0.22423537,"top":0.51955307,"width":0.059840426,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"on","depth":26,"bounds":{"left":0.28607047,"top":0.5179569,"width":0.00880984,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"every single chunk","depth":26,"bounds":{"left":0.29488033,"top":0.5179569,"width":0.045545213,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.","depth":26,"bounds":{"left":0.12450133,"top":0.5179569,"width":0.23420878,"height":0.05546688},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Synchronous Metric Dispatch:","depth":26,"bounds":{"left":0.12450133,"top":0.584996,"width":0.07712766,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the","depth":26,"bounds":{"left":0.20162898,"top":0.584996,"width":0.015292553,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Datadog::increment","depth":27,"bounds":{"left":0.21891622,"top":0.5865922,"width":0.053856384,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"bounds":{"left":0.27476728,"top":0.584996,"width":0.0078125,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Datadog::gauge","depth":27,"bounds":{"left":0.28457448,"top":0.5865922,"width":0.041888297,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.","depth":26,"bounds":{"left":0.12450133,"top":0.584996,"width":0.23420878,"height":0.05546688},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"5. Lack of Explicit Error Handling","depth":23,"bounds":{"left":0.111369684,"top":0.67318434,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5. Lack of Explicit Error Handling","depth":24,"bounds":{"left":0.111369684,"top":0.67278534,"width":0.094913565,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No","depth":26,"bounds":{"left":0.12450133,"top":0.6999202,"width":0.008477394,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"try/catch","depth":27,"bounds":{"left":0.1349734,"top":0.7015164,"width":0.026928192,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Blocks:","depth":26,"bounds":{"left":0.16389628,"top":0.6999202,"width":0.019614361,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The script executes complex network operations (","depth":26,"bounds":{"left":0.18351063,"top":0.6999202,"width":0.12367021,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"loadDocuments","depth":27,"bounds":{"left":0.30917552,"top":0.7015164,"width":0.038896278,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.","depth":26,"bounds":{"left":0.12450133,"top":0.6999202,"width":0.22888963,"height":0.09377494},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"bounds":{"left":0.1087101,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"bounds":{"left":0.124667555,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":22,"bounds":{"left":0.140625,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"bounds":{"left":0.15658244,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.17253989,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"bounds":{"left":0.18849733,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Ask Gemini","depth":21,"bounds":{"left":0.14594415,"top":0.86632085,"width":0.17021276,"height":0.01915403},"on_screen":true,"value":"Ask Gemini","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Gemini","depth":22,"bounds":{"left":0.14594415,"top":0.8667199,"width":0.030418882,"height":0.018355945},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Upload & tools","depth":20,"bounds":{"left":0.12732713,"top":0.8567438,"width":0.015957447,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Microphone","depth":20,"bounds":{"left":0.32413563,"top":0.86153233,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send message","depth":20,"bounds":{"left":0.33211437,"top":0.8631285,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":17,"bounds":{"left":0.102726065,"top":0.9173983,"width":0.21775267,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":17,"bounds":{"left":0.32047874,"top":0.9173983,"width":0.043882977,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":18,"bounds":{"left":0.32047874,"top":0.9173983,"width":0.043882977,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":19,"bounds":{"left":0.079288565,"top":0.91660017,"width":0.04720745,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.08494016,"top":0.95730245,"width":0.053523935,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.09059176,"top":0.96249,"width":0.042220745,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
2851848421254255254
|
-1052937846671460452
|
idle
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
Close tab
Coverage on New Code - app in Jiminny SonarQube Cloud
Coverage on New Code - app in Jiminny SonarQube Cloud
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Copy prompt
Gemini said
Gemini said
Here is a concise summary of the changes made in the code selection:
Refactoring and Dependencies
Refactoring and Dependencies
Replaced Interface with Implementation:
Changed
BatchStatusInterface
to
BatchStatusManager
in the imports and constructor dependency injection.
Added Redis Support:
Imported
Illuminate\Support\Facades\Redis
to handle a newly introduced memory-logging lock mechanism.
Removed Traits:
Removed
WorkerIdTrait
, along with the
worker
field tracking in the final logs.
Loop and Worker Lifecycle Adjustments
Loop and Worker Lifecycle Adjustments
Removed Worker Auto-Restart:
Deleted the
$counter
property, the
RESTART_AFTER
constant, and the
shouldIterateAgain()
method. The script no longer tracks execution iterations or triggers a self-managed worker restart.
Simplified Chunk Method Return:
Modified
doUpdateEntitiesChunk()
to always return
true
upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.
Priority Handling for Throttled Entities
Priority Handling for Throttled Entities
Stale Record Elevation:
Updated the logic in
rescheduleThrottledEntities()
to check if a throttled entity group is classified as "stale". If it is, the entities are rescheduled using
QueuePriorityEnum::NORMAL
; otherwise, they keep their respective queue priority.
Metrics, Logging, and Environment Handling
Metrics, Logging, and Environment Handling
Added Environment Tracking:
Introduced a
$environment
property (defaulting to
'local'
) and a
setEnvironment()
method to dynamically assign it.
Memory Monitoring via Datadog Gauge:
Added a
logMemoryUsage()
method that submits peak memory allocation to Datadog as a gauge metric (
jiminny.reindex-memory-usage
).
Redis Lock for Metrics Throttling:
Implemented a Redis-backed lock (
%s-process-manager-lock
) with a 60-second expiration inside
logMemoryUsage()
to prevent over-reporting metrics.
Log Payload Update:
Added total processed items (
$updatedDocuments + $deletedDocuments
) to the final information log.
Good response
Bad response
Share & export
Copy
Show more options
You said are there any issues or potential bottlenecks
You said
are there any issues or potential bottlenecks
Copy prompt
Edit
Gemini said
Gemini said
Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.
Here is a breakdown of the potential issues to look out for:
1. Memory Leak Risk (OOM Crashes)
1. Memory Leak Risk (OOM Crashes)
Removed Restart Logic:
The most significant change is the removal of the
$counter
and
RESTART_AFTER
logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (
gc_collect_cycles()
).
Dependency Leaks:
If any underlying service (like the
ElasticSearchClient
, ORM, or Datadog helper) retains references to processed entities,
gc_collect_cycles()
will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.
Hardcoded Limits:
The code still includes
ini_set('memory_limit', '512M');
. Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.
2. Race Condition in Redis Lock
2. Race Condition in Redis Lock
Non-Atomic Operations:
The
logMemoryUsage
method uses three distinct steps to handle the lock:
get()
,
set()
, and
expire()
.
The Bottleneck:
If multiple workers process the same
$this->updateTarget
concurrently, they can both pass the
if (! is_null(Redis::get(...)))
check at the exact same millisecond. Both will then execute
set()
and push duplicate metrics to Datadog.
The Fix:
This should be replaced with a single atomic operation using Redis's
NX
(Not eXists) and
EX
(Expire) flags, or Laravel’s built-in atomic cache locks:
Redis::set($gaugeLockName, true, 'EX', 60, 'NX')
.
3. Infinite Loops and Caller Contract
3. Infinite Loops and Caller Contract
Return Value Change:
doUpdateEntitiesChunk()
previously returned whether it should iterate again based on staleness or chunk size. It now always returns
true
(unless the selection is totally empty).
The Bottleneck:
If the code calling this method relies on a
false
return to pause, sleep, or gracefully terminate, changing this to an unconditional
true
could result in an aggressive "busy loop" that spikes CPU usage.
4. Performance Overhead
4. Performance Overhead
Expensive Garbage Collection:
Calling
gc_collect_cycles();
on
every single chunk
can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.
Synchronous Metric Dispatch:
If the
Datadog::increment
or
Datadog::gauge
methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.
5. Lack of Explicit Error Handling
5. Lack of Explicit Error Handling
No
try/catch
Blocks:
The script executes complex network operations (
loadDocuments
, Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page...
|
65266
|
NULL
|
NULL
|
NULL
|
|
65269
|
2289
|
8
|
2026-05-20T15:39:23.320670+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-20/1779 /Users/lukas/.screenpipe/data/data/2026-05-20/1779291563320_m1.jpg...
|
Firefox
|
JY-20915 add alias for EU by LakyLak · Pull Reques JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12105
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
Close tab
Coverage on New Code - app in Jiminny SonarQube Cloud
Coverage on New Code - app in Jiminny SonarQube Cloud
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Copy prompt
Gemini said
Gemini said
Here is a concise summary of the changes made in the code selection:
Refactoring and Dependencies
Refactoring and Dependencies
Replaced Interface with Implementation:
Changed
BatchStatusInterface
to
BatchStatusManager
in the imports and constructor dependency injection.
Added Redis Support:
Imported
Illuminate\Support\Facades\Redis
to handle a newly introduced memory-logging lock mechanism.
Removed Traits:
Removed
WorkerIdTrait
, along with the
worker
field tracking in the final logs.
Loop and Worker Lifecycle Adjustments
Loop and Worker Lifecycle Adjustments
Removed Worker Auto-Restart:
Deleted the
$counter
property, the
RESTART_AFTER
constant, and the
shouldIterateAgain()
method. The script no longer tracks execution iterations or triggers a self-managed worker restart.
Simplified Chunk Method Return:
Modified
doUpdateEntitiesChunk()
to always return
true
upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.
Priority Handling for Throttled Entities
Priority Handling for Throttled Entities
Stale Record Elevation:
Updated the logic in
rescheduleThrottledEntities()
to check if a throttled entity group is classified as "stale". If it is, the entities are rescheduled using
QueuePriorityEnum::NORMAL
; otherwise, they keep their respective queue priority.
Metrics, Logging, and Environment Handling
Metrics, Logging, and Environment Handling
Added Environment Tracking:
Introduced a
$environment
property (defaulting to
'local'
) and a
setEnvironment()
method to dynamically assign it.
Memory Monitoring via Datadog Gauge:
Added a
logMemoryUsage()
method that submits peak memory allocation to Datadog as a gauge metric (
jiminny.reindex-memory-usage
).
Redis Lock for Metrics Throttling:
Implemented a Redis-backed lock (
%s-process-manager-lock
) with a 60-second expiration inside
logMemoryUsage()
to prevent over-reporting metrics.
Log Payload Update:
Added total processed items (
$updatedDocuments + $deletedDocuments
) to the final information log.
Good response
Bad response
Share & export
Copy
Show more options
You said are there any issues or potential bottlenecks
You said
are there any issues or potential bottlenecks
Copy prompt
Edit
Gemini said
Gemini said
Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.
Here is a breakdown of the potential issues to look out for:
1. Memory Leak Risk (OOM Crashes)
1. Memory Leak Risk (OOM Crashes)
Removed Restart Logic:
The most significant change is the removal of the
$counter
and
RESTART_AFTER
logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (
gc_collect_cycles()
).
Dependency Leaks:
If any underlying service (like the
ElasticSearchClient
, ORM, or Datadog helper) retains references to processed entities,
gc_collect_cycles()
will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.
Hardcoded Limits:
The code still includes
ini_set('memory_limit', '512M');
. Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.
2. Race Condition in Redis Lock
2. Race Condition in Redis Lock
Non-Atomic Operations:
The
logMemoryUsage
method uses three distinct steps to handle the lock:
get()
,
set()
, and
expire()
.
The Bottleneck:
If multiple workers process the same
$this->updateTarget
concurrently, they can both pass the
if (! is_null(Redis::get(...)))
check at the exact same millisecond. Both will then execute
set()
and push duplicate metrics to Datadog.
The Fix:
This should be replaced with a single atomic operation using Redis's
NX
(Not eXists) and
EX
(Expire) flags, or Laravel’s built-in atomic cache locks:
Redis::set($gaugeLockName, true, 'EX', 60, 'NX')
.
3. Infinite Loops and Caller Contract
3. Infinite Loops and Caller Contract
Return Value Change:
doUpdateEntitiesChunk()
previously returned whether it should iterate again based on staleness or chunk size. It now always returns
true
(unless the selection is totally empty).
The Bottleneck:
If the code calling this method relies on a
false
return to pause, sleep, or gracefully terminate, changing this to an unconditional
true
could result in an aggressive "busy loop" that spikes CPU usage.
4. Performance Overhead
4. Performance Overhead
Expensive Garbage Collection:
Calling
gc_collect_cycles();
on
every single chunk
can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.
Synchronous Metric Dispatch:
If the
Datadog::increment
or
Datadog::gauge
methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.
5. Lack of Explicit Error Handling
5. Lack of Explicit Error Handling
No
try/catch
Blocks:
The script executes complex network operations (
loadDocuments
, Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (32)
Pull requests
(
32
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality
Security and quality
Insights
Insights
Settings
Settings
JY-20915 add alias for EU #12105 Edit title
JY-20915 add alias for EU
#
12105
Edit title
Awaiting approval
Awaiting approval
Code
Code
Open
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Lines changed: 365 additions & 1 deletion
Conversation (1)
Conversation
(
1
)
Commits (5)
Commits
(
5
)
Checks (3)
Checks
(
3
)
Files changed (4)
Files changed
(
4
)
Open
JY-20915 add alias for EU #12105 LakyLak wants to merge 5 commits into master from JY-20915-add-domain-specific-email-text-relay Copy head branch name to clipboard
JY-20915 add alias for EU
JY-20915 add alias for EU
#
12105
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Conversation
Conversation
@LakyLak
Show options
LakyLak commented yesterday
LakyLak
LakyLak
commented
yesterday
yesterday
JIRA: JY-20915
JIRA:
JY-20915
JY-20915
Changes:
Changes:
Support text relay for EU
Prevent errors from EU on US
Add or remove reactions
LakyLak
LakyLak
added
5
commits
yesterday
yesterday
@LakyLak
JY-20915
JY-20915
add alias for EU
add alias for EU
8 / 10 checks OK
e5255d5
e5255d5
@LakyLak
JY-20915
JY-20915
fix env recognization...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Coverage on New Code - app in Jiminny SonarQube Cloud","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Coverage on New Code - app in Jiminny SonarQube Cloud","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Main menu","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\\LaravelDatadogHelper\\Datadog;7use ChaseConey\\LaravelDatadogHelper\\Datadog;8use Illuminate\\Support\\Facades\\Log;8use Illuminate\\Support\\Facades\\Log;9+use Illuminate\\Support\\Facades\\Redis;9use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14-use Jiminny\\Component\\ES\\Processor\\BatchStatusInterface;15+use Jiminny\\Component\\ES\\Processor\\BatchStatusManager;15use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21-use Jiminny\\Component\\ES\\Processor\\Traits\\WorkerIdTrait;22use Jiminny\\Utils\\StringUtil;22use Jiminny\\Utils\\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\\LaravelDatadogHelper\\Datadog;7use ChaseConey\\LaravelDatadogHelper\\Datadog;8use Illuminate\\Support\\Facades\\Log;8use Illuminate\\Support\\Facades\\Log;9+use Illuminate\\Support\\Facades\\Redis;9use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14-use Jiminny\\Component\\ES\\Processor\\BatchStatusInterface;15+use Jiminny\\Component\\ES\\Processor\\BatchStatusManager;15use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21-use Jiminny\\Component\\ES\\Processor\\Traits\\WorkerIdTrait;22use Jiminny\\Utils\\StringUtil;22use Jiminny\\Utils\\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a concise summary of the changes made in the code selection:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactoring and Dependencies","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactoring and Dependencies","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaced Interface with Implementation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changed","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BatchStatusInterface","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BatchStatusManager","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"in the imports and constructor dependency injection.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added Redis Support:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Imported","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Illuminate\\Support\\Facades\\Redis","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to handle a newly introduced memory-logging lock mechanism.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Traits:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WorkerIdTrait","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", along with the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"worker","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"field tracking in the final logs.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Loop and Worker Lifecycle Adjustments","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Loop and Worker Lifecycle Adjustments","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Worker Auto-Restart:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deleted the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$counter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"property, the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RESTART_AFTER","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"constant, and the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"shouldIterateAgain()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method. The script no longer tracks execution iterations or triggers a self-managed worker restart.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Simplified Chunk Method Return:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Modified","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"doUpdateEntitiesChunk()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to always return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Priority Handling for Throttled Entities","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Priority Handling for Throttled Entities","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Record Elevation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated the logic in","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"rescheduleThrottledEntities()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to check if a throttled entity group is classified as \"stale\". If it is, the entities are rescheduled using","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum::NORMAL","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"; otherwise, they keep their respective queue priority.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Metrics, Logging, and Environment Handling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Metrics, Logging, and Environment Handling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added Environment Tracking:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduced a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$environment","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"property (defaulting to","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'local'","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") and a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setEnvironment()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method to dynamically assign it.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Memory Monitoring via Datadog Gauge:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method that submits peak memory allocation to Datadog as a gauge metric (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"jiminny.reindex-memory-usage","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Redis Lock for Metrics Throttling:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Implemented a Redis-backed lock (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"%s-process-manager-lock","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") with a 60-second expiration inside","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to prevent over-reporting metrics.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Log Payload Update:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added total processed items (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$updatedDocuments + $deletedDocuments","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to the final information log.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":23,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":23,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":23,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said are there any issues or potential bottlenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"are there any issues or potential bottlenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a breakdown of the potential issues to look out for:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Memory Leak Risk (OOM Crashes)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Memory Leak Risk (OOM Crashes)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Restart Logic:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The most significant change is the removal of the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$counter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RESTART_AFTER","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dependency Leaks:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If any underlying service (like the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ElasticSearchClient","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ORM, or Datadog helper) retains references to processed entities,","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hardcoded Limits:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The code still includes","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ini_set('memory_limit', '512M');","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Race Condition in Redis Lock","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Race Condition in Redis Lock","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Non-Atomic Operations:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method uses three distinct steps to handle the lock:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"get()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"set()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"expire()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If multiple workers process the same","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$this->updateTarget","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"concurrently, they can both pass the","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if (! is_null(Redis::get(...)))","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"check at the exact same millisecond. Both will then execute","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"set()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and push duplicate metrics to Datadog.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Fix:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This should be replaced with a single atomic operation using Redis's","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NX","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Not eXists) and","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EX","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Expire) flags, or Laravel’s built-in atomic cache locks:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Redis::set($gaugeLockName, true, 'EX', 60, 'NX')","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Infinite Loops and Caller Contract","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Infinite Loops and Caller Contract","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Return Value Change:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"doUpdateEntitiesChunk()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"previously returned whether it should iterate again based on staleness or chunk size. It now always returns","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(unless the selection is totally empty).","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the code calling this method relies on a","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return to pause, sleep, or gracefully terminate, changing this to an unconditional","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"could result in an aggressive \"busy loop\" that spikes CPU usage.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Performance Overhead","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Performance Overhead","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Expensive Garbage Collection:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Calling","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles();","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"on","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"every single chunk","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Synchronous Metric Dispatch:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Datadog::increment","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Datadog::gauge","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"5. Lack of Explicit Error Handling","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5. Lack of Explicit Error Handling","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"try/catch","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Blocks:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The script executes complex network operations (","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"loadDocuments","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":22,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Ask Gemini","depth":21,"on_screen":true,"value":"Ask Gemini","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Gemini","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Upload & tools","depth":20,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Microphone","depth":20,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send message","depth":20,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":17,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to content","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":10,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (32)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"32","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Agents","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security and quality","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JY-20915 add alias for EU #12105 Edit title","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JY-20915 add alias for EU","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12105","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit title","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Awaiting approval","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Awaiting approval","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Code","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 5 commits into","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":15,"on_screen":false,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915-add-domain-specific-email-text-relay","depth":16,"on_screen":false,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915-add-domain-specific-email-text-relay","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":16,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 365 additions & 1 deletion","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Conversation (1)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Conversation","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Commits (5)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Commits","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Checks (3)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Files changed (4)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Files changed","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JY-20915 add alias for EU #12105 LakyLak wants to merge 5 commits into master from JY-20915-add-domain-specific-email-text-relay Copy head branch name to clipboard","depth":14,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915 add alias for EU","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915 add alias for EU","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12105","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":18,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 5 commits into","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":18,"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915-add-domain-specific-email-text-relay","depth":19,"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915-add-domain-specific-email-text-relay","depth":20,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":19,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show options","depth":15,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"LakyLak commented yesterday","depth":14,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":16,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"commented","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"yesterday","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"yesterday","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JIRA: JY-20915","depth":16,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JIRA:","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915","depth":17,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Changes:","depth":16,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes:","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Support text relay for EU","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Prevent errors from EU on US","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add or remove reactions","depth":16,"on_screen":false,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"LakyLak","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"added","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"commits","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"yesterday","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"yesterday","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"JY-20915","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"add alias for EU","depth":14,"on_screen":false,"help_text":"JY-20915 add alias for EU","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"add alias for EU","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"8 / 10 checks OK","depth":14,"on_screen":false,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"e5255d5","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"e5255d5","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"JY-20915","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"fix env recognization","depth":14,"on_screen":false,"help_text":"JY-20915 fix env recognization","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-145123288558263288
|
-1048292959795792104
|
idle
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
Close tab
Coverage on New Code - app in Jiminny SonarQube Cloud
Coverage on New Code - app in Jiminny SonarQube Cloud
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Copy prompt
Gemini said
Gemini said
Here is a concise summary of the changes made in the code selection:
Refactoring and Dependencies
Refactoring and Dependencies
Replaced Interface with Implementation:
Changed
BatchStatusInterface
to
BatchStatusManager
in the imports and constructor dependency injection.
Added Redis Support:
Imported
Illuminate\Support\Facades\Redis
to handle a newly introduced memory-logging lock mechanism.
Removed Traits:
Removed
WorkerIdTrait
, along with the
worker
field tracking in the final logs.
Loop and Worker Lifecycle Adjustments
Loop and Worker Lifecycle Adjustments
Removed Worker Auto-Restart:
Deleted the
$counter
property, the
RESTART_AFTER
constant, and the
shouldIterateAgain()
method. The script no longer tracks execution iterations or triggers a self-managed worker restart.
Simplified Chunk Method Return:
Modified
doUpdateEntitiesChunk()
to always return
true
upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.
Priority Handling for Throttled Entities
Priority Handling for Throttled Entities
Stale Record Elevation:
Updated the logic in
rescheduleThrottledEntities()
to check if a throttled entity group is classified as "stale". If it is, the entities are rescheduled using
QueuePriorityEnum::NORMAL
; otherwise, they keep their respective queue priority.
Metrics, Logging, and Environment Handling
Metrics, Logging, and Environment Handling
Added Environment Tracking:
Introduced a
$environment
property (defaulting to
'local'
) and a
setEnvironment()
method to dynamically assign it.
Memory Monitoring via Datadog Gauge:
Added a
logMemoryUsage()
method that submits peak memory allocation to Datadog as a gauge metric (
jiminny.reindex-memory-usage
).
Redis Lock for Metrics Throttling:
Implemented a Redis-backed lock (
%s-process-manager-lock
) with a 60-second expiration inside
logMemoryUsage()
to prevent over-reporting metrics.
Log Payload Update:
Added total processed items (
$updatedDocuments + $deletedDocuments
) to the final information log.
Good response
Bad response
Share & export
Copy
Show more options
You said are there any issues or potential bottlenecks
You said
are there any issues or potential bottlenecks
Copy prompt
Edit
Gemini said
Gemini said
Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.
Here is a breakdown of the potential issues to look out for:
1. Memory Leak Risk (OOM Crashes)
1. Memory Leak Risk (OOM Crashes)
Removed Restart Logic:
The most significant change is the removal of the
$counter
and
RESTART_AFTER
logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (
gc_collect_cycles()
).
Dependency Leaks:
If any underlying service (like the
ElasticSearchClient
, ORM, or Datadog helper) retains references to processed entities,
gc_collect_cycles()
will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.
Hardcoded Limits:
The code still includes
ini_set('memory_limit', '512M');
. Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.
2. Race Condition in Redis Lock
2. Race Condition in Redis Lock
Non-Atomic Operations:
The
logMemoryUsage
method uses three distinct steps to handle the lock:
get()
,
set()
, and
expire()
.
The Bottleneck:
If multiple workers process the same
$this->updateTarget
concurrently, they can both pass the
if (! is_null(Redis::get(...)))
check at the exact same millisecond. Both will then execute
set()
and push duplicate metrics to Datadog.
The Fix:
This should be replaced with a single atomic operation using Redis's
NX
(Not eXists) and
EX
(Expire) flags, or Laravel’s built-in atomic cache locks:
Redis::set($gaugeLockName, true, 'EX', 60, 'NX')
.
3. Infinite Loops and Caller Contract
3. Infinite Loops and Caller Contract
Return Value Change:
doUpdateEntitiesChunk()
previously returned whether it should iterate again based on staleness or chunk size. It now always returns
true
(unless the selection is totally empty).
The Bottleneck:
If the code calling this method relies on a
false
return to pause, sleep, or gracefully terminate, changing this to an unconditional
true
could result in an aggressive "busy loop" that spikes CPU usage.
4. Performance Overhead
4. Performance Overhead
Expensive Garbage Collection:
Calling
gc_collect_cycles();
on
every single chunk
can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.
Synchronous Metric Dispatch:
If the
Datadog::increment
or
Datadog::gauge
methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.
5. Lack of Explicit Error Handling
5. Lack of Explicit Error Handling
No
try/catch
Blocks:
The script executes complex network operations (
loadDocuments
, Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (32)
Pull requests
(
32
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality
Security and quality
Insights
Insights
Settings
Settings
JY-20915 add alias for EU #12105 Edit title
JY-20915 add alias for EU
#
12105
Edit title
Awaiting approval
Awaiting approval
Code
Code
Open
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Lines changed: 365 additions & 1 deletion
Conversation (1)
Conversation
(
1
)
Commits (5)
Commits
(
5
)
Checks (3)
Checks
(
3
)
Files changed (4)
Files changed
(
4
)
Open
JY-20915 add alias for EU #12105 LakyLak wants to merge 5 commits into master from JY-20915-add-domain-specific-email-text-relay Copy head branch name to clipboard
JY-20915 add alias for EU
JY-20915 add alias for EU
#
12105
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Conversation
Conversation
@LakyLak
Show options
LakyLak commented yesterday
LakyLak
LakyLak
commented
yesterday
yesterday
JIRA: JY-20915
JIRA:
JY-20915
JY-20915
Changes:
Changes:
Support text relay for EU
Prevent errors from EU on US
Add or remove reactions
LakyLak
LakyLak
added
5
commits
yesterday
yesterday
@LakyLak
JY-20915
JY-20915
add alias for EU
add alias for EU
8 / 10 checks OK
e5255d5
e5255d5
@LakyLak
JY-20915
JY-20915
fix env recognization...
|
65267
|
NULL
|
NULL
|
NULL
|
|
65270
|
NULL
|
0
|
2026-05-20T15:39:36.580437+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-20/1779 /Users/lukas/.screenpipe/data/data/2026-05-20/1779291576580_m2.jpg...
|
Firefox
|
JY-20915 add alias for EU by LakyLak · Pull Reques JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12105
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
Close tab
Coverage on New Code - app in Jiminny SonarQube Cloud
Coverage on New Code - app in Jiminny SonarQube Cloud
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Copy prompt
Gemini said
Gemini said
Here is a concise summary of the changes made in the code selection:
Refactoring and Dependencies
Refactoring and Dependencies
Replaced Interface with Implementation:
Changed
BatchStatusInterface
to
BatchStatusManager
in the imports and constructor dependency injection.
Added Redis Support:
Imported
Illuminate\Support\Facades\Redis
to handle a newly introduced memory-logging lock mechanism.
Removed Traits:
Removed
WorkerIdTrait
, along with the
worker
field tracking in the final logs.
Loop and Worker Lifecycle Adjustments
Loop and Worker Lifecycle Adjustments
Removed Worker Auto-Restart:
Deleted the
$counter
property, the
RESTART_AFTER
constant, and the
shouldIterateAgain()
method. The script no longer tracks execution iterations or triggers a self-managed worker restart.
Simplified Chunk Method Return:
Modified
doUpdateEntitiesChunk()
to always return
true
upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.
Priority Handling for Throttled Entities
Priority Handling for Throttled Entities
Stale Record Elevation:
Updated the logic in
rescheduleThrottledEntities()
to check if a throttled entity group is classified as "stale". If it is, the entities are rescheduled using
QueuePriorityEnum::NORMAL
; otherwise, they keep their respective queue priority.
Metrics, Logging, and Environment Handling
Metrics, Logging, and Environment Handling
Added Environment Tracking:
Introduced a
$environment
property (defaulting to
'local'
) and a
setEnvironment()
method to dynamically assign it.
Memory Monitoring via Datadog Gauge:
Added a
logMemoryUsage()
method that submits peak memory allocation to Datadog as a gauge metric (
jiminny.reindex-memory-usage
).
Redis Lock for Metrics Throttling:
Implemented a Redis-backed lock (
%s-process-manager-lock
) with a 60-second expiration inside
logMemoryUsage()
to prevent over-reporting metrics.
Log Payload Update:
Added total processed items (
$updatedDocuments + $deletedDocuments
) to the final information log.
Good response
Bad response
Share & export
Copy
Show more options
You said are there any issues or potential bottlenecks
You said
are there any issues or potential bottlenecks
Copy prompt
Edit
Gemini said
Gemini said
Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.
Here is a breakdown of the potential issues to look out for:
1. Memory Leak Risk (OOM Crashes)
1. Memory Leak Risk (OOM Crashes)
Removed Restart Logic:
The most significant change is the removal of the
$counter
and
RESTART_AFTER
logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (
gc_collect_cycles()
).
Dependency Leaks:
If any underlying service (like the
ElasticSearchClient
, ORM, or Datadog helper) retains references to processed entities,
gc_collect_cycles()
will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.
Hardcoded Limits:
The code still includes
ini_set('memory_limit', '512M');
. Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.
2. Race Condition in Redis Lock
2. Race Condition in Redis Lock
Non-Atomic Operations:
The
logMemoryUsage
method uses three distinct steps to handle the lock:
get()
,
set()
, and
expire()
.
The Bottleneck:
If multiple workers process the same
$this->updateTarget
concurrently, they can both pass the
if (! is_null(Redis::get(...)))
check at the exact same millisecond. Both will then execute
set()
and push duplicate metrics to Datadog.
The Fix:
This should be replaced with a single atomic operation using Redis's
NX
(Not eXists) and
EX
(Expire) flags, or Laravel’s built-in atomic cache locks:
Redis::set($gaugeLockName, true, 'EX', 60, 'NX')
.
3. Infinite Loops and Caller Contract
3. Infinite Loops and Caller Contract
Return Value Change:
doUpdateEntitiesChunk()
previously returned whether it should iterate again based on staleness or chunk size. It now always returns
true
(unless the selection is totally empty).
The Bottleneck:
If the code calling this method relies on a
false
return to pause, sleep, or gracefully terminate, changing this to an unconditional
true
could result in an aggressive "busy loop" that spikes CPU usage.
4. Performance Overhead
4. Performance Overhead
Expensive Garbage Collection:
Calling
gc_collect_cycles();
on
every single chunk
can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.
Synchronous Metric Dispatch:
If the
Datadog::increment
or
Datadog::gauge
methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.
5. Lack of Explicit Error Handling
5. Lack of Explicit Error Handling
No
try/catch
Blocks:
The script executes complex network operations (
loadDocuments
, Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (32)
Pull requests
(
32
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality
Security and quality
Insights
Insights
Settings
Settings
JY-20915 add alias for EU #12105 Edit title
JY-20915 add alias for EU
#
12105
Edit title
Awaiting approval
Awaiting approval
Code
Code
Open
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Lines changed: 365 additions & 1 deletion
Conversation (1)
Conversation
(
1
)
Commits (5)
Commits
(
5
)
Checks (3)
Checks
(
3
)
Files changed (4)
Files changed
(
4
)
Open
JY-20915 add alias for EU #12105 LakyLak wants to merge 5 commits into master from JY-20915-add-domain-specific-email-text-relay Copy head branch name to clipboard
JY-20915 add alias for EU
JY-20915 add alias for EU
#
12105
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Conversation
Conversation
@LakyLak
Show options
LakyLak commented yesterday
LakyLak
LakyLak
commented
yesterday
yesterday
JIRA: JY-20915
JIRA:
JY-20915
JY-20915
Changes:
Changes:
Support text relay for EU
Prevent errors from EU on US
Add or remove reactions
LakyLak
LakyLak
added
5
commits
yesterday
yesterday
@LakyLak
JY-20915
JY-20915
add alias for EU
add alias for EU...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.10721409,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.15791224,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.12699468,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.18994413,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Coverage on New Code - app in Jiminny SonarQube Cloud","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Coverage on New Code - app in Jiminny SonarQube Cloud","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.10139628,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.18068483,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.4644282,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.15824468,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.38068634,"width":0.07413564,"height":0.025538707},"on_screen":true,"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.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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,"bounds":{"left":0.35854387,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"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,"bounds":{"left":0.37051198,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Main menu","depth":13,"bounds":{"left":0.08228058,"top":0.09736632,"width":0.015957447,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"bounds":{"left":0.09823803,"top":0.10215483,"width":0.028091755,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"bounds":{"left":0.1008976,"top":0.10654429,"width":0.02144282,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":13,"bounds":{"left":0.35854387,"top":0.10215483,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":13,"bounds":{"left":0.37051198,"top":0.10215483,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.079288565,"top":0.14445332,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.079288565,"top":0.14684756,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\\LaravelDatadogHelper\\Datadog;7use ChaseConey\\LaravelDatadogHelper\\Datadog;8use Illuminate\\Support\\Facades\\Log;8use Illuminate\\Support\\Facades\\Log;9+use Illuminate\\Support\\Facades\\Redis;9use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14-use Jiminny\\Component\\ES\\Processor\\BatchStatusInterface;15+use Jiminny\\Component\\ES\\Processor\\BatchStatusManager;15use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21-use Jiminny\\Component\\ES\\Processor\\Traits\\WorkerIdTrait;22use Jiminny\\Utils\\StringUtil;22use Jiminny\\Utils\\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\\LaravelDatadogHelper\\Datadog;7use ChaseConey\\LaravelDatadogHelper\\Datadog;8use Illuminate\\Support\\Facades\\Log;8use Illuminate\\Support\\Facades\\Log;9+use Illuminate\\Support\\Facades\\Redis;9use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14-use Jiminny\\Component\\ES\\Processor\\BatchStatusInterface;15+use Jiminny\\Component\\ES\\Processor\\BatchStatusManager;15use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21-use Jiminny\\Component\\ES\\Processor\\Traits\\WorkerIdTrait;22use Jiminny\\Utils\\StringUtil;22use Jiminny\\Utils\\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a concise summary of the changes made in the code selection:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactoring and Dependencies","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactoring and Dependencies","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaced Interface with Implementation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changed","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BatchStatusInterface","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BatchStatusManager","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"in the imports and constructor dependency injection.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added Redis Support:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Imported","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Illuminate\\Support\\Facades\\Redis","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to handle a newly introduced memory-logging lock mechanism.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Traits:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WorkerIdTrait","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", along with the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"worker","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"field tracking in the final logs.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Loop and Worker Lifecycle Adjustments","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Loop and Worker Lifecycle Adjustments","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Worker Auto-Restart:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deleted the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$counter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"property, the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RESTART_AFTER","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"constant, and the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"shouldIterateAgain()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method. The script no longer tracks execution iterations or triggers a self-managed worker restart.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Simplified Chunk Method Return:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Modified","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"doUpdateEntitiesChunk()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to always return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Priority Handling for Throttled Entities","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Priority Handling for Throttled Entities","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Record Elevation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated the logic in","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"rescheduleThrottledEntities()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to check if a throttled entity group is classified as \"stale\". If it is, the entities are rescheduled using","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum::NORMAL","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"; otherwise, they keep their respective queue priority.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Metrics, Logging, and Environment Handling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Metrics, Logging, and Environment Handling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added Environment Tracking:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduced a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$environment","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"property (defaulting to","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'local'","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") and a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setEnvironment()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method to dynamically assign it.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Memory Monitoring via Datadog Gauge:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method that submits peak memory allocation to Datadog as a gauge metric (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"jiminny.reindex-memory-usage","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Redis Lock for Metrics Throttling:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Implemented a Redis-backed lock (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"%s-process-manager-lock","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") with a 60-second expiration inside","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to prevent over-reporting metrics.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Log Payload Update:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added total processed items (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$updatedDocuments + $deletedDocuments","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to the final information log.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":23,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":23,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":23,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said are there any issues or potential bottlenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"are there any issues or potential bottlenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a breakdown of the potential issues to look out for:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Memory Leak Risk (OOM Crashes)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Memory Leak Risk (OOM Crashes)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Restart Logic:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The most significant change is the removal of the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$counter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RESTART_AFTER","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dependency Leaks:","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.050033245,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If any underlying service (like the","depth":26,"bounds":{"left":0.17453457,"top":0.0,"width":0.08277926,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ElasticSearchClient","depth":27,"bounds":{"left":0.25930852,"top":0.0,"width":0.056848403,"height":0.015163607},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ORM, or Datadog helper) retains references to processed entities,","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.21775267,"height":0.03631285},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles()","depth":27,"bounds":{"left":0.26811835,"top":0.0,"width":0.056848403,"height":0.015163607},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.23138298,"height":0.05546688},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hardcoded Limits:","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.047041222,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The code still includes","depth":26,"bounds":{"left":0.17154256,"top":0.0,"width":0.05651596,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ini_set('memory_limit', '512M');","depth":27,"bounds":{"left":0.23005319,"top":0.0,"width":0.095744684,"height":0.015163607},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.23055187,"height":0.05546688},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Race Condition in Redis Lock","depth":23,"bounds":{"left":0.111369684,"top":0.07940942,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Race Condition in Redis Lock","depth":24,"bounds":{"left":0.111369684,"top":0.079010375,"width":0.09125665,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Non-Atomic Operations:","depth":26,"bounds":{"left":0.12450133,"top":0.10614525,"width":0.062333778,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":26,"bounds":{"left":0.18683511,"top":0.10614525,"width":0.011635638,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage","depth":27,"bounds":{"left":0.20046543,"top":0.10774142,"width":0.041888297,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method uses three distinct steps to handle the lock:","depth":26,"bounds":{"left":0.12450133,"top":0.10614525,"width":0.22722739,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"get()","depth":27,"bounds":{"left":0.14860372,"top":0.12689546,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"bounds":{"left":0.16555852,"top":0.12529927,"width":0.002493351,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"set()","depth":27,"bounds":{"left":0.17004654,"top":0.12689546,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":26,"bounds":{"left":0.18700133,"top":0.12529927,"width":0.013131649,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"expire()","depth":27,"bounds":{"left":0.20212767,"top":0.12689546,"width":0.023936171,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"bounds":{"left":0.22805852,"top":0.12529927,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"bounds":{"left":0.12450133,"top":0.15403032,"width":0.040059842,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If multiple workers process the same","depth":26,"bounds":{"left":0.16456117,"top":0.15403032,"width":0.09275266,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$this->updateTarget","depth":27,"bounds":{"left":0.25930852,"top":0.15562649,"width":0.056848403,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"concurrently, they can both pass the","depth":26,"bounds":{"left":0.12450133,"top":0.15403032,"width":0.22855718,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if (! is_null(Redis::get(...)))","depth":27,"bounds":{"left":0.18351063,"top":0.17478053,"width":0.09275266,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"check at the exact same millisecond. Both will then execute","depth":26,"bounds":{"left":0.12450133,"top":0.17318435,"width":0.21575798,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"set()","depth":27,"bounds":{"left":0.2122673,"top":0.19393456,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and push duplicate metrics to Datadog.","depth":26,"bounds":{"left":0.22922207,"top":0.19233839,"width":0.09823803,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Fix:","depth":26,"bounds":{"left":0.12450133,"top":0.22106944,"width":0.019281914,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This should be replaced with a single atomic operation using Redis's","depth":26,"bounds":{"left":0.14378324,"top":0.22106944,"width":0.16821809,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NX","depth":27,"bounds":{"left":0.31399602,"top":0.22266561,"width":0.005984043,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Not eXists) and","depth":26,"bounds":{"left":0.12450133,"top":0.22106944,"width":0.22855718,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EX","depth":27,"bounds":{"left":0.13696809,"top":0.24181964,"width":0.005984043,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Expire) flags, or Laravel’s built-in atomic cache locks:","depth":26,"bounds":{"left":0.14494681,"top":0.24022347,"width":0.13264628,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Redis::set($gaugeLockName, true, 'EX', 60, 'NX')","depth":27,"bounds":{"left":0.12649602,"top":0.26097366,"width":0.14361702,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"bounds":{"left":0.27210772,"top":0.25937748,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Infinite Loops and Caller Contract","depth":23,"bounds":{"left":0.111369684,"top":0.30925778,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Infinite Loops and Caller Contract","depth":24,"bounds":{"left":0.111369684,"top":0.30885875,"width":0.10571808,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Return Value Change:","depth":26,"bounds":{"left":0.12450133,"top":0.33599362,"width":0.055352394,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"doUpdateEntitiesChunk()","depth":27,"bounds":{"left":0.18301196,"top":0.33758977,"width":0.06881649,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"previously returned whether it should iterate again based on staleness or chunk size. It now always returns","depth":26,"bounds":{"left":0.12450133,"top":0.33599362,"width":0.2237367,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"bounds":{"left":0.29438165,"top":0.3567438,"width":0.011968086,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(unless the selection is totally empty).","depth":26,"bounds":{"left":0.12450133,"top":0.35514766,"width":0.2130984,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"bounds":{"left":0.12450133,"top":0.40303272,"width":0.040059842,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the code calling this method relies on a","depth":26,"bounds":{"left":0.16456117,"top":0.40303272,"width":0.10305851,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":27,"bounds":{"left":0.26961437,"top":0.4046289,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return to pause, sleep, or gracefully terminate, changing this to an unconditional","depth":26,"bounds":{"left":0.12450133,"top":0.40303272,"width":0.22589761,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"bounds":{"left":0.26163563,"top":0.4237829,"width":0.011968086,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"could result in an aggressive \"busy loop\" that spikes CPU usage.","depth":26,"bounds":{"left":0.12450133,"top":0.42218676,"width":0.22290559,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Performance Overhead","depth":23,"bounds":{"left":0.111369684,"top":0.49122107,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Performance Overhead","depth":24,"bounds":{"left":0.111369684,"top":0.49082202,"width":0.076130316,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Expensive Garbage Collection:","depth":26,"bounds":{"left":0.12450133,"top":0.5179569,"width":0.078457445,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Calling","depth":26,"bounds":{"left":0.20295878,"top":0.5179569,"width":0.019281914,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles();","depth":27,"bounds":{"left":0.22423537,"top":0.51955307,"width":0.059840426,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"on","depth":26,"bounds":{"left":0.28607047,"top":0.5179569,"width":0.00880984,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"every single chunk","depth":26,"bounds":{"left":0.29488033,"top":0.5179569,"width":0.045545213,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.","depth":26,"bounds":{"left":0.12450133,"top":0.5179569,"width":0.23420878,"height":0.05546688},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Synchronous Metric Dispatch:","depth":26,"bounds":{"left":0.12450133,"top":0.584996,"width":0.07712766,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the","depth":26,"bounds":{"left":0.20162898,"top":0.584996,"width":0.015292553,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Datadog::increment","depth":27,"bounds":{"left":0.21891622,"top":0.5865922,"width":0.053856384,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"bounds":{"left":0.27476728,"top":0.584996,"width":0.0078125,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Datadog::gauge","depth":27,"bounds":{"left":0.28457448,"top":0.5865922,"width":0.041888297,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.","depth":26,"bounds":{"left":0.12450133,"top":0.584996,"width":0.23420878,"height":0.05546688},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"5. Lack of Explicit Error Handling","depth":23,"bounds":{"left":0.111369684,"top":0.67318434,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5. Lack of Explicit Error Handling","depth":24,"bounds":{"left":0.111369684,"top":0.67278534,"width":0.094913565,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No","depth":26,"bounds":{"left":0.12450133,"top":0.6999202,"width":0.008477394,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"try/catch","depth":27,"bounds":{"left":0.1349734,"top":0.7015164,"width":0.026928192,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Blocks:","depth":26,"bounds":{"left":0.16389628,"top":0.6999202,"width":0.019614361,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The script executes complex network operations (","depth":26,"bounds":{"left":0.18351063,"top":0.6999202,"width":0.12367021,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"loadDocuments","depth":27,"bounds":{"left":0.30917552,"top":0.7015164,"width":0.038896278,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.","depth":26,"bounds":{"left":0.12450133,"top":0.6999202,"width":0.22888963,"height":0.09377494},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"bounds":{"left":0.1087101,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"bounds":{"left":0.124667555,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":22,"bounds":{"left":0.140625,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"bounds":{"left":0.15658244,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.17253989,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"bounds":{"left":0.18849733,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Ask Gemini","depth":21,"bounds":{"left":0.14594415,"top":0.86632085,"width":0.17021276,"height":0.01915403},"on_screen":true,"value":"Ask Gemini","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Gemini","depth":22,"bounds":{"left":0.14594415,"top":0.8667199,"width":0.030418882,"height":0.018355945},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Upload & tools","depth":20,"bounds":{"left":0.12732713,"top":0.8567438,"width":0.015957447,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Microphone","depth":20,"bounds":{"left":0.32413563,"top":0.86153233,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send message","depth":20,"bounds":{"left":0.33211437,"top":0.8631285,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":17,"bounds":{"left":0.102726065,"top":0.9173983,"width":0.21775267,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":17,"bounds":{"left":0.32047874,"top":0.9173983,"width":0.043882977,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":18,"bounds":{"left":0.32047874,"top":0.9173983,"width":0.043882977,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":19,"bounds":{"left":0.079288565,"top":0.91660017,"width":0.04720745,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.08494016,"top":0.95730245,"width":0.053523935,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.09059176,"top":0.96249,"width":0.042220745,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to content","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":10,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (32)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"32","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Agents","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security and quality","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JY-20915 add alias for EU #12105 Edit title","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JY-20915 add alias for EU","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12105","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit title","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Awaiting approval","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Awaiting approval","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Code","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 5 commits into","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":15,"on_screen":false,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915-add-domain-specific-email-text-relay","depth":16,"on_screen":false,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915-add-domain-specific-email-text-relay","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":16,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 365 additions & 1 deletion","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Conversation (1)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Conversation","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Commits (5)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Commits","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Checks (3)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Files changed (4)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Files changed","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":14,"bounds":{"left":0.50332445,"top":0.07222666,"width":0.011968086,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JY-20915 add alias for EU #12105 LakyLak wants to merge 5 commits into master from JY-20915-add-domain-specific-email-text-relay Copy head branch name to clipboard","depth":14,"bounds":{"left":0.5219415,"top":0.058260176,"width":0.22922207,"height":0.042298485},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915 add alias for EU","depth":16,"bounds":{"left":0.5219415,"top":0.05865922,"width":0.05817819,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915 add alias for EU","depth":17,"bounds":{"left":0.5219415,"top":0.06304868,"width":0.05817819,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":16,"bounds":{"left":0.5827792,"top":0.06304868,"width":0.0028257978,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12105","depth":16,"bounds":{"left":0.585605,"top":0.06304868,"width":0.012799202,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":18,"bounds":{"left":0.5219415,"top":0.08339984,"width":0.016123671,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":19,"bounds":{"left":0.5219415,"top":0.08339984,"width":0.016123671,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 5 commits into","depth":18,"bounds":{"left":0.539395,"top":0.08339984,"width":0.058011968,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":18,"bounds":{"left":0.5987367,"top":0.08180367,"width":0.018450798,"height":0.015163607},"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":19,"bounds":{"left":0.6007314,"top":0.08339984,"width":0.014461436,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":19,"bounds":{"left":0.6185173,"top":0.08339984,"width":0.008643617,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915-add-domain-specific-email-text-relay","depth":19,"bounds":{"left":0.6284907,"top":0.08180367,"width":0.112034574,"height":0.015163607},"on_screen":true,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915-add-domain-specific-email-text-relay","depth":20,"bounds":{"left":0.63048536,"top":0.08339984,"width":0.10804521,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":19,"bounds":{"left":0.741855,"top":0.07821229,"width":0.00930851,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation","depth":12,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show options","depth":15,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"LakyLak commented yesterday","depth":14,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":16,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"commented","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"yesterday","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"yesterday","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JIRA: JY-20915","depth":16,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JIRA:","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915","depth":17,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Changes:","depth":16,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changes:","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Support text relay for EU","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Prevent errors from EU on US","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add or remove reactions","depth":16,"on_screen":false,"help_text":"","role_description":"summary","subrole":"AXSummary","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"LakyLak","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"added","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"commits","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"yesterday","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"yesterday","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"@LakyLak","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"JY-20915","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"add alias for EU","depth":14,"on_screen":false,"help_text":"JY-20915 add alias for EU","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"add alias for EU","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
5527032911304237342
|
-1048292410041026792
|
idle
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
Close tab
Coverage on New Code - app in Jiminny SonarQube Cloud
Coverage on New Code - app in Jiminny SonarQube Cloud
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Copy prompt
Gemini said
Gemini said
Here is a concise summary of the changes made in the code selection:
Refactoring and Dependencies
Refactoring and Dependencies
Replaced Interface with Implementation:
Changed
BatchStatusInterface
to
BatchStatusManager
in the imports and constructor dependency injection.
Added Redis Support:
Imported
Illuminate\Support\Facades\Redis
to handle a newly introduced memory-logging lock mechanism.
Removed Traits:
Removed
WorkerIdTrait
, along with the
worker
field tracking in the final logs.
Loop and Worker Lifecycle Adjustments
Loop and Worker Lifecycle Adjustments
Removed Worker Auto-Restart:
Deleted the
$counter
property, the
RESTART_AFTER
constant, and the
shouldIterateAgain()
method. The script no longer tracks execution iterations or triggers a self-managed worker restart.
Simplified Chunk Method Return:
Modified
doUpdateEntitiesChunk()
to always return
true
upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.
Priority Handling for Throttled Entities
Priority Handling for Throttled Entities
Stale Record Elevation:
Updated the logic in
rescheduleThrottledEntities()
to check if a throttled entity group is classified as "stale". If it is, the entities are rescheduled using
QueuePriorityEnum::NORMAL
; otherwise, they keep their respective queue priority.
Metrics, Logging, and Environment Handling
Metrics, Logging, and Environment Handling
Added Environment Tracking:
Introduced a
$environment
property (defaulting to
'local'
) and a
setEnvironment()
method to dynamically assign it.
Memory Monitoring via Datadog Gauge:
Added a
logMemoryUsage()
method that submits peak memory allocation to Datadog as a gauge metric (
jiminny.reindex-memory-usage
).
Redis Lock for Metrics Throttling:
Implemented a Redis-backed lock (
%s-process-manager-lock
) with a 60-second expiration inside
logMemoryUsage()
to prevent over-reporting metrics.
Log Payload Update:
Added total processed items (
$updatedDocuments + $deletedDocuments
) to the final information log.
Good response
Bad response
Share & export
Copy
Show more options
You said are there any issues or potential bottlenecks
You said
are there any issues or potential bottlenecks
Copy prompt
Edit
Gemini said
Gemini said
Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.
Here is a breakdown of the potential issues to look out for:
1. Memory Leak Risk (OOM Crashes)
1. Memory Leak Risk (OOM Crashes)
Removed Restart Logic:
The most significant change is the removal of the
$counter
and
RESTART_AFTER
logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (
gc_collect_cycles()
).
Dependency Leaks:
If any underlying service (like the
ElasticSearchClient
, ORM, or Datadog helper) retains references to processed entities,
gc_collect_cycles()
will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.
Hardcoded Limits:
The code still includes
ini_set('memory_limit', '512M');
. Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.
2. Race Condition in Redis Lock
2. Race Condition in Redis Lock
Non-Atomic Operations:
The
logMemoryUsage
method uses three distinct steps to handle the lock:
get()
,
set()
, and
expire()
.
The Bottleneck:
If multiple workers process the same
$this->updateTarget
concurrently, they can both pass the
if (! is_null(Redis::get(...)))
check at the exact same millisecond. Both will then execute
set()
and push duplicate metrics to Datadog.
The Fix:
This should be replaced with a single atomic operation using Redis's
NX
(Not eXists) and
EX
(Expire) flags, or Laravel’s built-in atomic cache locks:
Redis::set($gaugeLockName, true, 'EX', 60, 'NX')
.
3. Infinite Loops and Caller Contract
3. Infinite Loops and Caller Contract
Return Value Change:
doUpdateEntitiesChunk()
previously returned whether it should iterate again based on staleness or chunk size. It now always returns
true
(unless the selection is totally empty).
The Bottleneck:
If the code calling this method relies on a
false
return to pause, sleep, or gracefully terminate, changing this to an unconditional
true
could result in an aggressive "busy loop" that spikes CPU usage.
4. Performance Overhead
4. Performance Overhead
Expensive Garbage Collection:
Calling
gc_collect_cycles();
on
every single chunk
can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.
Synchronous Metric Dispatch:
If the
Datadog::increment
or
Datadog::gauge
methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.
5. Lack of Explicit Error Handling
5. Lack of Explicit Error Handling
No
try/catch
Blocks:
The script executes complex network operations (
loadDocuments
, Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (32)
Pull requests
(
32
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality
Security and quality
Insights
Insights
Settings
Settings
JY-20915 add alias for EU #12105 Edit title
JY-20915 add alias for EU
#
12105
Edit title
Awaiting approval
Awaiting approval
Code
Code
Open
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Lines changed: 365 additions & 1 deletion
Conversation (1)
Conversation
(
1
)
Commits (5)
Commits
(
5
)
Checks (3)
Checks
(
3
)
Files changed (4)
Files changed
(
4
)
Open
JY-20915 add alias for EU #12105 LakyLak wants to merge 5 commits into master from JY-20915-add-domain-specific-email-text-relay Copy head branch name to clipboard
JY-20915 add alias for EU
JY-20915 add alias for EU
#
12105
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Conversation
Conversation
@LakyLak
Show options
LakyLak commented yesterday
LakyLak
LakyLak
commented
yesterday
yesterday
JIRA: JY-20915
JIRA:
JY-20915
JY-20915
Changes:
Changes:
Support text relay for EU
Prevent errors from EU on US
Add or remove reactions
LakyLak
LakyLak
added
5
commits
yesterday
yesterday
@LakyLak
JY-20915
JY-20915
add alias for EU
add alias for EU...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
65271
|
NULL
|
0
|
2026-05-20T15:39:53.657260+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-20/1779 /Users/lukas/.screenpipe/data/data/2026-05-20/1779291593657_m1.jpg...
|
Firefox
|
JY-20915 add alias for EU by LakyLak · Pull Reques JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12105
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
Close tab
Coverage on New Code - app in Jiminny SonarQube Cloud
Coverage on New Code - app in Jiminny SonarQube Cloud
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Copy prompt
Gemini said
Gemini said
Here is a concise summary of the changes made in the code selection:
Refactoring and Dependencies
Refactoring and Dependencies
Replaced Interface with Implementation:
Changed
BatchStatusInterface
to
BatchStatusManager
in the imports and constructor dependency injection.
Added Redis Support:
Imported
Illuminate\Support\Facades\Redis
to handle a newly introduced memory-logging lock mechanism.
Removed Traits:
Removed
WorkerIdTrait
, along with the
worker
field tracking in the final logs.
Loop and Worker Lifecycle Adjustments
Loop and Worker Lifecycle Adjustments
Removed Worker Auto-Restart:
Deleted the
$counter
property, the
RESTART_AFTER
constant, and the
shouldIterateAgain()
method. The script no longer tracks execution iterations or triggers a self-managed worker restart.
Simplified Chunk Method Return:
Modified
doUpdateEntitiesChunk()
to always return
true
upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.
Priority Handling for Throttled Entities
Priority Handling for Throttled Entities
Stale Record Elevation:
Updated the logic in
rescheduleThrottledEntities()
to check if a throttled entity group is classified as "stale". If it is, the entities are rescheduled using
QueuePriorityEnum::NORMAL
; otherwise, they keep their respective queue priority.
Metrics, Logging, and Environment Handling
Metrics, Logging, and Environment Handling
Added Environment Tracking:
Introduced a
$environment
property (defaulting to
'local'
) and a
setEnvironment()
method to dynamically assign it.
Memory Monitoring via Datadog Gauge:
Added a
logMemoryUsage()
method that submits peak memory allocation to Datadog as a gauge metric (
jiminny.reindex-memory-usage
).
Redis Lock for Metrics Throttling:
Implemented a Redis-backed lock (
%s-process-manager-lock
) with a 60-second expiration inside
logMemoryUsage()
to prevent over-reporting metrics.
Log Payload Update:
Added total processed items (
$updatedDocuments + $deletedDocuments
) to the final information log.
Good response
Bad response
Share & export
Copy
Show more options
You said are there any issues or potential bottlenecks
You said
are there any issues or potential bottlenecks
Copy prompt
Edit
Gemini said
Gemini said
Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.
Here is a breakdown of the potential issues to look out for:
1. Memory Leak Risk (OOM Crashes)
1. Memory Leak Risk (OOM Crashes)
Removed Restart Logic:
The most significant change is the removal of the
$counter
and
RESTART_AFTER
logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (
gc_collect_cycles()
).
Dependency Leaks:
If any underlying service (like the
ElasticSearchClient
, ORM, or Datadog helper) retains references to processed entities,
gc_collect_cycles()
will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.
Hardcoded Limits:
The code still includes
ini_set('memory_limit', '512M');
. Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.
2. Race Condition in Redis Lock
2. Race Condition in Redis Lock
Non-Atomic Operations:
The
logMemoryUsage
method uses three distinct steps to handle the lock:
get()
,
set()
, and
expire()
.
The Bottleneck:
If multiple workers process the same
$this->updateTarget
concurrently, they can both pass the
if (! is_null(Redis::get(...)))
check at the exact same millisecond. Both will then execute
set()
and push duplicate metrics to Datadog.
The Fix:
This should be replaced with a single atomic operation using Redis's
NX
(Not eXists) and
EX
(Expire) flags, or Laravel’s built-in atomic cache locks:
Redis::set($gaugeLockName, true, 'EX', 60, 'NX')
.
3. Infinite Loops and Caller Contract
3. Infinite Loops and Caller Contract
Return Value Change:
doUpdateEntitiesChunk()
previously returned whether it should iterate again based on staleness or chunk size. It now always returns
true
(unless the selection is totally empty).
The Bottleneck:
If the code calling this method relies on a
false
return to pause, sleep, or gracefully terminate, changing this to an unconditional
true
could result in an aggressive "busy loop" that spikes CPU usage.
4. Performance Overhead
4. Performance Overhead
Expensive Garbage Collection:
Calling
gc_collect_cycles();
on
every single chunk
can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.
Synchronous Metric Dispatch:
If the
Datadog::increment
or
Datadog::gauge
methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.
5. Lack of Explicit Error Handling
5. Lack of Explicit Error Handling
No
try/catch
Blocks:
The script executes complex network operations (
loadDocuments
, Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (32)
Pull requests
(
32
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality
Security and quality
Insights
Insights
Settings
Settings
JY-20915 add alias for EU #12105 Edit title
JY-20915 add alias for EU
#
12105
Edit title
Awaiting approval
Awaiting approval
Code
Code
Open
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Lines changed: 365 additions & 1 deletion
Conversation (1)
Conversation
(
1
)
Commits (5)
Commits
(
5
)
Checks (3)
Checks
(
3
)
Files changed (4)
Files changed
(
4
)
Open
JY-20915 add alias for EU #12105 LakyLak wants to merge 5 commits into master from JY-20915-add-domain-specific-email-text-relay Copy head branch name to clipboard
JY-20915 add alias for EU...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Coverage on New Code - app in Jiminny SonarQube Cloud","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Coverage on New Code - app in Jiminny SonarQube Cloud","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Main menu","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\\LaravelDatadogHelper\\Datadog;7use ChaseConey\\LaravelDatadogHelper\\Datadog;8use Illuminate\\Support\\Facades\\Log;8use Illuminate\\Support\\Facades\\Log;9+use Illuminate\\Support\\Facades\\Redis;9use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14-use Jiminny\\Component\\ES\\Processor\\BatchStatusInterface;15+use Jiminny\\Component\\ES\\Processor\\BatchStatusManager;15use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21-use Jiminny\\Component\\ES\\Processor\\Traits\\WorkerIdTrait;22use Jiminny\\Utils\\StringUtil;22use Jiminny\\Utils\\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\\LaravelDatadogHelper\\Datadog;7use ChaseConey\\LaravelDatadogHelper\\Datadog;8use Illuminate\\Support\\Facades\\Log;8use Illuminate\\Support\\Facades\\Log;9+use Illuminate\\Support\\Facades\\Redis;9use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14-use Jiminny\\Component\\ES\\Processor\\BatchStatusInterface;15+use Jiminny\\Component\\ES\\Processor\\BatchStatusManager;15use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21-use Jiminny\\Component\\ES\\Processor\\Traits\\WorkerIdTrait;22use Jiminny\\Utils\\StringUtil;22use Jiminny\\Utils\\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a concise summary of the changes made in the code selection:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactoring and Dependencies","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactoring and Dependencies","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaced Interface with Implementation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changed","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BatchStatusInterface","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BatchStatusManager","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"in the imports and constructor dependency injection.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added Redis Support:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Imported","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Illuminate\\Support\\Facades\\Redis","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to handle a newly introduced memory-logging lock mechanism.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Traits:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WorkerIdTrait","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", along with the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"worker","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"field tracking in the final logs.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Loop and Worker Lifecycle Adjustments","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Loop and Worker Lifecycle Adjustments","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Worker Auto-Restart:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deleted the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$counter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"property, the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RESTART_AFTER","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"constant, and the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"shouldIterateAgain()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method. The script no longer tracks execution iterations or triggers a self-managed worker restart.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Simplified Chunk Method Return:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Modified","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"doUpdateEntitiesChunk()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to always return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Priority Handling for Throttled Entities","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Priority Handling for Throttled Entities","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Record Elevation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated the logic in","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"rescheduleThrottledEntities()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to check if a throttled entity group is classified as \"stale\". If it is, the entities are rescheduled using","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum::NORMAL","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"; otherwise, they keep their respective queue priority.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Metrics, Logging, and Environment Handling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Metrics, Logging, and Environment Handling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added Environment Tracking:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduced a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$environment","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"property (defaulting to","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'local'","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") and a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setEnvironment()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method to dynamically assign it.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Memory Monitoring via Datadog Gauge:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method that submits peak memory allocation to Datadog as a gauge metric (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"jiminny.reindex-memory-usage","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Redis Lock for Metrics Throttling:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Implemented a Redis-backed lock (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"%s-process-manager-lock","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") with a 60-second expiration inside","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to prevent over-reporting metrics.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Log Payload Update:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added total processed items (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$updatedDocuments + $deletedDocuments","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to the final information log.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":23,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":23,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":23,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said are there any issues or potential bottlenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"are there any issues or potential bottlenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a breakdown of the potential issues to look out for:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Memory Leak Risk (OOM Crashes)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Memory Leak Risk (OOM Crashes)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Restart Logic:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The most significant change is the removal of the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$counter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RESTART_AFTER","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dependency Leaks:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If any underlying service (like the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ElasticSearchClient","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ORM, or Datadog helper) retains references to processed entities,","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hardcoded Limits:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The code still includes","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ini_set('memory_limit', '512M');","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Race Condition in Redis Lock","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Race Condition in Redis Lock","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Non-Atomic Operations:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method uses three distinct steps to handle the lock:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"get()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"set()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"expire()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If multiple workers process the same","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$this->updateTarget","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"concurrently, they can both pass the","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if (! is_null(Redis::get(...)))","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"check at the exact same millisecond. Both will then execute","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"set()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and push duplicate metrics to Datadog.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Fix:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This should be replaced with a single atomic operation using Redis's","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NX","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Not eXists) and","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EX","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Expire) flags, or Laravel’s built-in atomic cache locks:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Redis::set($gaugeLockName, true, 'EX', 60, 'NX')","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Infinite Loops and Caller Contract","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Infinite Loops and Caller Contract","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Return Value Change:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"doUpdateEntitiesChunk()","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"previously returned whether it should iterate again based on staleness or chunk size. It now always returns","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(unless the selection is totally empty).","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the code calling this method relies on a","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return to pause, sleep, or gracefully terminate, changing this to an unconditional","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"could result in an aggressive \"busy loop\" that spikes CPU usage.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Performance Overhead","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Performance Overhead","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Expensive Garbage Collection:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Calling","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles();","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"on","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"every single chunk","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Synchronous Metric Dispatch:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Datadog::increment","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Datadog::gauge","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"5. Lack of Explicit Error Handling","depth":23,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5. Lack of Explicit Error Handling","depth":24,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"try/catch","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Blocks:","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The script executes complex network operations (","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"loadDocuments","depth":27,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.","depth":26,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":22,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Ask Gemini","depth":21,"on_screen":true,"value":"Ask Gemini","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Gemini","depth":22,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Upload & tools","depth":20,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Microphone","depth":20,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send message","depth":20,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":17,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":17,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":18,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":19,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":7,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to content","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":10,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Code","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Pull requests (32)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pull requests","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"32","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Agents","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Agents","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Actions","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Actions","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Wiki","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Wiki","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Security and quality","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Security and quality","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Insights","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Insights","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Settings","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Settings","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JY-20915 add alias for EU #12105 Edit title","depth":13,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"JY-20915 add alias for EU","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12105","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit title","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Awaiting approval","depth":13,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Awaiting approval","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Code","depth":13,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Code","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"LakyLak","depth":15,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"LakyLak","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"wants to merge 5 commits into","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"master","depth":15,"on_screen":false,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"master","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"from","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915-add-domain-specific-email-text-relay","depth":16,"on_screen":false,"role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20915-add-domain-specific-email-text-relay","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy head branch name to clipboard","depth":16,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Lines changed: 365 additions & 1 deletion","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Conversation (1)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Conversation","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Commits (5)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Commits","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Checks (3)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Checks","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Files changed (4)","depth":16,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Files changed","depth":17,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":18,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":14,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"JY-20915 add alias for EU #12105 LakyLak wants to merge 5 commits into master from JY-20915-add-domain-specific-email-text-relay Copy head branch name to clipboard","depth":14,"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20915 add alias for EU","depth":16,"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
-4648784576994277641
|
-1052796009672575204
|
idle
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
Close tab
Coverage on New Code - app in Jiminny SonarQube Cloud
Coverage on New Code - app in Jiminny SonarQube Cloud
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Copy prompt
Gemini said
Gemini said
Here is a concise summary of the changes made in the code selection:
Refactoring and Dependencies
Refactoring and Dependencies
Replaced Interface with Implementation:
Changed
BatchStatusInterface
to
BatchStatusManager
in the imports and constructor dependency injection.
Added Redis Support:
Imported
Illuminate\Support\Facades\Redis
to handle a newly introduced memory-logging lock mechanism.
Removed Traits:
Removed
WorkerIdTrait
, along with the
worker
field tracking in the final logs.
Loop and Worker Lifecycle Adjustments
Loop and Worker Lifecycle Adjustments
Removed Worker Auto-Restart:
Deleted the
$counter
property, the
RESTART_AFTER
constant, and the
shouldIterateAgain()
method. The script no longer tracks execution iterations or triggers a self-managed worker restart.
Simplified Chunk Method Return:
Modified
doUpdateEntitiesChunk()
to always return
true
upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.
Priority Handling for Throttled Entities
Priority Handling for Throttled Entities
Stale Record Elevation:
Updated the logic in
rescheduleThrottledEntities()
to check if a throttled entity group is classified as "stale". If it is, the entities are rescheduled using
QueuePriorityEnum::NORMAL
; otherwise, they keep their respective queue priority.
Metrics, Logging, and Environment Handling
Metrics, Logging, and Environment Handling
Added Environment Tracking:
Introduced a
$environment
property (defaulting to
'local'
) and a
setEnvironment()
method to dynamically assign it.
Memory Monitoring via Datadog Gauge:
Added a
logMemoryUsage()
method that submits peak memory allocation to Datadog as a gauge metric (
jiminny.reindex-memory-usage
).
Redis Lock for Metrics Throttling:
Implemented a Redis-backed lock (
%s-process-manager-lock
) with a 60-second expiration inside
logMemoryUsage()
to prevent over-reporting metrics.
Log Payload Update:
Added total processed items (
$updatedDocuments + $deletedDocuments
) to the final information log.
Good response
Bad response
Share & export
Copy
Show more options
You said are there any issues or potential bottlenecks
You said
are there any issues or potential bottlenecks
Copy prompt
Edit
Gemini said
Gemini said
Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.
Here is a breakdown of the potential issues to look out for:
1. Memory Leak Risk (OOM Crashes)
1. Memory Leak Risk (OOM Crashes)
Removed Restart Logic:
The most significant change is the removal of the
$counter
and
RESTART_AFTER
logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (
gc_collect_cycles()
).
Dependency Leaks:
If any underlying service (like the
ElasticSearchClient
, ORM, or Datadog helper) retains references to processed entities,
gc_collect_cycles()
will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.
Hardcoded Limits:
The code still includes
ini_set('memory_limit', '512M');
. Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.
2. Race Condition in Redis Lock
2. Race Condition in Redis Lock
Non-Atomic Operations:
The
logMemoryUsage
method uses three distinct steps to handle the lock:
get()
,
set()
, and
expire()
.
The Bottleneck:
If multiple workers process the same
$this->updateTarget
concurrently, they can both pass the
if (! is_null(Redis::get(...)))
check at the exact same millisecond. Both will then execute
set()
and push duplicate metrics to Datadog.
The Fix:
This should be replaced with a single atomic operation using Redis's
NX
(Not eXists) and
EX
(Expire) flags, or Laravel’s built-in atomic cache locks:
Redis::set($gaugeLockName, true, 'EX', 60, 'NX')
.
3. Infinite Loops and Caller Contract
3. Infinite Loops and Caller Contract
Return Value Change:
doUpdateEntitiesChunk()
previously returned whether it should iterate again based on staleness or chunk size. It now always returns
true
(unless the selection is totally empty).
The Bottleneck:
If the code calling this method relies on a
false
return to pause, sleep, or gracefully terminate, changing this to an unconditional
true
could result in an aggressive "busy loop" that spikes CPU usage.
4. Performance Overhead
4. Performance Overhead
Expensive Garbage Collection:
Calling
gc_collect_cycles();
on
every single chunk
can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.
Synchronous Metric Dispatch:
If the
Datadog::increment
or
Datadog::gauge
methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.
5. Lack of Explicit Error Handling
5. Lack of Explicit Error Handling
No
try/catch
Blocks:
The script executes complex network operations (
loadDocuments
, Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code
Code
Pull requests (32)
Pull requests
(
32
)
Agents
Agents
Actions
Actions
Wiki
Wiki
Security and quality
Security and quality
Insights
Insights
Settings
Settings
JY-20915 add alias for EU #12105 Edit title
JY-20915 add alias for EU
#
12105
Edit title
Awaiting approval
Awaiting approval
Code
Code
Open
LakyLak
LakyLak
wants to merge 5 commits into
master
master
from
JY-20915-add-domain-specific-email-text-relay
JY-20915-add-domain-specific-email-text-relay
Copy head branch name to clipboard
Lines changed: 365 additions & 1 deletion
Conversation (1)
Conversation
(
1
)
Commits (5)
Commits
(
5
)
Checks (3)
Checks
(
3
)
Files changed (4)
Files changed
(
4
)
Open
JY-20915 add alias for EU #12105 LakyLak wants to merge 5 commits into master from JY-20915-add-domain-specific-email-text-relay Copy head branch name to clipboard
JY-20915 add alias for EU...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
65272
|
NULL
|
0
|
2026-05-20T15:40:07.001683+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-20/1779 /Users/lukas/.screenpipe/data/data/2026-05-20/1779291607001_m2.jpg...
|
Firefox
|
JY-20915 add alias for EU by LakyLak · Pull Reques JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12105
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
Close tab
Coverage on New Code - app in Jiminny SonarQube Cloud
Coverage on New Code - app in Jiminny SonarQube Cloud
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Copy prompt
Gemini said
Gemini said
Here is a concise summary of the changes made in the code selection:
Refactoring and Dependencies
Refactoring and Dependencies
Replaced Interface with Implementation:
Changed
BatchStatusInterface
to
BatchStatusManager
in the imports and constructor dependency injection.
Added Redis Support:
Imported
Illuminate\Support\Facades\Redis
to handle a newly introduced memory-logging lock mechanism.
Removed Traits:
Removed
WorkerIdTrait
, along with the
worker
field tracking in the final logs.
Loop and Worker Lifecycle Adjustments
Loop and Worker Lifecycle Adjustments
Removed Worker Auto-Restart:
Deleted the
$counter
property, the
RESTART_AFTER
constant, and the
shouldIterateAgain()
method. The script no longer tracks execution iterations or triggers a self-managed worker restart.
Simplified Chunk Method Return:
Modified
doUpdateEntitiesChunk()
to always return
true
upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.
Priority Handling for Throttled Entities
Priority Handling for Throttled Entities
Stale Record Elevation:
Updated the logic in
rescheduleThrottledEntities()
to check if a throttled entity group is classified as "stale". If it is, the entities are rescheduled using
QueuePriorityEnum::NORMAL
; otherwise, they keep their respective queue priority.
Metrics, Logging, and Environment Handling
Metrics, Logging, and Environment Handling
Added Environment Tracking:
Introduced a
$environment
property (defaulting to
'local'
) and a
setEnvironment()
method to dynamically assign it.
Memory Monitoring via Datadog Gauge:
Added a
logMemoryUsage()
method that submits peak memory allocation to Datadog as a gauge metric (
jiminny.reindex-memory-usage
).
Redis Lock for Metrics Throttling:
Implemented a Redis-backed lock (
%s-process-manager-lock
) with a 60-second expiration inside
logMemoryUsage()
to prevent over-reporting metrics.
Log Payload Update:
Added total processed items (
$updatedDocuments + $deletedDocuments
) to the final information log.
Good response
Bad response
Share & export
Copy
Show more options
You said are there any issues or potential bottlenecks
You said
are there any issues or potential bottlenecks
Copy prompt
Edit
Gemini said
Gemini said
Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.
Here is a breakdown of the potential issues to look out for:
1. Memory Leak Risk (OOM Crashes)
1. Memory Leak Risk (OOM Crashes)
Removed Restart Logic:
The most significant change is the removal of the
$counter
and
RESTART_AFTER
logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (
gc_collect_cycles()
).
Dependency Leaks:
If any underlying service (like the
ElasticSearchClient
, ORM, or Datadog helper) retains references to processed entities,
gc_collect_cycles()
will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.
Hardcoded Limits:
The code still includes
ini_set('memory_limit', '512M');
. Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.
2. Race Condition in Redis Lock
2. Race Condition in Redis Lock
Non-Atomic Operations:
The
logMemoryUsage
method uses three distinct steps to handle the lock:
get()
,
set()
, and
expire()
.
The Bottleneck:
If multiple workers process the same
$this->updateTarget
concurrently, they can both pass the
if (! is_null(Redis::get(...)))
check at the exact same millisecond. Both will then execute
set()
and push duplicate metrics to Datadog.
The Fix:
This should be replaced with a single atomic operation using Redis's
NX
(Not eXists) and
EX
(Expire) flags, or Laravel’s built-in atomic cache locks:
Redis::set($gaugeLockName, true, 'EX', 60, 'NX')
.
3. Infinite Loops and Caller Contract
3. Infinite Loops and Caller Contract
Return Value Change:
doUpdateEntitiesChunk()
previously returned whether it should iterate again based on staleness or chunk size. It now always returns
true
(unless the selection is totally empty).
The Bottleneck:
If the code calling this method relies on a
false
return to pause, sleep, or gracefully terminate, changing this to an unconditional
true
could result in an aggressive "busy loop" that spikes CPU usage.
4. Performance Overhead
4. Performance Overhead
Expensive Garbage Collection:
Calling
gc_collect_cycles();
on
every single chunk
can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.
Synchronous Metric Dispatch:
If the
Datadog::increment
or
Datadog::gauge
methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.
5. Lack of Explicit Error Handling
5. Lack of Explicit Error Handling
No
try/catch
Blocks:
The script executes complex network operations (
loadDocuments
, Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.0518755,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.06304868,"width":0.10106383,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"bounds":{"left":0.0,"top":0.08459697,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.09577015,"width":0.10721409,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.11731844,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.12849163,"width":0.15791224,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.15003991,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.16121309,"width":0.1796875,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.18276137,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.19393456,"width":0.12699468,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.18994413,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Coverage on New Code - app in Jiminny SonarQube Cloud","depth":4,"bounds":{"left":0.0,"top":0.21548285,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Coverage on New Code - app in Jiminny SonarQube Cloud","depth":5,"bounds":{"left":0.013297873,"top":0.22665602,"width":0.10139628,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":4,"bounds":{"left":0.0,"top":0.2482043,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.25937748,"width":0.18068483,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"bounds":{"left":0.0,"top":0.28092578,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"bounds":{"left":0.013297873,"top":0.29209897,"width":0.4644282,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.31364724,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.32482043,"width":0.039228722,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.3463687,"width":0.07962101,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.3575419,"width":0.15824468,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.38068634,"width":0.07413564,"height":0.025538707},"on_screen":true,"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.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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,"bounds":{"left":0.35854387,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"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,"bounds":{"left":0.37051198,"top":0.055067837,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Main menu","depth":13,"bounds":{"left":0.08228058,"top":0.09736632,"width":0.015957447,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"bounds":{"left":0.09823803,"top":0.10215483,"width":0.028091755,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"bounds":{"left":0.1008976,"top":0.10654429,"width":0.02144282,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":13,"bounds":{"left":0.35854387,"top":0.10215483,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open menu for conversation actions.","depth":13,"bounds":{"left":0.37051198,"top":0.10215483,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Conversation with Gemini","depth":15,"bounds":{"left":0.079288565,"top":0.14445332,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Conversation with Gemini","depth":16,"bounds":{"left":0.079288565,"top":0.14684756,"width":0.1200133,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"You said I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\\LaravelDatadogHelper\\Datadog;7use ChaseConey\\LaravelDatadogHelper\\Datadog;8use Illuminate\\Support\\Facades\\Log;8use Illuminate\\Support\\Facades\\Log;9+use Illuminate\\Support\\Facades\\Redis;9use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14-use Jiminny\\Component\\ES\\Processor\\BatchStatusInterface;15+use Jiminny\\Component\\ES\\Processor\\BatchStatusManager;15use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21-use Jiminny\\Component\\ES\\Processor\\Traits\\WorkerIdTrait;22use Jiminny\\Utils\\StringUtil;22use Jiminny\\Utils\\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\\LaravelDatadogHelper\\Datadog;7use ChaseConey\\LaravelDatadogHelper\\Datadog;8use Illuminate\\Support\\Facades\\Log;8use Illuminate\\Support\\Facades\\Log;9+use Illuminate\\Support\\Facades\\Redis;9use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\Client as ElasticSearchClient;10use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ElasticSearch\\ElasticSearchMappings;11use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\DeleteDocumentsAction;12use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\LoadDocumentsAction;13use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14use Jiminny\\Component\\ES\\Processor\\Actions\\UpsertDocumentsAction;14-use Jiminny\\Component\\ES\\Processor\\BatchStatusInterface;15+use Jiminny\\Component\\ES\\Processor\\BatchStatusManager;15use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SelectionList;16use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\DTOs\\SimpleCollection;17use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\TargetEntitiesSelector;18use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\ExtractIdsTrait;19use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\SelectEntityListTrait;20use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21use Jiminny\\Component\\ES\\Processor\\Traits\\UpdateTargetTrait;21-use Jiminny\\Component\\ES\\Processor\\Traits\\WorkerIdTrait;22use Jiminny\\Utils\\StringUtil;22use Jiminny\\Utils\\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.","depth":23,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Expand","depth":21,"on_screen":false,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy prompt","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a concise summary of the changes made in the code selection:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Refactoring and Dependencies","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Refactoring and Dependencies","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Replaced Interface with Implementation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Changed","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BatchStatusInterface","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BatchStatusManager","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"in the imports and constructor dependency injection.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added Redis Support:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Imported","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Illuminate\\Support\\Facades\\Redis","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to handle a newly introduced memory-logging lock mechanism.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Traits:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WorkerIdTrait","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", along with the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"worker","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"field tracking in the final logs.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Loop and Worker Lifecycle Adjustments","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Loop and Worker Lifecycle Adjustments","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Worker Auto-Restart:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deleted the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$counter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"property, the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RESTART_AFTER","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"constant, and the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"shouldIterateAgain()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method. The script no longer tracks execution iterations or triggers a self-managed worker restart.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Simplified Chunk Method Return:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Modified","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"doUpdateEntitiesChunk()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to always return","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Priority Handling for Throttled Entities","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Priority Handling for Throttled Entities","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stale Record Elevation:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated the logic in","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"rescheduleThrottledEntities()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to check if a throttled entity group is classified as \"stale\". If it is, the entities are rescheduled using","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"QueuePriorityEnum::NORMAL","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"; otherwise, they keep their respective queue priority.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Metrics, Logging, and Environment Handling","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Metrics, Logging, and Environment Handling","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added Environment Tracking:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Introduced a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$environment","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"property (defaulting to","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"'local'","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") and a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"setEnvironment()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method to dynamically assign it.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Memory Monitoring via Datadog Gauge:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added a","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method that submits peak memory allocation to Datadog as a gauge metric (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"jiminny.reindex-memory-usage","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Redis Lock for Metrics Throttling:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Implemented a Redis-backed lock (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"%s-process-manager-lock","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") with a 60-second expiration inside","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to prevent over-reporting metrics.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Log Payload Update:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Added total processed items (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$updatedDocuments + $deletedDocuments","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":") to the final information log.","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":23,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":23,"on_screen":false,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":23,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":22,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"You said are there any issues or potential bottlenecks","depth":21,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You said","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"are there any issues or potential bottlenecks","depth":23,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy prompt","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit","depth":20,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Gemini said","depth":20,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Gemini said","depth":21,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Here is a breakdown of the potential issues to look out for:","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"1. Memory Leak Risk (OOM Crashes)","depth":23,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1. Memory Leak Risk (OOM Crashes)","depth":24,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Removed Restart Logic:","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The most significant change is the removal of the","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$counter","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"RESTART_AFTER","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles()","depth":27,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":").","depth":26,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dependency Leaks:","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.050033245,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If any underlying service (like the","depth":26,"bounds":{"left":0.17453457,"top":0.0,"width":0.08277926,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ElasticSearchClient","depth":27,"bounds":{"left":0.25930852,"top":0.0,"width":0.056848403,"height":0.015163607},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", ORM, or Datadog helper) retains references to processed entities,","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.21775267,"height":0.03631285},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles()","depth":27,"bounds":{"left":0.26811835,"top":0.0,"width":0.056848403,"height":0.015163607},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.23138298,"height":0.05546688},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hardcoded Limits:","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.047041222,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The code still includes","depth":26,"bounds":{"left":0.17154256,"top":0.0,"width":0.05651596,"height":0.01715882},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ini_set('memory_limit', '512M');","depth":27,"bounds":{"left":0.23005319,"top":0.0,"width":0.095744684,"height":0.015163607},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":". Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.","depth":26,"bounds":{"left":0.12450133,"top":0.0,"width":0.23055187,"height":0.05546688},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"2. Race Condition in Redis Lock","depth":23,"bounds":{"left":0.111369684,"top":0.07940942,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2. Race Condition in Redis Lock","depth":24,"bounds":{"left":0.111369684,"top":0.079010375,"width":0.09125665,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Non-Atomic Operations:","depth":26,"bounds":{"left":0.12450133,"top":0.10614525,"width":0.062333778,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The","depth":26,"bounds":{"left":0.18683511,"top":0.10614525,"width":0.011635638,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"logMemoryUsage","depth":27,"bounds":{"left":0.20046543,"top":0.10774142,"width":0.041888297,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"method uses three distinct steps to handle the lock:","depth":26,"bounds":{"left":0.12450133,"top":0.10614525,"width":0.22722739,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"get()","depth":27,"bounds":{"left":0.14860372,"top":0.12689546,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":",","depth":26,"bounds":{"left":0.16555852,"top":0.12529927,"width":0.002493351,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"set()","depth":27,"bounds":{"left":0.17004654,"top":0.12689546,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", and","depth":26,"bounds":{"left":0.18700133,"top":0.12529927,"width":0.013131649,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"expire()","depth":27,"bounds":{"left":0.20212767,"top":0.12689546,"width":0.023936171,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"bounds":{"left":0.22805852,"top":0.12529927,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"bounds":{"left":0.12450133,"top":0.15403032,"width":0.040059842,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If multiple workers process the same","depth":26,"bounds":{"left":0.16456117,"top":0.15403032,"width":0.09275266,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$this->updateTarget","depth":27,"bounds":{"left":0.25930852,"top":0.15562649,"width":0.056848403,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"concurrently, they can both pass the","depth":26,"bounds":{"left":0.12450133,"top":0.15403032,"width":0.22855718,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"if (! is_null(Redis::get(...)))","depth":27,"bounds":{"left":0.18351063,"top":0.17478053,"width":0.09275266,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"check at the exact same millisecond. Both will then execute","depth":26,"bounds":{"left":0.12450133,"top":0.17318435,"width":0.21575798,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"set()","depth":27,"bounds":{"left":0.2122673,"top":0.19393456,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"and push duplicate metrics to Datadog.","depth":26,"bounds":{"left":0.22922207,"top":0.19233839,"width":0.09823803,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Fix:","depth":26,"bounds":{"left":0.12450133,"top":0.22106944,"width":0.019281914,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"This should be replaced with a single atomic operation using Redis's","depth":26,"bounds":{"left":0.14378324,"top":0.22106944,"width":0.16821809,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NX","depth":27,"bounds":{"left":0.31399602,"top":0.22266561,"width":0.005984043,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Not eXists) and","depth":26,"bounds":{"left":0.12450133,"top":0.22106944,"width":0.22855718,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"EX","depth":27,"bounds":{"left":0.13696809,"top":0.24181964,"width":0.005984043,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(Expire) flags, or Laravel’s built-in atomic cache locks:","depth":26,"bounds":{"left":0.14494681,"top":0.24022347,"width":0.13264628,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Redis::set($gaugeLockName, true, 'EX', 60, 'NX')","depth":27,"bounds":{"left":0.12649602,"top":0.26097366,"width":0.14361702,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".","depth":26,"bounds":{"left":0.27210772,"top":0.25937748,"width":0.0013297872,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"3. Infinite Loops and Caller Contract","depth":23,"bounds":{"left":0.111369684,"top":0.30925778,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3. Infinite Loops and Caller Contract","depth":24,"bounds":{"left":0.111369684,"top":0.30885875,"width":0.10571808,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Return Value Change:","depth":26,"bounds":{"left":0.12450133,"top":0.33599362,"width":0.055352394,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"doUpdateEntitiesChunk()","depth":27,"bounds":{"left":0.18301196,"top":0.33758977,"width":0.06881649,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"previously returned whether it should iterate again based on staleness or chunk size. It now always returns","depth":26,"bounds":{"left":0.12450133,"top":0.33599362,"width":0.2237367,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"bounds":{"left":0.29438165,"top":0.3567438,"width":0.011968086,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(unless the selection is totally empty).","depth":26,"bounds":{"left":0.12450133,"top":0.35514766,"width":0.2130984,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The Bottleneck:","depth":26,"bounds":{"left":0.12450133,"top":0.40303272,"width":0.040059842,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the code calling this method relies on a","depth":26,"bounds":{"left":0.16456117,"top":0.40303272,"width":0.10305851,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"false","depth":27,"bounds":{"left":0.26961437,"top":0.4046289,"width":0.014960106,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"return to pause, sleep, or gracefully terminate, changing this to an unconditional","depth":26,"bounds":{"left":0.12450133,"top":0.40303272,"width":0.22589761,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"true","depth":27,"bounds":{"left":0.26163563,"top":0.4237829,"width":0.011968086,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"could result in an aggressive \"busy loop\" that spikes CPU usage.","depth":26,"bounds":{"left":0.12450133,"top":0.42218676,"width":0.22290559,"height":0.03631285},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"4. Performance Overhead","depth":23,"bounds":{"left":0.111369684,"top":0.49122107,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4. Performance Overhead","depth":24,"bounds":{"left":0.111369684,"top":0.49082202,"width":0.076130316,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Expensive Garbage Collection:","depth":26,"bounds":{"left":0.12450133,"top":0.5179569,"width":0.078457445,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Calling","depth":26,"bounds":{"left":0.20295878,"top":0.5179569,"width":0.019281914,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"gc_collect_cycles();","depth":27,"bounds":{"left":0.22423537,"top":0.51955307,"width":0.059840426,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"on","depth":26,"bounds":{"left":0.28607047,"top":0.5179569,"width":0.00880984,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"every single chunk","depth":26,"bounds":{"left":0.29488033,"top":0.5179569,"width":0.045545213,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.","depth":26,"bounds":{"left":0.12450133,"top":0.5179569,"width":0.23420878,"height":0.05546688},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Synchronous Metric Dispatch:","depth":26,"bounds":{"left":0.12450133,"top":0.584996,"width":0.07712766,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"If the","depth":26,"bounds":{"left":0.20162898,"top":0.584996,"width":0.015292553,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Datadog::increment","depth":27,"bounds":{"left":0.21891622,"top":0.5865922,"width":0.053856384,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"or","depth":26,"bounds":{"left":0.27476728,"top":0.584996,"width":0.0078125,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Datadog::gauge","depth":27,"bounds":{"left":0.28457448,"top":0.5865922,"width":0.041888297,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.","depth":26,"bounds":{"left":0.12450133,"top":0.584996,"width":0.23420878,"height":0.05546688},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"5. Lack of Explicit Error Handling","depth":23,"bounds":{"left":0.111369684,"top":0.67318434,"width":0.24734043,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5. Lack of Explicit Error Handling","depth":24,"bounds":{"left":0.111369684,"top":0.67278534,"width":0.094913565,"height":0.020351157},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"No","depth":26,"bounds":{"left":0.12450133,"top":0.6999202,"width":0.008477394,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"try/catch","depth":27,"bounds":{"left":0.1349734,"top":0.7015164,"width":0.026928192,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Blocks:","depth":26,"bounds":{"left":0.16389628,"top":0.6999202,"width":0.019614361,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"The script executes complex network operations (","depth":26,"bounds":{"left":0.18351063,"top":0.6999202,"width":0.12367021,"height":0.01715882},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"loadDocuments","depth":27,"bounds":{"left":0.30917552,"top":0.7015164,"width":0.038896278,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.","depth":26,"bounds":{"left":0.12450133,"top":0.6999202,"width":0.22888963,"height":0.09377494},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Good response","depth":22,"bounds":{"left":0.1087101,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bad response","depth":22,"bounds":{"left":0.124667555,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Redo","depth":22,"bounds":{"left":0.140625,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Share & export","depth":21,"bounds":{"left":0.15658244,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.17253989,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Show more options","depth":21,"bounds":{"left":0.18849733,"top":0.80885875,"width":0.011968086,"height":0.028731046},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextArea","text":"Ask Gemini","depth":21,"bounds":{"left":0.14594415,"top":0.86632085,"width":0.17021276,"height":0.01915403},"on_screen":true,"value":"Ask Gemini","help_text":"","role_description":"text entry area","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Gemini","depth":22,"bounds":{"left":0.14594415,"top":0.8667199,"width":0.030418882,"height":0.018355945},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Upload & tools","depth":20,"bounds":{"left":0.12732713,"top":0.8567438,"width":0.015957447,"height":0.03830806},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Microphone","depth":20,"bounds":{"left":0.32413563,"top":0.86153233,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Send message","depth":20,"bounds":{"left":0.33211437,"top":0.8631285,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.","depth":17,"bounds":{"left":0.102726065,"top":0.9173983,"width":0.21775267,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Your privacy & Gemini Opens in a new window","depth":17,"bounds":{"left":0.32047874,"top":0.9173983,"width":0.043882977,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Your privacy & Gemini","depth":18,"bounds":{"left":0.32047874,"top":0.9173983,"width":0.043882977,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Opens in a new window","depth":19,"bounds":{"left":0.079288565,"top":0.91660017,"width":0.04720745,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Summarize page","depth":7,"bounds":{"left":0.08494016,"top":0.95730245,"width":0.053523935,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarize page","depth":9,"bounds":{"left":0.09059176,"top":0.96249,"width":0.042220745,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Skip to content","depth":6,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to content","depth":7,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open menu","depth":10,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Homepage (g then d)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"jiminny","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"app","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"app","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Search or jump to…","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to search","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Chat with Copilot","depth":10,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Open Copilot…","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXMenuButton","text":"Create new...","depth":9,"on_screen":false,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"All issues(g then i)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All pull requests","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"All repositories","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"You have unread notifications(g then n)","depth":9,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Open user navigation menu","depth":9,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Repository navigation","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Repository navigation","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Code","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
6952831365328364286
|
-1052936747159816292
|
idle
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
Close tab
Coverage on New Code - app in Jiminny SonarQube Cloud
Coverage on New Code - app in Jiminny SonarQube Cloud
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST [URL_WITH_CREDENTIALS] -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected. Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
You said
I’m on page “<tabTitle>Jy 20808 schedule reset on low queue by Vasil-Jimi</tabTitle>” with “<selection>@@ -6,38 +6,35 @@667use ChaseConey\LaravelDatadogHelper\Datadog;7use ChaseConey\LaravelDatadogHelper\Datadog;8use Illuminate\Support\Facades\Log;8use Illuminate\Support\Facades\Log;9+use Illuminate\Support\Facades\Redis;9use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\Client as ElasticSearchClient;10use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ElasticSearch\ElasticSearchMappings;11use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\DeleteDocumentsAction;12use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\LoadDocumentsAction;13use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14use Jiminny\Component\ES\Processor\Actions\UpsertDocumentsAction;14-use Jiminny\Component\ES\Processor\BatchStatusInterface;15+use Jiminny\Component\ES\Processor\BatchStatusManager;15use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SelectionList;16use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\DTOs\SimpleCollection;17use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\TargetEntitiesSelector;18use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\ExtractIdsTrait;19use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\SelectEntityListTrait;20use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21use Jiminny\Component\ES\Processor\Traits\UpdateTargetTrait;21-use Jiminny\Component\ES\Processor\Traits\WorkerIdTrait;22use Jiminny\Utils\StringUtil;22use Jiminny\Utils\StringUtil;232324class UpdateProcessManager24class UpdateProcessManager25{25{26use ExtractIdsTrait;26use ExtractIdsTrait;27use SelectEntityListTrait;27use SelectEntityListTrait;28use UpdateTargetTrait;28use UpdateTargetTrait;29-use WorkerIdTrait;302931-/**30+private const string GAUGE_LOCK_KEY = '%s-process-manager-lock';32- * Restart the script every X iterations, to allow the OS to collect any unused memory31+33- */32+private string $environment = 'local';34-private const int RESTART_AFTER = 20; // Iterations35-private int $counter = 0;363337public function __construct(34public function __construct(38private readonly ElasticSearchClient $esClient,35private readonly ElasticSearchClient $esClient,39private readonly TargetEntitiesSelector $entitySelector,36private readonly TargetEntitiesSelector $entitySelector,40-private readonly BatchStatusInterface $batchStatusManager,37+private readonly BatchStatusManager $batchStatusManager,41private readonly DeleteDocumentsAction $deleteDocumentsAction,38private readonly DeleteDocumentsAction $deleteDocumentsAction,42private readonly UpsertDocumentsAction $upsertDocumentsAction,39private readonly UpsertDocumentsAction $upsertDocumentsAction,43private readonly LoadDocumentsAction $loadDocumentsAction,40private readonly LoadDocumentsAction $loadDocumentsAction,@@ -49,6 +46,11 @@ public function __construct(49ini_set('memory_limit', '512M');46ini_set('memory_limit', '512M');50 }47 }514849+public function setEnvironment(string $environment): void50+ {51+$this->environment = $environment;52+ }53+52public function bootstrap(): void54public function bootstrap(): void53 {55 {54// Prepare the batch status manager56// Prepare the batch status manager@@ -73,21 +75,15 @@ public function bootstrap(): void737574public function doUpdateEntitiesChunk(): bool76public function doUpdateEntitiesChunk(): bool75 {77 {76-$batchName = $this->batchStatusManager->generateName();77$startTime = microtime(true);78$startTime = microtime(true);79+$batchName = $this->batchStatusManager->generateName();788079/** Select Entity IDs for processing */81/** Select Entity IDs for processing */80$selectionList = $this->entitySelector->select();82$selectionList = $this->entitySelector->select();81if ($selectionList->isEmpty()) {83if ($selectionList->isEmpty()) {82return false;84return false;83 }85 }848685-/**86- * A stale chunk will always be smaller than a regular chunk.87- * That doesn't mean there aren't any other scheduled entities for processing88- */89-$shouldIterateAgain = $this->shouldIterateAgain($selectionList);90-91/** Mark the batch as scheduled for work, then load the actual documents */87/** Mark the batch as scheduled for work, then load the actual documents */92$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);88$this->batchStatusManager->scheduleWork($selectionList->getAllIds(), $batchName);93$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());89$documentLoad = $this->loadDocumentsAction->loadDocuments($this->updateTarget, $selectionList->getAllIds());@@ -103,42 +99,23 @@ public function doUpdateEntitiesChunk(): bool103 unset($selectionList);99 unset($selectionList);104gc_collect_cycles();100gc_collect_cycles();105101106-/**102+/** Write stats and logs */107- * Write stats and logs108- */109 Datadog::increment(103 Datadog::increment(110 stats: 'jiminny.es-documents-synced',104 stats: 'jiminny.es-documents-synced',111 sampleRate: 1,105 sampleRate: 1,112 value: $updatedDocuments + $deletedDocuments106 value: $updatedDocuments + $deletedDocuments113 );107 );114108109+$this->logMemoryUsage();110+115 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [111 Log::info('[ EsUpdateProcessManager ] Finished updating entities in ES', [116-'worker' => $this->workerId,117'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),112'peak_memory' => StringUtil::filesizeToHuman(memory_get_peak_usage(true)),118'elapsed_seconds' => round(microtime(true) - $startTime, 2),113'elapsed_seconds' => round(microtime(true) - $startTime, 2),119'update_target' => $this->updateTarget,114'update_target' => $this->updateTarget,120-'should_iterate_again' => $shouldIterateAgain,115+'processed' => $updatedDocuments + $deletedDocuments,121 ]);116 ]);122117123-$this->counter++;118+return true;124-125-return $shouldIterateAgain;126- }127-128-private function shouldIterateAgain(SelectionList $selectionList): bool129- {130-if ($selectionList->isStaleChunkSelected() || $selectionList->isFullChunk()) {131-/**132- * Restart the worker to allow the OS to collect any unused memory133- */134-if ($this->counter >= self::RESTART_AFTER) {135-return false;136- }137-138-return true;139- }140-141-return false;142 }119 }143120144private function executeDelete(SimpleCollection $documentsToDelete): int121private function executeDelete(SimpleCollection $documentsToDelete): int@@ -162,13 +139,41 @@ private function rescheduleThrottledEntities(SelectionList $selectionList): void162$groups = $selectionList->getEntityListGroups();139$groups = $selectionList->getEntityListGroups();163foreach ($groups as $eachGroup) {140foreach ($groups as $eachGroup) {164$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);141$groupEntityIds = $selectionList->getEntityListItemsByGroup($eachGroup);142+$groupPriority = QueuePriorityEnum::tryFromString($eachGroup);143+165if (! empty($groupEntityIds)) {144if (! empty($groupEntityIds)) {145+/**146+ * Throttled stale records are rescheduled as normal priority147+ * all other records are rescheduled to their respective queue148+ */166 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(149 AsyncUpdateElasticSearch::bulkMarkEntitiesForUpdate(167 entityType: $this->updateTarget,150 entityType: $this->updateTarget,168 entityIds: $groupEntityIds,151 entityIds: $groupEntityIds,169- priority: QueuePriorityEnum::tryFromString($eachGroup)152+ priority: $groupPriority->isStale() ? QueuePriorityEnum::NORMAL : $groupPriority,170 );153 );171 }154 }172 }155 }173 }156 }157+158+private function logMemoryUsage(): void159+ {160+$gaugeLockName = sprintf(self::GAUGE_LOCK_KEY, $this->updateTarget);161+if (! is_null(Redis::get($gaugeLockName))) {162+return;163+ }164+165+ Redis::set($gaugeLockName, true);166+ Redis::expire($gaugeLockName, 60);167+168+// Add memory usage of the process as well169+ Datadog::gauge(170+ stat: 'jiminny.reindex-memory-usage',171+ value: memory_get_peak_usage(true),172+ sampleRate: 1,173+ tags: [174+'environment' => $this->environment,175+'type' => $this->updateTarget,176+ ]177+ );178+ }174}179}</selection>” selected.
Please summarize the selection using precise and concise language. Use headers and bulleted lists in the summary, to make it scannable. Maintain the meaning and factual accuracy.
Expand
Copy prompt
Gemini said
Gemini said
Here is a concise summary of the changes made in the code selection:
Refactoring and Dependencies
Refactoring and Dependencies
Replaced Interface with Implementation:
Changed
BatchStatusInterface
to
BatchStatusManager
in the imports and constructor dependency injection.
Added Redis Support:
Imported
Illuminate\Support\Facades\Redis
to handle a newly introduced memory-logging lock mechanism.
Removed Traits:
Removed
WorkerIdTrait
, along with the
worker
field tracking in the final logs.
Loop and Worker Lifecycle Adjustments
Loop and Worker Lifecycle Adjustments
Removed Worker Auto-Restart:
Deleted the
$counter
property, the
RESTART_AFTER
constant, and the
shouldIterateAgain()
method. The script no longer tracks execution iterations or triggers a self-managed worker restart.
Simplified Chunk Method Return:
Modified
doUpdateEntitiesChunk()
to always return
true
upon completion, rather than determining whether to iterate again based on chunk fullness or staleness.
Priority Handling for Throttled Entities
Priority Handling for Throttled Entities
Stale Record Elevation:
Updated the logic in
rescheduleThrottledEntities()
to check if a throttled entity group is classified as "stale". If it is, the entities are rescheduled using
QueuePriorityEnum::NORMAL
; otherwise, they keep their respective queue priority.
Metrics, Logging, and Environment Handling
Metrics, Logging, and Environment Handling
Added Environment Tracking:
Introduced a
$environment
property (defaulting to
'local'
) and a
setEnvironment()
method to dynamically assign it.
Memory Monitoring via Datadog Gauge:
Added a
logMemoryUsage()
method that submits peak memory allocation to Datadog as a gauge metric (
jiminny.reindex-memory-usage
).
Redis Lock for Metrics Throttling:
Implemented a Redis-backed lock (
%s-process-manager-lock
) with a 60-second expiration inside
logMemoryUsage()
to prevent over-reporting metrics.
Log Payload Update:
Added total processed items (
$updatedDocuments + $deletedDocuments
) to the final information log.
Good response
Bad response
Share & export
Copy
Show more options
You said are there any issues or potential bottlenecks
You said
are there any issues or potential bottlenecks
Copy prompt
Edit
Gemini said
Gemini said
Based on the code selection provided, there are several potential issues, bottlenecks, and architectural risks—primarily revolving around memory management, race conditions, and error handling.
Here is a breakdown of the potential issues to look out for:
1. Memory Leak Risk (OOM Crashes)
1. Memory Leak Risk (OOM Crashes)
Removed Restart Logic:
The most significant change is the removal of the
$counter
and
RESTART_AFTER
logic. Previously, the worker restarted itself to let the OS reclaim memory. Now, it relies entirely on PHP's internal garbage collection (
gc_collect_cycles()
).
Dependency Leaks:
If any underlying service (like the
ElasticSearchClient
, ORM, or Datadog helper) retains references to processed entities,
gc_collect_cycles()
will not be able to free them. The worker will eventually hit the memory limit and crash with a fatal Out Of Memory (OOM) error.
Hardcoded Limits:
The code still includes
ini_set('memory_limit', '512M');
. Hardcoding environment constraints inside application logic makes it difficult to scale or tune workers dynamically via infrastructure configurations.
2. Race Condition in Redis Lock
2. Race Condition in Redis Lock
Non-Atomic Operations:
The
logMemoryUsage
method uses three distinct steps to handle the lock:
get()
,
set()
, and
expire()
.
The Bottleneck:
If multiple workers process the same
$this->updateTarget
concurrently, they can both pass the
if (! is_null(Redis::get(...)))
check at the exact same millisecond. Both will then execute
set()
and push duplicate metrics to Datadog.
The Fix:
This should be replaced with a single atomic operation using Redis's
NX
(Not eXists) and
EX
(Expire) flags, or Laravel’s built-in atomic cache locks:
Redis::set($gaugeLockName, true, 'EX', 60, 'NX')
.
3. Infinite Loops and Caller Contract
3. Infinite Loops and Caller Contract
Return Value Change:
doUpdateEntitiesChunk()
previously returned whether it should iterate again based on staleness or chunk size. It now always returns
true
(unless the selection is totally empty).
The Bottleneck:
If the code calling this method relies on a
false
return to pause, sleep, or gracefully terminate, changing this to an unconditional
true
could result in an aggressive "busy loop" that spikes CPU usage.
4. Performance Overhead
4. Performance Overhead
Expensive Garbage Collection:
Calling
gc_collect_cycles();
on
every single chunk
can be CPU-intensive. While it is necessary since the restart logic was removed, it adds overhead to the loop.
Synchronous Metric Dispatch:
If the
Datadog::increment
or
Datadog::gauge
methods are making synchronous API calls over HTTP or TCP (rather than non-blocking UDP like standard StatsD), this will block the worker and significantly slow down the indexing process.
5. Lack of Explicit Error Handling
5. Lack of Explicit Error Handling
No
try/catch
Blocks:
The script executes complex network operations (
loadDocuments
, Datadog logging, ElasticSearch updates/deletes) without visible exception handling in this snippet. If a single document fails to load or the Elasticsearch cluster drops a connection, the unhandled exception will crash the worker mid-batch, potentially leaving the batch in an inconsistent state.
Good response
Bad response
Redo
Share & export
Copy
Show more options
Ask Gemini
Ask Gemini
Upload & tools
Microphone
Send message
Your Jiminny chats aren’t used to improve our models. Gemini is AI. It can make mistakes, so double check it.
Your privacy & Gemini Opens in a new window
Your privacy & Gemini
Opens in a new window
Summarize page
Summarize page
Skip to content
Skip to content
Open menu
Homepage (g then d)
jiminny
jiminny
app
app
Search or jump to…
Type
/
to search
Chat with Copilot
Open Copilot…
Create new...
All issues(g then i)
All pull requests
All repositories
You have unread notifications(g then n)
Open user navigation menu
Repository navigation
Repository navigation
Code...
|
65270
|
NULL
|
NULL
|
NULL
|
|
65273
|
2292
|
0
|
2026-05-20T16:32:49.957908+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-20/1779 /Users/lukas/.screenpipe/data/data/2026-05-20/1779294769957_m1.jpg...
|
Firefox
|
JY-20915 add alias for EU by LakyLak · Pull Reques JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app — Work...
|
1
|
github.com/jiminny/app/pull/12105
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
Close tab
Coverage on New Code - app in Jiminny SonarQube Cloud
Coverage on New Code - app in Jiminny SonarQube Cloud
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Pipelines - jiminny/app
Pipelines - jiminny/app
Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app
Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
Main menu
New chat
Gemini
New Chat...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Service-Desk - Queues - Platform team - Service space - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Coverage on New Code - app in Jiminny SonarQube Cloud","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Coverage on New Code - app in Jiminny SonarQube Cloud","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SevenShores\\Hubspot\\Exceptions\\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {\"status\":\"error\",\"message\":\"You have reached your secondly limit.\",\"errorType\":\"RATE_LIMIT","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"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,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Main menu","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New chat","depth":12,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gemini","depth":15,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Chat","depth":13,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false}]...
|
1570006176520328818
|
-1130553529024875633
|
app_switch
|
accessibility
|
NULL
|
Platform Sprint 4 Q2 - Platform Team - Scrum Board Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 4 Q2 - Platform Team - Scrum Board - Jira
Service-Desk - Queues - Platform team - Service space - Jira
Service-Desk - Queues - Platform team - Service space - Jira
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
JY-20676 delete AJ reports related objects by LakyLak · Pull Request #12098 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
Allow owner's role to be selected when setting up a trial by LakyLak · Pull Request #12092 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
JY-20915 add alias for EU by LakyLak · Pull Request #12105 · jiminny/app
Close tab
Coverage on New Code - app in Jiminny SonarQube Cloud
Coverage on New Code - app in Jiminny SonarQube Cloud
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
[JY-20915] Add environment-specific email domains for text relay to prevent duplicate processing - Jira
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
SevenShores\Hubspot\Exceptions\BadRequest: Client error: `POST https://api.hubapi.com/crm/v3/objects/contact/search` resulted in a `429 Too Many Requests` response: {"status":"error","message":"You have reached your secondly limit.","errorType":"RATE_LIMIT
Pipelines - jiminny/app
Pipelines - jiminny/app
Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app
Jy 20808 schedule reset on low queue by Vasil-Jiminny · Pull Request #12106 · jiminny/app
New Tab
Customize sidebar
Close Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
AI Chat settings
Close
Main menu
New chat
Gemini
New Chat...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
65274
|
2292
|
1
|
2026-05-20T16:32:50.776897+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-20/1779 /Users/lukas/.screenpipe/data/data/2026-05-20/1779294770776_m1.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
whisper_backend_init: using BLAS backend
whisper_i whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:02:12.940912Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:04:15.158149Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:06:17.434788Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:08:19.251183Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
2026-05-20T19:10:11.470051Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=0 elapsed=1.058486667s
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:10:21.283568Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:12:22.964186Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:14:24.793808Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
2026-05-20T19:15:13.045918Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=0 elapsed=1.559040292s
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:16:26.760236Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:18:28.403590Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:20:30.255602Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:22:32.047109Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:24:33.736373Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:26:35.447983Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:28:37.309461Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:30:39.160036Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-20T19:32:31.822706Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:32:42.587514Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
2026-05-20T19:32:49.945982Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-05-20T19:32:49.948962Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-05-20T19:32:49.955255Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-05-20T19:32:50.135042Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)
DOCKER
Close Tab
DEV (-zsh)
Close Tab
screenpipe"
Close Tab
APP (-zsh)
Close Tab
⌥⌘1
screenpipe"...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"whisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:02:12.940912Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:04:15.158149Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:06:17.434788Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:08:19.251183Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-20T19:10:11.470051Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=0 elapsed=1.058486667s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:10:21.283568Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:12:22.964186Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:14:24.793808Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-20T19:15:13.045918Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=0 elapsed=1.559040292s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:16:26.760236Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:18:28.403590Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:20:30.255602Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:22:32.047109Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:24:33.736373Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:26:35.447983Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:28:37.309461Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:30:39.160036Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-20T19:32:31.822706Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:32:42.587514Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-20T19:32:49.945982Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-20T19:32:49.948962Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-05-20T19:32:49.955255Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-20T19:32:50.135042Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)","depth":4,"bounds":{"left":0.0,"top":0.08777778,"width":1.0,"height":0.9122222},"on_screen":true,"value":"whisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:02:12.940912Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:04:15.158149Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:06:17.434788Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:08:19.251183Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-20T19:10:11.470051Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=0 elapsed=1.058486667s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:10:21.283568Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:12:22.964186Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:14:24.793808Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-20T19:15:13.045918Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=0 elapsed=1.559040292s\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:16:26.760236Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:18:28.403590Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:20:30.255602Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:22:32.047109Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:24:33.736373Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:26:35.447983Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:28:37.309461Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:30:39.160036Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-20T19:32:31.822706Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-20T19:32:42.587514Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-20T19:32:49.945982Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-20T19:32:49.948962Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1\n2026-05-20T19:32:49.955255Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-20T19:32:50.135042Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.24652778,"height":0.026666667},"on_screen":true,"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},"on_screen":true,"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.24652778,"top":0.05888889,"width":0.24652778,"height":0.026666667},"on_screen":true,"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.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.49305555,"top":0.05888889,"width":0.24652778,"height":0.026666667},"on_screen":true,"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.49722221,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.7395833,"top":0.05888889,"width":0.24652778,"height":0.026666667},"on_screen":true,"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.74375,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.95763886,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.4722222,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-3779577406198865868
|
-852231715036531232
|
visual_change
|
accessibility
|
NULL
|
whisper_backend_init: using BLAS backend
whisper_i whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:02:12.940912Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:04:15.158149Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:06:17.434788Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:08:19.251183Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
2026-05-20T19:10:11.470051Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=0 elapsed=1.058486667s
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:10:21.283568Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:12:22.964186Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:14:24.793808Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
2026-05-20T19:15:13.045918Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=0 elapsed=1.559040292s
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:16:26.760236Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:18:28.403590Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:20:30.255602Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:22:32.047109Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:24:33.736373Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:26:35.447983Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:28:37.309461Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:30:39.160036Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-20T19:32:31.822706Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-20T19:32:42.587514Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks
2026-05-20T19:32:49.945982Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-05-20T19:32:49.948962Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 1
2026-05-20T19:32:49.955255Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-05-20T19:32:50.135042Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)
DOCKER
Close Tab
DEV (-zsh)
Close Tab
screenpipe"
Close Tab
APP (-zsh)
Close Tab
⌥⌘1
screenpipe"...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
65275
|
NULL
|
0
|
2026-05-20T16:32:53.798480+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-20/1779 /Users/lukas/.screenpipe/data/data/2026-05-20/1779294773798_m1.jpg...
|
iTerm2
|
APP (-zsh)
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Wed May 20 09:14:49 on ttys007
Poetry Last login: Wed May 20 09:14:49 on ttys007
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ ;xd
docker exec -it docker_lamp_1 bash -c "mv /usr/local/etc/php/conf.d/xdebug.ini ~/xdebug.ini"
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5689 files in 34.956 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] -9,11 +9,7 @@
use Google\Service\Gmail\MessagePart;
use Google\Service\Gmail\MessagePartHeader;
use Illuminate\Support\Facades\Config;
-use Illuminate\Support\Facades\Queue;
-use Illuminate\Support\Facades\DB;
use Jiminny\Services\Mail\TextRelayService;
-use Jiminny\Models\TextRelay;
-use Jiminny\Jobs\Mailbox\EmailTextRelay;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use Tests\TestCase;
----------- end diff -----------
Fixed 1 of 5689 files in 44.720 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git pull
remote: Enumerating objects: 1400, done.
remote: Counting objects: 100% (775/775), done.
remote: Compressing objects: 100% (116/116), done.
remote: Total 1400 (delta 692), reused 662 (delta 659), pack-reused 625 (from 3)
Receiving objects: 100% (1400/1400), 950.35 KiB | 2.21 MiB/s, done.
Resolving deltas: 100% (878/878), completed with 225 local objects.
From github.com:jiminny/app
d5a447e492..c4e163f3e7 JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup
0b8343d179..32cf0db4fb JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5
56ca84fabd..3f5f9b21c7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects
2b5e6ea62b..6fa3fead5a JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details
045ab2e174..729a39244d JY-20842-remove-elastic-search-delete-documents -> origin/JY-20842-remove-elastic-search-delete-documents
* [new branch] JY-20920-participant-matching-exclusive-mechanism -> origin/JY-20920-participant-matching-exclusive-mechanism
177ea29b8d..a873f0cbce master -> origin/master
Merge made by the 'ort' strategy.
app/Component/ES/AsyncUpdateElasticSearch.php | 27 +++++----
app/Component/ES/ElasticSearchDocumentPartialUpdater.php | 48 ---------------
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-
app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++-
app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-
app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++------
app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++-------
app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 ++++++++--
app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++
app/Component/ES/UpdateProcessManager.php | 21 ++++---
app/Component/MeetingBot/Service/ParticipantMatcher.php | 46 +++++++++++----
app/Component/ParticipantSpeech/Services/ParticipantAttributionService.php | 4 +-
app/Component/Settings/AutoScoring/Services/UpdateAutoScoreService.php | 20 +++----
app/Component/Transcription/Service/StorageService.php | 8 +--
app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++-
app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +-
app/Exceptions/RateLimitException.php | 19 +++++-
app/Jobs/Crm/MatchActivityCrmData.php | 47 +++++++++++----
app/Jobs/Middleware/HandleHubspotRateLimit.php | 42 ++++++++++++++
app/Services/Activity/HubSpot/ProviderResolver.php | 4 +-
app/Services/Activity/HubSpot/ProviderResolverInterface.php | 2 +-
app/Services/Activity/HubSpot/Providers/Provider.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderKixie.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderOrum.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderTwilio.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderTwilioFlex.php | 5 +-
app/Services/Activity/HubSpot/Service.php | 97 ++++++++++++++++++++++++++-----
app/Services/Crm/Hubspot/Client.php | 132 ++++++++++++++++++++++++++++++++++++++++++
app/Services/Crm/Hubspot/HubspotClientInterface.php | 15 +++++
app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php | 21 +++----
app/Services/Crm/Hubspot/Pagination/PaginationState.php | 2 +-
app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++-----
front-end/package.json | 2 +-
front-end/yarn.lock | 8 +--
routes/api.php | 7 ++-
tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 ++++++--
tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php | 42 --------------
tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 ++---
tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++---------------
tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +--
tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++-----
tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 ++++++++++++++++++++
tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++---
tests/Unit/Component/MeetingBot/Service/ParticipantMatcherTest.php | 68 +++++++++++++++++++++-
tests/Unit/Component/Settings/AutoScoring/Services/UpdateAutoScoreServiceTest.php | 86 +++++++++++++++------------
tests/Unit/Component/Transcription/Service/StorageServiceTest.php | 29 +++-------
tests/Unit/Exceptions/RateLimitExceptionTest.php | 56 ++++++++++++++++++
tests/Unit/Jobs/Crm/MatchActivityCrmDataTest.php | 8 +--
tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php | 151 +++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Services/Activity/HubSpot/ServiceTest.php | 109 ++++++++++++++++++++++++++++++++++
tests/Unit/Services/Crm/Hubspot/ClientTest.php | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Services/Crm/Hubspot/Pagination/HubspotPaginationServiceTest.php | 283 +++++++++++++++++++----------------------------------------------------------------------
52 files changed, 1632 insertions(+), 631 deletions(-)
delete mode 100644 app/Component/ES/ElasticSearchDocumentPartialUpdater.php
create mode 100644 app/Component/ES/QueuePriorityEnum.php
create mode 100644 app/Jobs/Middleware/HandleHubspotRateLimit.php
delete mode 100644 tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php
create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php
create mode 100644 tests/Unit/Exceptions/RateLimitExceptionTest.php
create mode 100644 tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git push
Enumerating objects: 19, done.
Counting objects: 100% (16/16), done.
Delta compression using up to 8 threads
Compressing objects: 100% (9/9), done.
Writing objects: 100% (9/9), 844 bytes | 844.00 KiB/s, done.
Total 9 (delta 6), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (6/6), completed with 5 local objects.
To github.com:jiminny/app.git
c4e163f3e7..f885e531ab JY-20613-allow-owner-role-on-team-setup -> JY-20613-allow-owner-role-on-team-setup
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status
On branch JY-20915-add-domain-specific-email-text-relay
Your branch is up to date with 'origin/JY-20915-add-domain-specific-email-text-relay'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: tests/Unit/Notifications/Activities/SmsReceivedTest.php
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5690 files in 76.177 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status
On branch JY-20676-delete-report-related-objects
Your branch is behind 'origin/JY-20676-delete-report-related-objects' by 48 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
no changes added to commit (use "git add" and/or "git commit -a")
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ git pull
remote: Enumerating objects: 157, done.
remote: Counting objects: 100% (157/157), done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 157 (delta 120), reused 147 (delta 115), pack-reused 0 (from 0)
Receiving objects: 100% (157/157), 24.95 KiB | 1.78 MiB/s, done.
Resolving deltas: 100% (120/120), completed with 37 local objects.
From github.com:jiminny/app
3f5f9b21c7..202ab55be7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects
3642c9384c..cf70da243a JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup
* [new branch] JY-20808-schedule-reset-on-low-queue -> origin/JY-20808-schedule-reset-on-low-queue
* [new branch] JY-20930-ringcentral-disconnected-crm -> origin/JY-20930-ringcentral-disconnected-crm
a873f0cbce..71b36decb6 master -> origin/master
Updating 56ca84fabd..202ab55be7
Fast-forward
app/Component/ES/AsyncUpdateElasticSearch.php | 27 ++++++++++------
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-
app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++++-
app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-
app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++++++++++++++++----------
app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++++++++-------------
app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 +++++++++++++++---
app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++++++++++++
app/Component/ES/UpdateProcessManager.php | 21 +++++++------
app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++++--
app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +++-
app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++++++++++++---------
app/Services/RecallAI/RecallAIService.php | 11 +++++++
front-end/src/components/shared/SavedSearchModal/__mocks__/saved-searches.js | 1 +
front-end/src/components/shared/SavedSearchModal/__tests__/SavedSearchModal.spec.js | 60 +++++++++++++++++++++++++++++++----
front-end/src/components/shared/SavedSearchModal/useSavedSearch.js | 55 ++++++++++++++++++++++----------
tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +++++++++++---
tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +++-------
tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +++---
tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++++++++---------
tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 +++++++++++++++++++++++++++++++++++++
tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++++------
tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++++++++++++++++++++++++++
24 files changed, 619 insertions(+), 196 deletions(-)
create mode 100644 app/Component/ES/QueuePriorityEnum.php
create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5690 files in 78.144 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-f.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-b.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/vin.HEIC --out ~/Downloads/Photos-3-001\(2\)/vin.png
/Users/lukas/Downloads/Photos-3-001(2)/vin.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/vin.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/dr-lic-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/dr-lic-f.png
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/dr-lic-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/dr-lic-b.png
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/gtp.HEIC --out ~/Downloads/Photos-3-001\(2\)/gtp.png
Warning: /Users/lukas/Downloads/Photos-3-001(2)/gtp.HEIC not a valid file - skipping
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/gtp.heif --out ~/Downloads/Photos-3-001\(2\)/gtp.png
/Users/lukas/Downloads/Photos-3-001(2)/gtp.heif
/Users/lukas/Downloads/Photos-3-001(2)/gtp.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-m-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-m-f.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-m-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-m-b.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
screenpipe"
Close Tab
APP (-zsh)
Close Tab
⌥⌘1
APP (-zsh)...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Wed May 20 09:14:49 on ttys007\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ ;xd\ndocker exec -it docker_lamp_1 bash -c \"mv /usr/local/etc/php/conf.d/xdebug.ini ~/xdebug.ini\"\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\ndocker exec -it docker_lamp_1 supervisorctl restart all\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-audio:worker-audio_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\ndocker exec -it docker_lamp_1 php -v\nPHP 8.3.30 (cli) (built: Mar 16 2026 22:32:32) (NTS)\nCopyright (c) The PHP Group\nZend Engine v4.3.30, Copyright (c) Zend Technologies\n with Zend OPcache v8.3.30, Copyright (c), by Zend Technologies\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5689 files in 34.956 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n 1) tests/Unit/Services/Mail/TextRelayServiceTest.php (no_unused_imports)\n ---------- begin diff ----------\n--- /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php\n+++ /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php\n@@ -9,11 +9,7 @@\n use Google\\Service\\Gmail\\MessagePart;\n use Google\\Service\\Gmail\\MessagePartHeader;\n use Illuminate\\Support\\Facades\\Config;\n-use Illuminate\\Support\\Facades\\Queue;\n-use Illuminate\\Support\\Facades\\DB;\n use Jiminny\\Services\\Mail\\TextRelayService;\n-use Jiminny\\Models\\TextRelay;\n-use Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\n use PHPUnit\\Framework\\Attributes\\CoversClass;\n use PHPUnit\\Framework\\Attributes\\DataProvider;\n use Tests\\TestCase;\n\n ----------- end diff -----------\n\n\nFixed 1 of 5689 files in 44.720 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ git status\nOn branch JY-20613-allow-owner-role-on-team-setup\nYour branch and 'origin/JY-20613-allow-owner-role-on-team-setup' have diverged,\nand have 1 and 10 different commits each, respectively.\n (use \"git pull\" to merge the remote branch into yours)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git pull\nremote: Enumerating objects: 1400, done.\nremote: Counting objects: 100% (775/775), done.\nremote: Compressing objects: 100% (116/116), done.\nremote: Total 1400 (delta 692), reused 662 (delta 659), pack-reused 625 (from 3)\nReceiving objects: 100% (1400/1400), 950.35 KiB | 2.21 MiB/s, done.\nResolving deltas: 100% (878/878), completed with 225 local objects.\nFrom github.com:jiminny/app\n d5a447e492..c4e163f3e7 JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup\n 0b8343d179..32cf0db4fb JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5\n 56ca84fabd..3f5f9b21c7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects\n 2b5e6ea62b..6fa3fead5a JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details\n 045ab2e174..729a39244d JY-20842-remove-elastic-search-delete-documents -> origin/JY-20842-remove-elastic-search-delete-documents\n * [new branch] JY-20920-participant-matching-exclusive-mechanism -> origin/JY-20920-participant-matching-exclusive-mechanism\n 177ea29b8d..a873f0cbce master -> origin/master\nMerge made by the 'ort' strategy.\n app/Component/ES/AsyncUpdateElasticSearch.php | 27 +++++----\n app/Component/ES/ElasticSearchDocumentPartialUpdater.php | 48 ---------------\n app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-\n app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++-\n app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-\n app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++------\n app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++-------\n app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 ++++++++--\n app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++\n app/Component/ES/UpdateProcessManager.php | 21 ++++---\n app/Component/MeetingBot/Service/ParticipantMatcher.php | 46 +++++++++++----\n app/Component/ParticipantSpeech/Services/ParticipantAttributionService.php | 4 +-\n app/Component/Settings/AutoScoring/Services/UpdateAutoScoreService.php | 20 +++----\n app/Component/Transcription/Service/StorageService.php | 8 +--\n app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++-\n app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +-\n app/Exceptions/RateLimitException.php | 19 +++++-\n app/Jobs/Crm/MatchActivityCrmData.php | 47 +++++++++++----\n app/Jobs/Middleware/HandleHubspotRateLimit.php | 42 ++++++++++++++\n app/Services/Activity/HubSpot/ProviderResolver.php | 4 +-\n app/Services/Activity/HubSpot/ProviderResolverInterface.php | 2 +-\n app/Services/Activity/HubSpot/Providers/Provider.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderKixie.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderOrum.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderTwilio.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderTwilioFlex.php | 5 +-\n app/Services/Activity/HubSpot/Service.php | 97 ++++++++++++++++++++++++++-----\n app/Services/Crm/Hubspot/Client.php | 132 ++++++++++++++++++++++++++++++++++++++++++\n app/Services/Crm/Hubspot/HubspotClientInterface.php | 15 +++++\n app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php | 21 +++----\n app/Services/Crm/Hubspot/Pagination/PaginationState.php | 2 +-\n app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++-----\n front-end/package.json | 2 +-\n front-end/yarn.lock | 8 +--\n routes/api.php | 7 ++-\n tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 ++++++--\n tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php | 42 --------------\n tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 ++---\n tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++---------------\n tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +--\n tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++-----\n tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 ++++++++++++++++++++\n tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++---\n tests/Unit/Component/MeetingBot/Service/ParticipantMatcherTest.php | 68 +++++++++++++++++++++-\n tests/Unit/Component/Settings/AutoScoring/Services/UpdateAutoScoreServiceTest.php | 86 +++++++++++++++------------\n tests/Unit/Component/Transcription/Service/StorageServiceTest.php | 29 +++-------\n tests/Unit/Exceptions/RateLimitExceptionTest.php | 56 ++++++++++++++++++\n tests/Unit/Jobs/Crm/MatchActivityCrmDataTest.php | 8 +--\n tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php | 151 +++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Activity/HubSpot/ServiceTest.php | 109 ++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Crm/Hubspot/ClientTest.php | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Crm/Hubspot/Pagination/HubspotPaginationServiceTest.php | 283 +++++++++++++++++++----------------------------------------------------------------------\n 52 files changed, 1632 insertions(+), 631 deletions(-)\n delete mode 100644 app/Component/ES/ElasticSearchDocumentPartialUpdater.php\n create mode 100644 app/Component/ES/QueuePriorityEnum.php\n create mode 100644 app/Jobs/Middleware/HandleHubspotRateLimit.php\n delete mode 100644 tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php\n create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php\n create mode 100644 tests/Unit/Exceptions/RateLimitExceptionTest.php\n create mode 100644 tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git push\nEnumerating objects: 19, done.\nCounting objects: 100% (16/16), done.\nDelta compression using up to 8 threads\nCompressing objects: 100% (9/9), done.\nWriting objects: 100% (9/9), 844 bytes | 844.00 KiB/s, done.\nTotal 9 (delta 6), reused 0 (delta 0), pack-reused 0\nremote: Resolving deltas: 100% (6/6), completed with 5 local objects.\nTo github.com:jiminny/app.git\n c4e163f3e7..f885e531ab JY-20613-allow-owner-role-on-team-setup -> JY-20613-allow-owner-role-on-team-setup\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status\nOn branch JY-20915-add-domain-specific-email-text-relay\nYour branch is up to date with 'origin/JY-20915-add-domain-specific-email-text-relay'.\n\nChanges to be committed:\n (use \"git restore --staged <file>...\" to unstage)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tnew file: tests/Unit/Notifications/Activities/SmsReceivedTest.php\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 76.177 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 97.337 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status\nOn branch JY-20676-delete-report-related-objects\nYour branch is behind 'origin/JY-20676-delete-report-related-objects' by 48 commits, and can be fast-forwarded.\n (use \"git pull\" to update your local branch)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ git pull\nremote: Enumerating objects: 157, done.\nremote: Counting objects: 100% (157/157), done.\nremote: Compressing objects: 100% (42/42), done.\nremote: Total 157 (delta 120), reused 147 (delta 115), pack-reused 0 (from 0)\nReceiving objects: 100% (157/157), 24.95 KiB | 1.78 MiB/s, done.\nResolving deltas: 100% (120/120), completed with 37 local objects.\nFrom github.com:jiminny/app\n 3f5f9b21c7..202ab55be7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects\n 3642c9384c..cf70da243a JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup\n * [new branch] JY-20808-schedule-reset-on-low-queue -> origin/JY-20808-schedule-reset-on-low-queue\n * [new branch] JY-20930-ringcentral-disconnected-crm -> origin/JY-20930-ringcentral-disconnected-crm\n a873f0cbce..71b36decb6 master -> origin/master\nUpdating 56ca84fabd..202ab55be7\nFast-forward\n app/Component/ES/AsyncUpdateElasticSearch.php | 27 ++++++++++------\n app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-\n app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++++-\n app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-\n app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++++++++++++++++----------\n app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++++++++-------------\n app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 +++++++++++++++---\n app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++++++++++++\n app/Component/ES/UpdateProcessManager.php | 21 +++++++------\n app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++++--\n app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +++-\n app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++++++++++++---------\n app/Services/RecallAI/RecallAIService.php | 11 +++++++\n front-end/src/components/shared/SavedSearchModal/__mocks__/saved-searches.js | 1 +\n front-end/src/components/shared/SavedSearchModal/__tests__/SavedSearchModal.spec.js | 60 +++++++++++++++++++++++++++++++----\n front-end/src/components/shared/SavedSearchModal/useSavedSearch.js | 55 ++++++++++++++++++++++----------\n tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +++++++++++---\n tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +++-------\n tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------\n tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +++---\n tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++++++++---------\n tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 +++++++++++++++++++++++++++++++++++++\n tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++++------\n tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++++++++++++++++++++++++++\n 24 files changed, 619 insertions(+), 196 deletions(-)\n create mode 100644 app/Component/ES/QueuePriorityEnum.php\n create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 78.144 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001(2)\nzsh: unknown file attribute: 2\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/vin.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/vin.png \n/Users/lukas/Downloads/Photos-3-001(2)/vin.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/vin.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/dr-lic-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/dr-lic-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/dr-lic-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/dr-lic-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/gtp.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/gtp.png \nWarning: /Users/lukas/Downloads/Photos-3-001(2)/gtp.HEIC not a valid file - skipping\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/gtp.heif --out ~/Downloads/Photos-3-001\\(2\\)/gtp.png\n/Users/lukas/Downloads/Photos-3-001(2)/gtp.heif\n /Users/lukas/Downloads/Photos-3-001(2)/gtp.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-m-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-m-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-m-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-m-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $","depth":4,"on_screen":true,"value":"Last login: Wed May 20 09:14:49 on ttys007\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ ;xd\ndocker exec -it docker_lamp_1 bash -c \"mv /usr/local/etc/php/conf.d/xdebug.ini ~/xdebug.ini\"\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\ndocker exec -it docker_lamp_1 supervisorctl restart all\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-audio:worker-audio_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\ndocker exec -it docker_lamp_1 php -v\nPHP 8.3.30 (cli) (built: Mar 16 2026 22:32:32) (NTS)\nCopyright (c) The PHP Group\nZend Engine v4.3.30, Copyright (c) Zend Technologies\n with Zend OPcache v8.3.30, Copyright (c), by Zend Technologies\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5689 files in 34.956 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n 1) tests/Unit/Services/Mail/TextRelayServiceTest.php (no_unused_imports)\n ---------- begin diff ----------\n--- /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php\n+++ /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php\n@@ -9,11 +9,7 @@\n use Google\\Service\\Gmail\\MessagePart;\n use Google\\Service\\Gmail\\MessagePartHeader;\n use Illuminate\\Support\\Facades\\Config;\n-use Illuminate\\Support\\Facades\\Queue;\n-use Illuminate\\Support\\Facades\\DB;\n use Jiminny\\Services\\Mail\\TextRelayService;\n-use Jiminny\\Models\\TextRelay;\n-use Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\n use PHPUnit\\Framework\\Attributes\\CoversClass;\n use PHPUnit\\Framework\\Attributes\\DataProvider;\n use Tests\\TestCase;\n\n ----------- end diff -----------\n\n\nFixed 1 of 5689 files in 44.720 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ git status\nOn branch JY-20613-allow-owner-role-on-team-setup\nYour branch and 'origin/JY-20613-allow-owner-role-on-team-setup' have diverged,\nand have 1 and 10 different commits each, respectively.\n (use \"git pull\" to merge the remote branch into yours)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git pull\nremote: Enumerating objects: 1400, done.\nremote: Counting objects: 100% (775/775), done.\nremote: Compressing objects: 100% (116/116), done.\nremote: Total 1400 (delta 692), reused 662 (delta 659), pack-reused 625 (from 3)\nReceiving objects: 100% (1400/1400), 950.35 KiB | 2.21 MiB/s, done.\nResolving deltas: 100% (878/878), completed with 225 local objects.\nFrom github.com:jiminny/app\n d5a447e492..c4e163f3e7 JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup\n 0b8343d179..32cf0db4fb JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5\n 56ca84fabd..3f5f9b21c7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects\n 2b5e6ea62b..6fa3fead5a JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details\n 045ab2e174..729a39244d JY-20842-remove-elastic-search-delete-documents -> origin/JY-20842-remove-elastic-search-delete-documents\n * [new branch] JY-20920-participant-matching-exclusive-mechanism -> origin/JY-20920-participant-matching-exclusive-mechanism\n 177ea29b8d..a873f0cbce master -> origin/master\nMerge made by the 'ort' strategy.\n app/Component/ES/AsyncUpdateElasticSearch.php | 27 +++++----\n app/Component/ES/ElasticSearchDocumentPartialUpdater.php | 48 ---------------\n app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-\n app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++-\n app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-\n app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++------\n app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++-------\n app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 ++++++++--\n app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++\n app/Component/ES/UpdateProcessManager.php | 21 ++++---\n app/Component/MeetingBot/Service/ParticipantMatcher.php | 46 +++++++++++----\n app/Component/ParticipantSpeech/Services/ParticipantAttributionService.php | 4 +-\n app/Component/Settings/AutoScoring/Services/UpdateAutoScoreService.php | 20 +++----\n app/Component/Transcription/Service/StorageService.php | 8 +--\n app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++-\n app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +-\n app/Exceptions/RateLimitException.php | 19 +++++-\n app/Jobs/Crm/MatchActivityCrmData.php | 47 +++++++++++----\n app/Jobs/Middleware/HandleHubspotRateLimit.php | 42 ++++++++++++++\n app/Services/Activity/HubSpot/ProviderResolver.php | 4 +-\n app/Services/Activity/HubSpot/ProviderResolverInterface.php | 2 +-\n app/Services/Activity/HubSpot/Providers/Provider.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderKixie.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderOrum.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderTwilio.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderTwilioFlex.php | 5 +-\n app/Services/Activity/HubSpot/Service.php | 97 ++++++++++++++++++++++++++-----\n app/Services/Crm/Hubspot/Client.php | 132 ++++++++++++++++++++++++++++++++++++++++++\n app/Services/Crm/Hubspot/HubspotClientInterface.php | 15 +++++\n app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php | 21 +++----\n app/Services/Crm/Hubspot/Pagination/PaginationState.php | 2 +-\n app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++-----\n front-end/package.json | 2 +-\n front-end/yarn.lock | 8 +--\n routes/api.php | 7 ++-\n tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 ++++++--\n tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php | 42 --------------\n tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 ++---\n tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++---------------\n tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +--\n tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++-----\n tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 ++++++++++++++++++++\n tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++---\n tests/Unit/Component/MeetingBot/Service/ParticipantMatcherTest.php | 68 +++++++++++++++++++++-\n tests/Unit/Component/Settings/AutoScoring/Services/UpdateAutoScoreServiceTest.php | 86 +++++++++++++++------------\n tests/Unit/Component/Transcription/Service/StorageServiceTest.php | 29 +++-------\n tests/Unit/Exceptions/RateLimitExceptionTest.php | 56 ++++++++++++++++++\n tests/Unit/Jobs/Crm/MatchActivityCrmDataTest.php | 8 +--\n tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php | 151 +++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Activity/HubSpot/ServiceTest.php | 109 ++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Crm/Hubspot/ClientTest.php | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Crm/Hubspot/Pagination/HubspotPaginationServiceTest.php | 283 +++++++++++++++++++----------------------------------------------------------------------\n 52 files changed, 1632 insertions(+), 631 deletions(-)\n delete mode 100644 app/Component/ES/ElasticSearchDocumentPartialUpdater.php\n create mode 100644 app/Component/ES/QueuePriorityEnum.php\n create mode 100644 app/Jobs/Middleware/HandleHubspotRateLimit.php\n delete mode 100644 tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php\n create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php\n create mode 100644 tests/Unit/Exceptions/RateLimitExceptionTest.php\n create mode 100644 tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git push\nEnumerating objects: 19, done.\nCounting objects: 100% (16/16), done.\nDelta compression using up to 8 threads\nCompressing objects: 100% (9/9), done.\nWriting objects: 100% (9/9), 844 bytes | 844.00 KiB/s, done.\nTotal 9 (delta 6), reused 0 (delta 0), pack-reused 0\nremote: Resolving deltas: 100% (6/6), completed with 5 local objects.\nTo github.com:jiminny/app.git\n c4e163f3e7..f885e531ab JY-20613-allow-owner-role-on-team-setup -> JY-20613-allow-owner-role-on-team-setup\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status\nOn branch JY-20915-add-domain-specific-email-text-relay\nYour branch is up to date with 'origin/JY-20915-add-domain-specific-email-text-relay'.\n\nChanges to be committed:\n (use \"git restore --staged <file>...\" to unstage)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tnew file: tests/Unit/Notifications/Activities/SmsReceivedTest.php\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 76.177 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 97.337 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status\nOn branch JY-20676-delete-report-related-objects\nYour branch is behind 'origin/JY-20676-delete-report-related-objects' by 48 commits, and can be fast-forwarded.\n (use \"git pull\" to update your local branch)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ git pull\nremote: Enumerating objects: 157, done.\nremote: Counting objects: 100% (157/157), done.\nremote: Compressing objects: 100% (42/42), done.\nremote: Total 157 (delta 120), reused 147 (delta 115), pack-reused 0 (from 0)\nReceiving objects: 100% (157/157), 24.95 KiB | 1.78 MiB/s, done.\nResolving deltas: 100% (120/120), completed with 37 local objects.\nFrom github.com:jiminny/app\n 3f5f9b21c7..202ab55be7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects\n 3642c9384c..cf70da243a JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup\n * [new branch] JY-20808-schedule-reset-on-low-queue -> origin/JY-20808-schedule-reset-on-low-queue\n * [new branch] JY-20930-ringcentral-disconnected-crm -> origin/JY-20930-ringcentral-disconnected-crm\n a873f0cbce..71b36decb6 master -> origin/master\nUpdating 56ca84fabd..202ab55be7\nFast-forward\n app/Component/ES/AsyncUpdateElasticSearch.php | 27 ++++++++++------\n app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-\n app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++++-\n app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-\n app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++++++++++++++++----------\n app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++++++++-------------\n app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 +++++++++++++++---\n app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++++++++++++\n app/Component/ES/UpdateProcessManager.php | 21 +++++++------\n app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++++--\n app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +++-\n app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++++++++++++---------\n app/Services/RecallAI/RecallAIService.php | 11 +++++++\n front-end/src/components/shared/SavedSearchModal/__mocks__/saved-searches.js | 1 +\n front-end/src/components/shared/SavedSearchModal/__tests__/SavedSearchModal.spec.js | 60 +++++++++++++++++++++++++++++++----\n front-end/src/components/shared/SavedSearchModal/useSavedSearch.js | 55 ++++++++++++++++++++++----------\n tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +++++++++++---\n tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +++-------\n tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------\n tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +++---\n tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++++++++---------\n tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 +++++++++++++++++++++++++++++++++++++\n tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++++------\n tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++++++++++++++++++++++++++\n 24 files changed, 619 insertions(+), 196 deletions(-)\n create mode 100644 app/Component/ES/QueuePriorityEnum.php\n create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 78.144 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001(2)\nzsh: unknown file attribute: 2\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/vin.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/vin.png \n/Users/lukas/Downloads/Photos-3-001(2)/vin.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/vin.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/dr-lic-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/dr-lic-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/dr-lic-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/dr-lic-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/gtp.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/gtp.png \nWarning: /Users/lukas/Downloads/Photos-3-001(2)/gtp.HEIC not a valid file - skipping\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/gtp.heif --out ~/Downloads/Photos-3-001\\(2\\)/gtp.png\n/Users/lukas/Downloads/Photos-3-001(2)/gtp.heif\n /Users/lukas/Downloads/Photos-3-001(2)/gtp.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-m-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-m-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-m-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-m-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.24652778,"height":0.026666667},"on_screen":true,"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},"on_screen":true,"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.24652778,"top":0.05888889,"width":0.24652778,"height":0.026666667},"on_screen":true,"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.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.49305555,"top":0.05888889,"width":0.24652778,"height":0.026666667},"on_screen":true,"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.49722221,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.7395833,"top":0.05888889,"width":0.24652778,"height":0.026666667},"on_screen":true,"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.74375,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.95763886,"top":0.032222223,"width":0.03888889,"height":0.018888889},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"APP (-zsh)","depth":1,"bounds":{"left":0.47569445,"top":0.033333335,"width":0.05138889,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
3699539556758104852
|
-1977088783609353508
|
visual_change
|
accessibility
|
NULL
|
Last login: Wed May 20 09:14:49 on ttys007
Poetry Last login: Wed May 20 09:14:49 on ttys007
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ ;xd
docker exec -it docker_lamp_1 bash -c "mv /usr/local/etc/php/conf.d/xdebug.ini ~/xdebug.ini"
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5689 files in 34.956 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] -9,11 +9,7 @@
use Google\Service\Gmail\MessagePart;
use Google\Service\Gmail\MessagePartHeader;
use Illuminate\Support\Facades\Config;
-use Illuminate\Support\Facades\Queue;
-use Illuminate\Support\Facades\DB;
use Jiminny\Services\Mail\TextRelayService;
-use Jiminny\Models\TextRelay;
-use Jiminny\Jobs\Mailbox\EmailTextRelay;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use Tests\TestCase;
----------- end diff -----------
Fixed 1 of 5689 files in 44.720 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git pull
remote: Enumerating objects: 1400, done.
remote: Counting objects: 100% (775/775), done.
remote: Compressing objects: 100% (116/116), done.
remote: Total 1400 (delta 692), reused 662 (delta 659), pack-reused 625 (from 3)
Receiving objects: 100% (1400/1400), 950.35 KiB | 2.21 MiB/s, done.
Resolving deltas: 100% (878/878), completed with 225 local objects.
From github.com:jiminny/app
d5a447e492..c4e163f3e7 JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup
0b8343d179..32cf0db4fb JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5
56ca84fabd..3f5f9b21c7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects
2b5e6ea62b..6fa3fead5a JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details
045ab2e174..729a39244d JY-20842-remove-elastic-search-delete-documents -> origin/JY-20842-remove-elastic-search-delete-documents
* [new branch] JY-20920-participant-matching-exclusive-mechanism -> origin/JY-20920-participant-matching-exclusive-mechanism
177ea29b8d..a873f0cbce master -> origin/master
Merge made by the 'ort' strategy.
app/Component/ES/AsyncUpdateElasticSearch.php | 27 +++++----
app/Component/ES/ElasticSearchDocumentPartialUpdater.php | 48 ---------------
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-
app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++-
app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-
app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++------
app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++-------
app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 ++++++++--
app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++
app/Component/ES/UpdateProcessManager.php | 21 ++++---
app/Component/MeetingBot/Service/ParticipantMatcher.php | 46 +++++++++++----
app/Component/ParticipantSpeech/Services/ParticipantAttributionService.php | 4 +-
app/Component/Settings/AutoScoring/Services/UpdateAutoScoreService.php | 20 +++----
app/Component/Transcription/Service/StorageService.php | 8 +--
app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++-
app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +-
app/Exceptions/RateLimitException.php | 19 +++++-
app/Jobs/Crm/MatchActivityCrmData.php | 47 +++++++++++----
app/Jobs/Middleware/HandleHubspotRateLimit.php | 42 ++++++++++++++
app/Services/Activity/HubSpot/ProviderResolver.php | 4 +-
app/Services/Activity/HubSpot/ProviderResolverInterface.php | 2 +-
app/Services/Activity/HubSpot/Providers/Provider.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderKixie.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderOrum.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderTwilio.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderTwilioFlex.php | 5 +-
app/Services/Activity/HubSpot/Service.php | 97 ++++++++++++++++++++++++++-----
app/Services/Crm/Hubspot/Client.php | 132 ++++++++++++++++++++++++++++++++++++++++++
app/Services/Crm/Hubspot/HubspotClientInterface.php | 15 +++++
app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php | 21 +++----
app/Services/Crm/Hubspot/Pagination/PaginationState.php | 2 +-
app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++-----
front-end/package.json | 2 +-
front-end/yarn.lock | 8 +--
routes/api.php | 7 ++-
tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 ++++++--
tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php | 42 --------------
tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 ++---
tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++---------------
tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +--
tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++-----
tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 ++++++++++++++++++++
tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++---
tests/Unit/Component/MeetingBot/Service/ParticipantMatcherTest.php | 68 +++++++++++++++++++++-
tests/Unit/Component/Settings/AutoScoring/Services/UpdateAutoScoreServiceTest.php | 86 +++++++++++++++------------
tests/Unit/Component/Transcription/Service/StorageServiceTest.php | 29 +++-------
tests/Unit/Exceptions/RateLimitExceptionTest.php | 56 ++++++++++++++++++
tests/Unit/Jobs/Crm/MatchActivityCrmDataTest.php | 8 +--
tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php | 151 +++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Services/Activity/HubSpot/ServiceTest.php | 109 ++++++++++++++++++++++++++++++++++
tests/Unit/Services/Crm/Hubspot/ClientTest.php | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Services/Crm/Hubspot/Pagination/HubspotPaginationServiceTest.php | 283 +++++++++++++++++++----------------------------------------------------------------------
52 files changed, 1632 insertions(+), 631 deletions(-)
delete mode 100644 app/Component/ES/ElasticSearchDocumentPartialUpdater.php
create mode 100644 app/Component/ES/QueuePriorityEnum.php
create mode 100644 app/Jobs/Middleware/HandleHubspotRateLimit.php
delete mode 100644 tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php
create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php
create mode 100644 tests/Unit/Exceptions/RateLimitExceptionTest.php
create mode 100644 tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git push
Enumerating objects: 19, done.
Counting objects: 100% (16/16), done.
Delta compression using up to 8 threads
Compressing objects: 100% (9/9), done.
Writing objects: 100% (9/9), 844 bytes | 844.00 KiB/s, done.
Total 9 (delta 6), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (6/6), completed with 5 local objects.
To github.com:jiminny/app.git
c4e163f3e7..f885e531ab JY-20613-allow-owner-role-on-team-setup -> JY-20613-allow-owner-role-on-team-setup
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status
On branch JY-20915-add-domain-specific-email-text-relay
Your branch is up to date with 'origin/JY-20915-add-domain-specific-email-text-relay'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: tests/Unit/Notifications/Activities/SmsReceivedTest.php
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5690 files in 76.177 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status
On branch JY-20676-delete-report-related-objects
Your branch is behind 'origin/JY-20676-delete-report-related-objects' by 48 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
no changes added to commit (use "git add" and/or "git commit -a")
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ git pull
remote: Enumerating objects: 157, done.
remote: Counting objects: 100% (157/157), done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 157 (delta 120), reused 147 (delta 115), pack-reused 0 (from 0)
Receiving objects: 100% (157/157), 24.95 KiB | 1.78 MiB/s, done.
Resolving deltas: 100% (120/120), completed with 37 local objects.
From github.com:jiminny/app
3f5f9b21c7..202ab55be7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects
3642c9384c..cf70da243a JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup
* [new branch] JY-20808-schedule-reset-on-low-queue -> origin/JY-20808-schedule-reset-on-low-queue
* [new branch] JY-20930-ringcentral-disconnected-crm -> origin/JY-20930-ringcentral-disconnected-crm
a873f0cbce..71b36decb6 master -> origin/master
Updating 56ca84fabd..202ab55be7
Fast-forward
app/Component/ES/AsyncUpdateElasticSearch.php | 27 ++++++++++------
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-
app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++++-
app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-
app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++++++++++++++++----------
app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++++++++-------------
app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 +++++++++++++++---
app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++++++++++++
app/Component/ES/UpdateProcessManager.php | 21 +++++++------
app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++++--
app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +++-
app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++++++++++++---------
app/Services/RecallAI/RecallAIService.php | 11 +++++++
front-end/src/components/shared/SavedSearchModal/__mocks__/saved-searches.js | 1 +
front-end/src/components/shared/SavedSearchModal/__tests__/SavedSearchModal.spec.js | 60 +++++++++++++++++++++++++++++++----
front-end/src/components/shared/SavedSearchModal/useSavedSearch.js | 55 ++++++++++++++++++++++----------
tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +++++++++++---
tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +++-------
tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +++---
tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++++++++---------
tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 +++++++++++++++++++++++++++++++++++++
tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++++------
tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++++++++++++++++++++++++++
24 files changed, 619 insertions(+), 196 deletions(-)
create mode 100644 app/Component/ES/QueuePriorityEnum.php
create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5690 files in 78.144 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-f.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-b.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/vin.HEIC --out ~/Downloads/Photos-3-001\(2\)/vin.png
/Users/lukas/Downloads/Photos-3-001(2)/vin.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/vin.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/dr-lic-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/dr-lic-f.png
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/dr-lic-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/dr-lic-b.png
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/gtp.HEIC --out ~/Downloads/Photos-3-001\(2\)/gtp.png
Warning: /Users/lukas/Downloads/Photos-3-001(2)/gtp.HEIC not a valid file - skipping
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/gtp.heif --out ~/Downloads/Photos-3-001\(2\)/gtp.png
/Users/lukas/Downloads/Photos-3-001(2)/gtp.heif
/Users/lukas/Downloads/Photos-3-001(2)/gtp.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-m-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-m-f.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-m-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-m-b.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
screenpipe"
Close Tab
APP (-zsh)
Close Tab
⌥⌘1
APP (-zsh)...
|
65274
|
NULL
|
NULL
|
NULL
|
|
65276
|
NULL
|
0
|
2026-05-20T16:32:54.587200+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-20/1779 /Users/lukas/.screenpipe/data/data/2026-05-20/1779294774587_m2.jpg...
|
iTerm2
|
APP (-zsh)
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Wed May 20 09:14:49 on ttys007
Poetry Last login: Wed May 20 09:14:49 on ttys007
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ ;xd
docker exec -it docker_lamp_1 bash -c "mv /usr/local/etc/php/conf.d/xdebug.ini ~/xdebug.ini"
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5689 files in 34.956 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] -9,11 +9,7 @@
use Google\Service\Gmail\MessagePart;
use Google\Service\Gmail\MessagePartHeader;
use Illuminate\Support\Facades\Config;
-use Illuminate\Support\Facades\Queue;
-use Illuminate\Support\Facades\DB;
use Jiminny\Services\Mail\TextRelayService;
-use Jiminny\Models\TextRelay;
-use Jiminny\Jobs\Mailbox\EmailTextRelay;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use Tests\TestCase;
----------- end diff -----------
Fixed 1 of 5689 files in 44.720 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git pull
remote: Enumerating objects: 1400, done.
remote: Counting objects: 100% (775/775), done.
remote: Compressing objects: 100% (116/116), done.
remote: Total 1400 (delta 692), reused 662 (delta 659), pack-reused 625 (from 3)
Receiving objects: 100% (1400/1400), 950.35 KiB | 2.21 MiB/s, done.
Resolving deltas: 100% (878/878), completed with 225 local objects.
From github.com:jiminny/app
d5a447e492..c4e163f3e7 JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup
0b8343d179..32cf0db4fb JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5
56ca84fabd..3f5f9b21c7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects
2b5e6ea62b..6fa3fead5a JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details
045ab2e174..729a39244d JY-20842-remove-elastic-search-delete-documents -> origin/JY-20842-remove-elastic-search-delete-documents
* [new branch] JY-20920-participant-matching-exclusive-mechanism -> origin/JY-20920-participant-matching-exclusive-mechanism
177ea29b8d..a873f0cbce master -> origin/master
Merge made by the 'ort' strategy.
app/Component/ES/AsyncUpdateElasticSearch.php | 27 +++++----
app/Component/ES/ElasticSearchDocumentPartialUpdater.php | 48 ---------------
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-
app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++-
app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-
app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++------
app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++-------
app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 ++++++++--
app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++
app/Component/ES/UpdateProcessManager.php | 21 ++++---
app/Component/MeetingBot/Service/ParticipantMatcher.php | 46 +++++++++++----
app/Component/ParticipantSpeech/Services/ParticipantAttributionService.php | 4 +-
app/Component/Settings/AutoScoring/Services/UpdateAutoScoreService.php | 20 +++----
app/Component/Transcription/Service/StorageService.php | 8 +--
app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++-
app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +-
app/Exceptions/RateLimitException.php | 19 +++++-
app/Jobs/Crm/MatchActivityCrmData.php | 47 +++++++++++----
app/Jobs/Middleware/HandleHubspotRateLimit.php | 42 ++++++++++++++
app/Services/Activity/HubSpot/ProviderResolver.php | 4 +-
app/Services/Activity/HubSpot/ProviderResolverInterface.php | 2 +-
app/Services/Activity/HubSpot/Providers/Provider.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderKixie.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderOrum.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderTwilio.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderTwilioFlex.php | 5 +-
app/Services/Activity/HubSpot/Service.php | 97 ++++++++++++++++++++++++++-----
app/Services/Crm/Hubspot/Client.php | 132 ++++++++++++++++++++++++++++++++++++++++++
app/Services/Crm/Hubspot/HubspotClientInterface.php | 15 +++++
app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php | 21 +++----
app/Services/Crm/Hubspot/Pagination/PaginationState.php | 2 +-
app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++-----
front-end/package.json | 2 +-
front-end/yarn.lock | 8 +--
routes/api.php | 7 ++-
tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 ++++++--
tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php | 42 --------------
tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 ++---
tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++---------------
tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +--
tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++-----
tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 ++++++++++++++++++++
tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++---
tests/Unit/Component/MeetingBot/Service/ParticipantMatcherTest.php | 68 +++++++++++++++++++++-
tests/Unit/Component/Settings/AutoScoring/Services/UpdateAutoScoreServiceTest.php | 86 +++++++++++++++------------
tests/Unit/Component/Transcription/Service/StorageServiceTest.php | 29 +++-------
tests/Unit/Exceptions/RateLimitExceptionTest.php | 56 ++++++++++++++++++
tests/Unit/Jobs/Crm/MatchActivityCrmDataTest.php | 8 +--
tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php | 151 +++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Services/Activity/HubSpot/ServiceTest.php | 109 ++++++++++++++++++++++++++++++++++
tests/Unit/Services/Crm/Hubspot/ClientTest.php | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Services/Crm/Hubspot/Pagination/HubspotPaginationServiceTest.php | 283 +++++++++++++++++++----------------------------------------------------------------------
52 files changed, 1632 insertions(+), 631 deletions(-)
delete mode 100644 app/Component/ES/ElasticSearchDocumentPartialUpdater.php
create mode 100644 app/Component/ES/QueuePriorityEnum.php
create mode 100644 app/Jobs/Middleware/HandleHubspotRateLimit.php
delete mode 100644 tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php
create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php
create mode 100644 tests/Unit/Exceptions/RateLimitExceptionTest.php
create mode 100644 tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git push
Enumerating objects: 19, done.
Counting objects: 100% (16/16), done.
Delta compression using up to 8 threads
Compressing objects: 100% (9/9), done.
Writing objects: 100% (9/9), 844 bytes | 844.00 KiB/s, done.
Total 9 (delta 6), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (6/6), completed with 5 local objects.
To github.com:jiminny/app.git
c4e163f3e7..f885e531ab JY-20613-allow-owner-role-on-team-setup -> JY-20613-allow-owner-role-on-team-setup
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status
On branch JY-20915-add-domain-specific-email-text-relay
Your branch is up to date with 'origin/JY-20915-add-domain-specific-email-text-relay'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: tests/Unit/Notifications/Activities/SmsReceivedTest.php
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5690 files in 76.177 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status
On branch JY-20676-delete-report-related-objects
Your branch is behind 'origin/JY-20676-delete-report-related-objects' by 48 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
no changes added to commit (use "git add" and/or "git commit -a")
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ git pull
remote: Enumerating objects: 157, done.
remote: Counting objects: 100% (157/157), done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 157 (delta 120), reused 147 (delta 115), pack-reused 0 (from 0)
Receiving objects: 100% (157/157), 24.95 KiB | 1.78 MiB/s, done.
Resolving deltas: 100% (120/120), completed with 37 local objects.
From github.com:jiminny/app
3f5f9b21c7..202ab55be7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects
3642c9384c..cf70da243a JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup
* [new branch] JY-20808-schedule-reset-on-low-queue -> origin/JY-20808-schedule-reset-on-low-queue
* [new branch] JY-20930-ringcentral-disconnected-crm -> origin/JY-20930-ringcentral-disconnected-crm
a873f0cbce..71b36decb6 master -> origin/master
Updating 56ca84fabd..202ab55be7
Fast-forward
app/Component/ES/AsyncUpdateElasticSearch.php | 27 ++++++++++------
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-
app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++++-
app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-
app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++++++++++++++++----------
app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++++++++-------------
app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 +++++++++++++++---
app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++++++++++++
app/Component/ES/UpdateProcessManager.php | 21 +++++++------
app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++++--
app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +++-
app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++++++++++++---------
app/Services/RecallAI/RecallAIService.php | 11 +++++++
front-end/src/components/shared/SavedSearchModal/__mocks__/saved-searches.js | 1 +
front-end/src/components/shared/SavedSearchModal/__tests__/SavedSearchModal.spec.js | 60 +++++++++++++++++++++++++++++++----
front-end/src/components/shared/SavedSearchModal/useSavedSearch.js | 55 ++++++++++++++++++++++----------
tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +++++++++++---
tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +++-------
tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +++---
tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++++++++---------
tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 +++++++++++++++++++++++++++++++++++++
tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++++------
tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++++++++++++++++++++++++++
24 files changed, 619 insertions(+), 196 deletions(-)
create mode 100644 app/Component/ES/QueuePriorityEnum.php
create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5690 files in 78.144 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-f.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-b.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/vin.HEIC --out ~/Downloads/Photos-3-001\(2\)/vin.png
/Users/lukas/Downloads/Photos-3-001(2)/vin.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/vin.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/dr-lic-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/dr-lic-f.png
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/dr-lic-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/dr-lic-b.png
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/gtp.HEIC --out ~/Downloads/Photos-3-001\(2\)/gtp.png
Warning: /Users/lukas/Downloads/Photos-3-001(2)/gtp.HEIC not a valid file - skipping
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/gtp.heif --out ~/Downloads/Photos-3-001\(2\)/gtp.png
/Users/lukas/Downloads/Photos-3-001(2)/gtp.heif
/Users/lukas/Downloads/Photos-3-001(2)/gtp.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-m-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-m-f.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-m-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-m-b.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
screenpipe"
Close Tab
APP (-zsh)
Close Tab
⌥⌘1
APP (-zsh)...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Wed May 20 09:14:49 on ttys007\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ ;xd\ndocker exec -it docker_lamp_1 bash -c \"mv /usr/local/etc/php/conf.d/xdebug.ini ~/xdebug.ini\"\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\ndocker exec -it docker_lamp_1 supervisorctl restart all\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-audio:worker-audio_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\ndocker exec -it docker_lamp_1 php -v\nPHP 8.3.30 (cli) (built: Mar 16 2026 22:32:32) (NTS)\nCopyright (c) The PHP Group\nZend Engine v4.3.30, Copyright (c) Zend Technologies\n with Zend OPcache v8.3.30, Copyright (c), by Zend Technologies\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5689 files in 34.956 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n 1) tests/Unit/Services/Mail/TextRelayServiceTest.php (no_unused_imports)\n ---------- begin diff ----------\n--- /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php\n+++ /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php\n@@ -9,11 +9,7 @@\n use Google\\Service\\Gmail\\MessagePart;\n use Google\\Service\\Gmail\\MessagePartHeader;\n use Illuminate\\Support\\Facades\\Config;\n-use Illuminate\\Support\\Facades\\Queue;\n-use Illuminate\\Support\\Facades\\DB;\n use Jiminny\\Services\\Mail\\TextRelayService;\n-use Jiminny\\Models\\TextRelay;\n-use Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\n use PHPUnit\\Framework\\Attributes\\CoversClass;\n use PHPUnit\\Framework\\Attributes\\DataProvider;\n use Tests\\TestCase;\n\n ----------- end diff -----------\n\n\nFixed 1 of 5689 files in 44.720 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ git status\nOn branch JY-20613-allow-owner-role-on-team-setup\nYour branch and 'origin/JY-20613-allow-owner-role-on-team-setup' have diverged,\nand have 1 and 10 different commits each, respectively.\n (use \"git pull\" to merge the remote branch into yours)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git pull\nremote: Enumerating objects: 1400, done.\nremote: Counting objects: 100% (775/775), done.\nremote: Compressing objects: 100% (116/116), done.\nremote: Total 1400 (delta 692), reused 662 (delta 659), pack-reused 625 (from 3)\nReceiving objects: 100% (1400/1400), 950.35 KiB | 2.21 MiB/s, done.\nResolving deltas: 100% (878/878), completed with 225 local objects.\nFrom github.com:jiminny/app\n d5a447e492..c4e163f3e7 JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup\n 0b8343d179..32cf0db4fb JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5\n 56ca84fabd..3f5f9b21c7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects\n 2b5e6ea62b..6fa3fead5a JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details\n 045ab2e174..729a39244d JY-20842-remove-elastic-search-delete-documents -> origin/JY-20842-remove-elastic-search-delete-documents\n * [new branch] JY-20920-participant-matching-exclusive-mechanism -> origin/JY-20920-participant-matching-exclusive-mechanism\n 177ea29b8d..a873f0cbce master -> origin/master\nMerge made by the 'ort' strategy.\n app/Component/ES/AsyncUpdateElasticSearch.php | 27 +++++----\n app/Component/ES/ElasticSearchDocumentPartialUpdater.php | 48 ---------------\n app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-\n app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++-\n app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-\n app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++------\n app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++-------\n app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 ++++++++--\n app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++\n app/Component/ES/UpdateProcessManager.php | 21 ++++---\n app/Component/MeetingBot/Service/ParticipantMatcher.php | 46 +++++++++++----\n app/Component/ParticipantSpeech/Services/ParticipantAttributionService.php | 4 +-\n app/Component/Settings/AutoScoring/Services/UpdateAutoScoreService.php | 20 +++----\n app/Component/Transcription/Service/StorageService.php | 8 +--\n app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++-\n app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +-\n app/Exceptions/RateLimitException.php | 19 +++++-\n app/Jobs/Crm/MatchActivityCrmData.php | 47 +++++++++++----\n app/Jobs/Middleware/HandleHubspotRateLimit.php | 42 ++++++++++++++\n app/Services/Activity/HubSpot/ProviderResolver.php | 4 +-\n app/Services/Activity/HubSpot/ProviderResolverInterface.php | 2 +-\n app/Services/Activity/HubSpot/Providers/Provider.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderKixie.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderOrum.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderTwilio.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderTwilioFlex.php | 5 +-\n app/Services/Activity/HubSpot/Service.php | 97 ++++++++++++++++++++++++++-----\n app/Services/Crm/Hubspot/Client.php | 132 ++++++++++++++++++++++++++++++++++++++++++\n app/Services/Crm/Hubspot/HubspotClientInterface.php | 15 +++++\n app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php | 21 +++----\n app/Services/Crm/Hubspot/Pagination/PaginationState.php | 2 +-\n app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++-----\n front-end/package.json | 2 +-\n front-end/yarn.lock | 8 +--\n routes/api.php | 7 ++-\n tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 ++++++--\n tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php | 42 --------------\n tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 ++---\n tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++---------------\n tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +--\n tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++-----\n tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 ++++++++++++++++++++\n tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++---\n tests/Unit/Component/MeetingBot/Service/ParticipantMatcherTest.php | 68 +++++++++++++++++++++-\n tests/Unit/Component/Settings/AutoScoring/Services/UpdateAutoScoreServiceTest.php | 86 +++++++++++++++------------\n tests/Unit/Component/Transcription/Service/StorageServiceTest.php | 29 +++-------\n tests/Unit/Exceptions/RateLimitExceptionTest.php | 56 ++++++++++++++++++\n tests/Unit/Jobs/Crm/MatchActivityCrmDataTest.php | 8 +--\n tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php | 151 +++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Activity/HubSpot/ServiceTest.php | 109 ++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Crm/Hubspot/ClientTest.php | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Crm/Hubspot/Pagination/HubspotPaginationServiceTest.php | 283 +++++++++++++++++++----------------------------------------------------------------------\n 52 files changed, 1632 insertions(+), 631 deletions(-)\n delete mode 100644 app/Component/ES/ElasticSearchDocumentPartialUpdater.php\n create mode 100644 app/Component/ES/QueuePriorityEnum.php\n create mode 100644 app/Jobs/Middleware/HandleHubspotRateLimit.php\n delete mode 100644 tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php\n create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php\n create mode 100644 tests/Unit/Exceptions/RateLimitExceptionTest.php\n create mode 100644 tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git push\nEnumerating objects: 19, done.\nCounting objects: 100% (16/16), done.\nDelta compression using up to 8 threads\nCompressing objects: 100% (9/9), done.\nWriting objects: 100% (9/9), 844 bytes | 844.00 KiB/s, done.\nTotal 9 (delta 6), reused 0 (delta 0), pack-reused 0\nremote: Resolving deltas: 100% (6/6), completed with 5 local objects.\nTo github.com:jiminny/app.git\n c4e163f3e7..f885e531ab JY-20613-allow-owner-role-on-team-setup -> JY-20613-allow-owner-role-on-team-setup\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status\nOn branch JY-20915-add-domain-specific-email-text-relay\nYour branch is up to date with 'origin/JY-20915-add-domain-specific-email-text-relay'.\n\nChanges to be committed:\n (use \"git restore --staged <file>...\" to unstage)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tnew file: tests/Unit/Notifications/Activities/SmsReceivedTest.php\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 76.177 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 97.337 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status\nOn branch JY-20676-delete-report-related-objects\nYour branch is behind 'origin/JY-20676-delete-report-related-objects' by 48 commits, and can be fast-forwarded.\n (use \"git pull\" to update your local branch)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ git pull\nremote: Enumerating objects: 157, done.\nremote: Counting objects: 100% (157/157), done.\nremote: Compressing objects: 100% (42/42), done.\nremote: Total 157 (delta 120), reused 147 (delta 115), pack-reused 0 (from 0)\nReceiving objects: 100% (157/157), 24.95 KiB | 1.78 MiB/s, done.\nResolving deltas: 100% (120/120), completed with 37 local objects.\nFrom github.com:jiminny/app\n 3f5f9b21c7..202ab55be7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects\n 3642c9384c..cf70da243a JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup\n * [new branch] JY-20808-schedule-reset-on-low-queue -> origin/JY-20808-schedule-reset-on-low-queue\n * [new branch] JY-20930-ringcentral-disconnected-crm -> origin/JY-20930-ringcentral-disconnected-crm\n a873f0cbce..71b36decb6 master -> origin/master\nUpdating 56ca84fabd..202ab55be7\nFast-forward\n app/Component/ES/AsyncUpdateElasticSearch.php | 27 ++++++++++------\n app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-\n app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++++-\n app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-\n app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++++++++++++++++----------\n app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++++++++-------------\n app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 +++++++++++++++---\n app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++++++++++++\n app/Component/ES/UpdateProcessManager.php | 21 +++++++------\n app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++++--\n app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +++-\n app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++++++++++++---------\n app/Services/RecallAI/RecallAIService.php | 11 +++++++\n front-end/src/components/shared/SavedSearchModal/__mocks__/saved-searches.js | 1 +\n front-end/src/components/shared/SavedSearchModal/__tests__/SavedSearchModal.spec.js | 60 +++++++++++++++++++++++++++++++----\n front-end/src/components/shared/SavedSearchModal/useSavedSearch.js | 55 ++++++++++++++++++++++----------\n tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +++++++++++---\n tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +++-------\n tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------\n tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +++---\n tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++++++++---------\n tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 +++++++++++++++++++++++++++++++++++++\n tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++++------\n tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++++++++++++++++++++++++++\n 24 files changed, 619 insertions(+), 196 deletions(-)\n create mode 100644 app/Component/ES/QueuePriorityEnum.php\n create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 78.144 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001(2)\nzsh: unknown file attribute: 2\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/vin.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/vin.png \n/Users/lukas/Downloads/Photos-3-001(2)/vin.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/vin.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/dr-lic-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/dr-lic-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/dr-lic-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/dr-lic-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/gtp.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/gtp.png \nWarning: /Users/lukas/Downloads/Photos-3-001(2)/gtp.HEIC not a valid file - skipping\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/gtp.heif --out ~/Downloads/Photos-3-001\\(2\\)/gtp.png\n/Users/lukas/Downloads/Photos-3-001(2)/gtp.heif\n /Users/lukas/Downloads/Photos-3-001(2)/gtp.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-m-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-m-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-m-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-m-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $","depth":4,"on_screen":true,"value":"Last login: Wed May 20 09:14:49 on ttys007\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ ;xd\ndocker exec -it docker_lamp_1 bash -c \"mv /usr/local/etc/php/conf.d/xdebug.ini ~/xdebug.ini\"\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\ndocker exec -it docker_lamp_1 supervisorctl restart all\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: stopped\nworker-download:worker-download_00: stopped\njiminny-worker-processing-2:jiminny-worker-processing-2_00: stopped\njiminny-worker-processing-3:jiminny-worker-processing-3_00: stopped\njiminny-worker-processing-4:jiminny-worker-processing-4_00: stopped\njiminny-worker-processing-5:jiminny-worker-processing-5_00: stopped\nworker-analytics:worker-analytics_00: stopped\nworker-crm-update:worker-crm-update_00: stopped\nworker-nudges:worker-nudges_00: stopped\nworker-audio:worker-audio_00: stopped\njiminny-worker-processing-1:jiminny-worker-processing-1_00: stopped\nworker:worker_00: stopped\nworker-calendar:worker-calendar_00: stopped\nworker-conferences:worker-conferences_00: stopped\nworker-crm-sync:worker-crm-sync_00: stopped\nworker-emails:worker-emails_00: stopped\nworker-es-update:worker-es-update_00: stopped\nartisan-schedule:artisan-schedule_00: stopped\nartisan-schedule:artisan-schedule_00: started\njiminny-worker-processing-1:jiminny-worker-processing-1_00: started\njiminny-worker-processing-2:jiminny-worker-processing-2_00: started\njiminny-worker-processing-3:jiminny-worker-processing-3_00: started\njiminny-worker-processing-4:jiminny-worker-processing-4_00: started\njiminny-worker-processing-5:jiminny-worker-processing-5_00: started\njiminny-worker-processing-delayed:jiminny-worker-processing-delayed_00: started\nworker:worker_00: started\nworker-analytics:worker-analytics_00: started\nworker-audio:worker-audio_00: started\nworker-calendar:worker-calendar_00: started\nworker-conferences:worker-conferences_00: started\nworker-crm-sync:worker-crm-sync_00: started\nworker-crm-update:worker-crm-update_00: started\nworker-download:worker-download_00: started\nworker-emails:worker-emails_00: started\nworker-es-update:worker-es-update_00: started\nworker-nudges:worker-nudges_00: started\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\ndocker exec -it docker_lamp_1 php -v\nPHP 8.3.30 (cli) (built: Mar 16 2026 22:32:32) (NTS)\nCopyright (c) The PHP Group\nZend Engine v4.3.30, Copyright (c) Zend Technologies\n with Zend OPcache v8.3.30, Copyright (c), by Zend Technologies\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5689 files in 34.956 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n 1) tests/Unit/Services/Mail/TextRelayServiceTest.php (no_unused_imports)\n ---------- begin diff ----------\n--- /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php\n+++ /home/jiminny/tests/Unit/Services/Mail/TextRelayServiceTest.php\n@@ -9,11 +9,7 @@\n use Google\\Service\\Gmail\\MessagePart;\n use Google\\Service\\Gmail\\MessagePartHeader;\n use Illuminate\\Support\\Facades\\Config;\n-use Illuminate\\Support\\Facades\\Queue;\n-use Illuminate\\Support\\Facades\\DB;\n use Jiminny\\Services\\Mail\\TextRelayService;\n-use Jiminny\\Models\\TextRelay;\n-use Jiminny\\Jobs\\Mailbox\\EmailTextRelay;\n use PHPUnit\\Framework\\Attributes\\CoversClass;\n use PHPUnit\\Framework\\Attributes\\DataProvider;\n use Tests\\TestCase;\n\n ----------- end diff -----------\n\n\nFixed 1 of 5689 files in 44.720 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ git status\nOn branch JY-20613-allow-owner-role-on-team-setup\nYour branch and 'origin/JY-20613-allow-owner-role-on-team-setup' have diverged,\nand have 1 and 10 different commits each, respectively.\n (use \"git pull\" to merge the remote branch into yours)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git pull\nremote: Enumerating objects: 1400, done.\nremote: Counting objects: 100% (775/775), done.\nremote: Compressing objects: 100% (116/116), done.\nremote: Total 1400 (delta 692), reused 662 (delta 659), pack-reused 625 (from 3)\nReceiving objects: 100% (1400/1400), 950.35 KiB | 2.21 MiB/s, done.\nResolving deltas: 100% (878/878), completed with 225 local objects.\nFrom github.com:jiminny/app\n d5a447e492..c4e163f3e7 JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup\n 0b8343d179..32cf0db4fb JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5\n 56ca84fabd..3f5f9b21c7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects\n 2b5e6ea62b..6fa3fead5a JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details\n 045ab2e174..729a39244d JY-20842-remove-elastic-search-delete-documents -> origin/JY-20842-remove-elastic-search-delete-documents\n * [new branch] JY-20920-participant-matching-exclusive-mechanism -> origin/JY-20920-participant-matching-exclusive-mechanism\n 177ea29b8d..a873f0cbce master -> origin/master\nMerge made by the 'ort' strategy.\n app/Component/ES/AsyncUpdateElasticSearch.php | 27 +++++----\n app/Component/ES/ElasticSearchDocumentPartialUpdater.php | 48 ---------------\n app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-\n app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++-\n app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-\n app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++------\n app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++-------\n app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 ++++++++--\n app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++\n app/Component/ES/UpdateProcessManager.php | 21 ++++---\n app/Component/MeetingBot/Service/ParticipantMatcher.php | 46 +++++++++++----\n app/Component/ParticipantSpeech/Services/ParticipantAttributionService.php | 4 +-\n app/Component/Settings/AutoScoring/Services/UpdateAutoScoreService.php | 20 +++----\n app/Component/Transcription/Service/StorageService.php | 8 +--\n app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++-\n app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +-\n app/Exceptions/RateLimitException.php | 19 +++++-\n app/Jobs/Crm/MatchActivityCrmData.php | 47 +++++++++++----\n app/Jobs/Middleware/HandleHubspotRateLimit.php | 42 ++++++++++++++\n app/Services/Activity/HubSpot/ProviderResolver.php | 4 +-\n app/Services/Activity/HubSpot/ProviderResolverInterface.php | 2 +-\n app/Services/Activity/HubSpot/Providers/Provider.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderKixie.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderOrum.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderTwilio.php | 2 +-\n app/Services/Activity/HubSpot/Providers/ProviderTwilioFlex.php | 5 +-\n app/Services/Activity/HubSpot/Service.php | 97 ++++++++++++++++++++++++++-----\n app/Services/Crm/Hubspot/Client.php | 132 ++++++++++++++++++++++++++++++++++++++++++\n app/Services/Crm/Hubspot/HubspotClientInterface.php | 15 +++++\n app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php | 21 +++----\n app/Services/Crm/Hubspot/Pagination/PaginationState.php | 2 +-\n app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++-----\n front-end/package.json | 2 +-\n front-end/yarn.lock | 8 +--\n routes/api.php | 7 ++-\n tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 ++++++--\n tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php | 42 --------------\n tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 ++---\n tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++---------------\n tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +--\n tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++-----\n tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 ++++++++++++++++++++\n tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++---\n tests/Unit/Component/MeetingBot/Service/ParticipantMatcherTest.php | 68 +++++++++++++++++++++-\n tests/Unit/Component/Settings/AutoScoring/Services/UpdateAutoScoreServiceTest.php | 86 +++++++++++++++------------\n tests/Unit/Component/Transcription/Service/StorageServiceTest.php | 29 +++-------\n tests/Unit/Exceptions/RateLimitExceptionTest.php | 56 ++++++++++++++++++\n tests/Unit/Jobs/Crm/MatchActivityCrmDataTest.php | 8 +--\n tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php | 151 +++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Activity/HubSpot/ServiceTest.php | 109 ++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Crm/Hubspot/ClientTest.php | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++\n tests/Unit/Services/Crm/Hubspot/Pagination/HubspotPaginationServiceTest.php | 283 +++++++++++++++++++----------------------------------------------------------------------\n 52 files changed, 1632 insertions(+), 631 deletions(-)\n delete mode 100644 app/Component/ES/ElasticSearchDocumentPartialUpdater.php\n create mode 100644 app/Component/ES/QueuePriorityEnum.php\n create mode 100644 app/Jobs/Middleware/HandleHubspotRateLimit.php\n delete mode 100644 tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php\n create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php\n create mode 100644 tests/Unit/Exceptions/RateLimitExceptionTest.php\n create mode 100644 tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git push\nEnumerating objects: 19, done.\nCounting objects: 100% (16/16), done.\nDelta compression using up to 8 threads\nCompressing objects: 100% (9/9), done.\nWriting objects: 100% (9/9), 844 bytes | 844.00 KiB/s, done.\nTotal 9 (delta 6), reused 0 (delta 0), pack-reused 0\nremote: Resolving deltas: 100% (6/6), completed with 5 local objects.\nTo github.com:jiminny/app.git\n c4e163f3e7..f885e531ab JY-20613-allow-owner-role-on-team-setup -> JY-20613-allow-owner-role-on-team-setup\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status\nOn branch JY-20915-add-domain-specific-email-text-relay\nYour branch is up to date with 'origin/JY-20915-add-domain-specific-email-text-relay'.\n\nChanges to be committed:\n (use \"git restore --staged <file>...\" to unstage)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tnew file: tests/Unit/Notifications/Activities/SmsReceivedTest.php\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 76.177 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 97.337 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status\nOn branch JY-20676-delete-report-related-objects\nYour branch is behind 'origin/JY-20676-delete-report-related-objects' by 48 commits, and can be fast-forwarded.\n (use \"git pull\" to update your local branch)\n\nChanges not staged for commit:\n (use \"git add <file>...\" to update what will be committed)\n (use \"git restore <file>...\" to discard changes in working directory)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: .env.local\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: app/Console/Commands/JiminnyDebugCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tmodified: config/logging.php\n\nUntracked files:\n (use \"git add <file>...\" to include in what will be committed)\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.nikilocal\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t.env.other\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tWEBHOOK_FILTERING_IMPLEMENTATION.md\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tapp/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tids.txt\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\tpublic/favicon.ico\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\traw_sql_query.sql\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ttests/Unit/Policies/CanAccessAiReportsTest.php\n\nno changes added to commit (use \"git add\" and/or \"git commit -a\")\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ git pull\nremote: Enumerating objects: 157, done.\nremote: Counting objects: 100% (157/157), done.\nremote: Compressing objects: 100% (42/42), done.\nremote: Total 157 (delta 120), reused 147 (delta 115), pack-reused 0 (from 0)\nReceiving objects: 100% (157/157), 24.95 KiB | 1.78 MiB/s, done.\nResolving deltas: 100% (120/120), completed with 37 local objects.\nFrom github.com:jiminny/app\n 3f5f9b21c7..202ab55be7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects\n 3642c9384c..cf70da243a JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup\n * [new branch] JY-20808-schedule-reset-on-low-queue -> origin/JY-20808-schedule-reset-on-low-queue\n * [new branch] JY-20930-ringcentral-disconnected-crm -> origin/JY-20930-ringcentral-disconnected-crm\n a873f0cbce..71b36decb6 master -> origin/master\nUpdating 56ca84fabd..202ab55be7\nFast-forward\n app/Component/ES/AsyncUpdateElasticSearch.php | 27 ++++++++++------\n app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-\n app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++++-\n app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-\n app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++++++++++++++++----------\n app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++++++++-------------\n app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 +++++++++++++++---\n app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++++++++++++\n app/Component/ES/UpdateProcessManager.php | 21 +++++++------\n app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++++--\n app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +++-\n app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++++++++++++---------\n app/Services/RecallAI/RecallAIService.php | 11 +++++++\n front-end/src/components/shared/SavedSearchModal/__mocks__/saved-searches.js | 1 +\n front-end/src/components/shared/SavedSearchModal/__tests__/SavedSearchModal.spec.js | 60 +++++++++++++++++++++++++++++++----\n front-end/src/components/shared/SavedSearchModal/useSavedSearch.js | 55 ++++++++++++++++++++++----------\n tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +++++++++++---\n tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +++-------\n tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------\n tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +++---\n tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++++++++---------\n tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 +++++++++++++++++++++++++++++++++++++\n tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++++------\n tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++++++++++++++++++++++++++\n 24 files changed, 619 insertions(+), 196 deletions(-)\n create mode 100644 app/Component/ES/QueuePriorityEnum.php\n create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ csfix\ndocker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff \nPHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.\nPHP runtime: 8.3.30\nRunning analysis on 7 cores with 10 files per process.\nParallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!\nLoaded config default from \".php-cs-fixer.dist.php\".\n 5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%\n\n\nFixed 0 of 5690 files in 78.144 seconds, 60.00 MB memory used\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001(2)\nzsh: unknown file attribute: 2\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/vin.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/vin.png \n/Users/lukas/Downloads/Photos-3-001(2)/vin.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/vin.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/dr-lic-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/dr-lic-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/dr-lic-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/dr-lic-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/gtp.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/gtp.png \nWarning: /Users/lukas/Downloads/Photos-3-001(2)/gtp.HEIC not a valid file - skipping\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/gtp.heif --out ~/Downloads/Photos-3-001\\(2\\)/gtp.png\n/Users/lukas/Downloads/Photos-3-001(2)/gtp.heif\n /Users/lukas/Downloads/Photos-3-001(2)/gtp.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-m-f.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-m-f.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\\(2\\)/talon-m-b.HEIC --out ~/Downloads/Photos-3-001\\(2\\)/talon-m-b.png\n/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.HEIC\n /Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.png\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.27027926,"top":1.0,"width":0.11801862,"height":-0.042298436},"on_screen":true,"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.27227393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.3882979,"top":1.0,"width":0.11801862,"height":-0.042298436},"on_screen":true,"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.39029256,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.5063165,"top":1.0,"width":0.11801862,"height":-0.042298436},"on_screen":true,"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.50831115,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.6243351,"top":1.0,"width":0.11801862,"height":-0.042298436},"on_screen":true,"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.6263298,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7287234,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"APP (-zsh)","depth":1,"bounds":{"left":0.49800533,"top":1.0,"width":0.024601065,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
3699539556758104852
|
-1977088783609353508
|
visual_change
|
accessibility
|
NULL
|
Last login: Wed May 20 09:14:49 on ttys007
Poetry Last login: Wed May 20 09:14:49 on ttys007
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ ;xd
docker exec -it docker_lamp_1 bash -c "mv /usr/local/etc/php/conf.d/xdebug.ini ~/xdebug.ini"
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5689/5689 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5689 files in 34.956 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] -9,11 +9,7 @@
use Google\Service\Gmail\MessagePart;
use Google\Service\Gmail\MessagePartHeader;
use Illuminate\Support\Facades\Config;
-use Illuminate\Support\Facades\Queue;
-use Illuminate\Support\Facades\DB;
use Jiminny\Services\Mail\TextRelayService;
-use Jiminny\Models\TextRelay;
-use Jiminny\Jobs\Mailbox\EmailTextRelay;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use Tests\TestCase;
----------- end diff -----------
Fixed 1 of 5689 files in 44.720 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git pull
remote: Enumerating objects: 1400, done.
remote: Counting objects: 100% (775/775), done.
remote: Compressing objects: 100% (116/116), done.
remote: Total 1400 (delta 692), reused 662 (delta 659), pack-reused 625 (from 3)
Receiving objects: 100% (1400/1400), 950.35 KiB | 2.21 MiB/s, done.
Resolving deltas: 100% (878/878), completed with 225 local objects.
From github.com:jiminny/app
d5a447e492..c4e163f3e7 JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup
0b8343d179..32cf0db4fb JY-18091-upgrade-to-php-8-5 -> origin/JY-18091-upgrade-to-php-8-5
56ca84fabd..3f5f9b21c7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects
2b5e6ea62b..6fa3fead5a JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details -> origin/JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details
045ab2e174..729a39244d JY-20842-remove-elastic-search-delete-documents -> origin/JY-20842-remove-elastic-search-delete-documents
* [new branch] JY-20920-participant-matching-exclusive-mechanism -> origin/JY-20920-participant-matching-exclusive-mechanism
177ea29b8d..a873f0cbce master -> origin/master
Merge made by the 'ort' strategy.
app/Component/ES/AsyncUpdateElasticSearch.php | 27 +++++----
app/Component/ES/ElasticSearchDocumentPartialUpdater.php | 48 ---------------
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-
app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++-
app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-
app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++------
app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++-------
app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 ++++++++--
app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++
app/Component/ES/UpdateProcessManager.php | 21 ++++---
app/Component/MeetingBot/Service/ParticipantMatcher.php | 46 +++++++++++----
app/Component/ParticipantSpeech/Services/ParticipantAttributionService.php | 4 +-
app/Component/Settings/AutoScoring/Services/UpdateAutoScoreService.php | 20 +++----
app/Component/Transcription/Service/StorageService.php | 8 +--
app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++-
app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +-
app/Exceptions/RateLimitException.php | 19 +++++-
app/Jobs/Crm/MatchActivityCrmData.php | 47 +++++++++++----
app/Jobs/Middleware/HandleHubspotRateLimit.php | 42 ++++++++++++++
app/Services/Activity/HubSpot/ProviderResolver.php | 4 +-
app/Services/Activity/HubSpot/ProviderResolverInterface.php | 2 +-
app/Services/Activity/HubSpot/Providers/Provider.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderKixie.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderOrum.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderTwilio.php | 2 +-
app/Services/Activity/HubSpot/Providers/ProviderTwilioFlex.php | 5 +-
app/Services/Activity/HubSpot/Service.php | 97 ++++++++++++++++++++++++++-----
app/Services/Crm/Hubspot/Client.php | 132 ++++++++++++++++++++++++++++++++++++++++++
app/Services/Crm/Hubspot/HubspotClientInterface.php | 15 +++++
app/Services/Crm/Hubspot/Pagination/HubspotPaginationService.php | 21 +++----
app/Services/Crm/Hubspot/Pagination/PaginationState.php | 2 +-
app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++-----
front-end/package.json | 2 +-
front-end/yarn.lock | 8 +--
routes/api.php | 7 ++-
tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 ++++++--
tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php | 42 --------------
tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 ++---
tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++---------------
tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +--
tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++-----
tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 ++++++++++++++++++++
tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++---
tests/Unit/Component/MeetingBot/Service/ParticipantMatcherTest.php | 68 +++++++++++++++++++++-
tests/Unit/Component/Settings/AutoScoring/Services/UpdateAutoScoreServiceTest.php | 86 +++++++++++++++------------
tests/Unit/Component/Transcription/Service/StorageServiceTest.php | 29 +++-------
tests/Unit/Exceptions/RateLimitExceptionTest.php | 56 ++++++++++++++++++
tests/Unit/Jobs/Crm/MatchActivityCrmDataTest.php | 8 +--
tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php | 151 +++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Services/Activity/HubSpot/ServiceTest.php | 109 ++++++++++++++++++++++++++++++++++
tests/Unit/Services/Crm/Hubspot/ClientTest.php | 250 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
tests/Unit/Services/Crm/Hubspot/Pagination/HubspotPaginationServiceTest.php | 283 +++++++++++++++++++----------------------------------------------------------------------
52 files changed, 1632 insertions(+), 631 deletions(-)
delete mode 100644 app/Component/ES/ElasticSearchDocumentPartialUpdater.php
create mode 100644 app/Component/ES/QueuePriorityEnum.php
create mode 100644 app/Jobs/Middleware/HandleHubspotRateLimit.php
delete mode 100644 tests/Unit/Component/ES/ElasticSearchDocumentPartialUpdaterTest.php
create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php
create mode 100644 tests/Unit/Exceptions/RateLimitExceptionTest.php
create mode 100644 tests/Unit/Jobs/Middleware/HandleHubspotRateLimitTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git push
Enumerating objects: 19, done.
Counting objects: 100% (16/16), done.
Delta compression using up to 8 threads
Compressing objects: 100% (9/9), done.
Writing objects: 100% (9/9), 844 bytes | 844.00 KiB/s, done.
Total 9 (delta 6), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (6/6), completed with 5 local objects.
To github.com:jiminny/app.git
c4e163f3e7..f885e531ab JY-20613-allow-owner-role-on-team-setup -> JY-20613-allow-owner-role-on-team-setup
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status
On branch JY-20915-add-domain-specific-email-text-relay
Your branch is up to date with 'origin/JY-20915-add-domain-specific-email-text-relay'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: tests/Unit/Notifications/Activities/SmsReceivedTest.php
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5690 files in 76.177 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20613-allow-owner-role-on-team-setup) $ git status
On branch JY-20676-delete-report-related-objects
Your branch is behind 'origin/JY-20676-delete-report-related-objects' by 48 commits, and can be fast-forwarded.
(use "git pull" to update your local branch)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: .env.local
modified: app/Console/Commands/JiminnyDebugCommand.php
modified: config/logging.php
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env.nikilocal
.env.other
WEBHOOK_FILTERING_IMPLEMENTATION.md
app/Console/Commands/Crm/Hubspot/SimulateWebhooksCommand.php
app/Console/Commands/Reports/CreateMockAskJiminnyReportResultCommand.php
ids.txt
public/favicon.ico
raw_sql_query.sql
tests/Unit/Policies/CanAccessAiReportsTest.php
no changes added to commit (use "git add" and/or "git commit -a")
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ git pull
remote: Enumerating objects: 157, done.
remote: Counting objects: 100% (157/157), done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 157 (delta 120), reused 147 (delta 115), pack-reused 0 (from 0)
Receiving objects: 100% (157/157), 24.95 KiB | 1.78 MiB/s, done.
Resolving deltas: 100% (120/120), completed with 37 local objects.
From github.com:jiminny/app
3f5f9b21c7..202ab55be7 JY-20676-delete-report-related-objects -> origin/JY-20676-delete-report-related-objects
3642c9384c..cf70da243a JY-20613-allow-owner-role-on-team-setup -> origin/JY-20613-allow-owner-role-on-team-setup
* [new branch] JY-20808-schedule-reset-on-low-queue -> origin/JY-20808-schedule-reset-on-low-queue
* [new branch] JY-20930-ringcentral-disconnected-crm -> origin/JY-20930-ringcentral-disconnected-crm
a873f0cbce..71b36decb6 master -> origin/master
Updating 56ca84fabd..202ab55be7
Fast-forward
app/Component/ES/AsyncUpdateElasticSearch.php | 27 ++++++++++------
app/Component/ES/Listeners/UpdateMultipleTargetsListener.php | 3 +-
app/Component/ES/Listeners/UpdateSingleTargetListener.php | 10 +++++-
app/Component/ES/Processor/Actions/UpsertDocumentsAction.php | 3 +-
app/Component/ES/Processor/DTOs/SelectionList.php | 71 +++++++++++++++++++++++++++++++----------
app/Component/ES/Processor/TargetEntitiesSelector.php | 47 ++++++++++++++-------------
app/Component/ES/Processor/Traits/SelectEntityListTrait.php | 31 +++++++++++++++---
app/Component/ES/QueuePriorityEnum.php | 40 +++++++++++++++++++++++
app/Component/ES/UpdateProcessManager.php | 21 +++++++------
app/Console/Commands/Elasticsearch/AsyncUpdateEsEntities.php | 12 +++++--
app/Console/Commands/Elasticsearch/ResetAsyncElasticSearchCommand.php | 6 +++-
app/Services/RecallAI/Commands/ScheduleBotCommand.php | 53 ++++++++++++++++++++++---------
app/Services/RecallAI/RecallAIService.php | 11 +++++++
front-end/src/components/shared/SavedSearchModal/__mocks__/saved-searches.js | 1 +
front-end/src/components/shared/SavedSearchModal/__tests__/SavedSearchModal.spec.js | 60 +++++++++++++++++++++++++++++++----
front-end/src/components/shared/SavedSearchModal/useSavedSearch.js | 55 ++++++++++++++++++++++----------
tests/Unit/Component/ES/AsyncUpdateElasticSearchTest.php | 24 +++++++++++---
tests/Unit/Component/ES/Processor/BatchStatusManagerTest.php | 16 +++-------
tests/Unit/Component/ES/Processor/DTOs/SelectionListTest.php | 150 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------
tests/Unit/Component/ES/Processor/TargetEntitiesSelectorTest.php | 9 +++---
tests/Unit/Component/ES/Processor/Traits/SelectEntityListTraitTest.php | 38 +++++++++++++---------
tests/Unit/Component/ES/QueuePriorityEnumTest.php | 63 +++++++++++++++++++++++++++++++++++++
tests/Unit/Component/ES/UpdateProcessManagerTest.php | 20 ++++++------
tests/Unit/Services/RecallAI/RecallAIServiceTest.php | 44 ++++++++++++++++++++++++++
24 files changed, 619 insertions(+), 196 deletions(-)
create mode 100644 app/Component/ES/QueuePriorityEnum.php
create mode 100644 tests/Unit/Component/ES/QueuePriorityEnumTest.php
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ csfix
docker exec -it docker_lamp_1 ./vendor/bin/php-cs-fixer fix --config=.php-cs-fixer.dist.php -v --using-cache=no --diff
PHP CS Fixer 3.87.1 Alexander by Fabien Potencier, Dariusz Ruminski and contributors.
PHP runtime: 8.3.30
Running analysis on 7 cores with 10 files per process.
Parallel runner is an experimental feature and may be unstable, use it at your own risk. Feedback highly appreciated!
Loaded config default from ".php-cs-fixer.dist.php".
5690/5690 [▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓] 100%
Fixed 0 of 5690 files in 78.144 seconds, 60.00 MB memory used
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-f.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-b.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/vin.HEIC --out ~/Downloads/Photos-3-001\(2\)/vin.png
/Users/lukas/Downloads/Photos-3-001(2)/vin.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/vin.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/dr-lic-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/dr-lic-f.png
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/dr-lic-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/dr-lic-b.png
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/dr-lic-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/gtp.HEIC --out ~/Downloads/Photos-3-001\(2\)/gtp.png
Warning: /Users/lukas/Downloads/Photos-3-001(2)/gtp.HEIC not a valid file - skipping
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/gtp.heif --out ~/Downloads/Photos-3-001\(2\)/gtp.png
/Users/lukas/Downloads/Photos-3-001(2)/gtp.heif
/Users/lukas/Downloads/Photos-3-001(2)/gtp.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-m-f.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-m-f.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-f.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $ sips -s format png ~/Downloads/Photos-3-001\(2\)/talon-m-b.HEIC --out ~/Downloads/Photos-3-001\(2\)/talon-m-b.png
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.HEIC
/Users/lukas/Downloads/Photos-3-001(2)/talon-m-b.png
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20676-delete-report-related-objects) $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
screenpipe"
Close Tab
APP (-zsh)
Close Tab
⌥⌘1
APP (-zsh)...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
68848
|
2465
|
0
|
2026-05-22T07:23:23.529505+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434603529_m1.jpg...
|
iTerm2
|
hostname
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
whisper_init_state: kv pad size = 2.36 MB
whi whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:29:39.871941Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:29:57.124481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6230978081173998021, trigger=click)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T16:31:39.867243Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:31:39.867723Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T16:31:43.858744Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12459 samples)
2026-05-21T16:31:44.136933Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 121.2ms elapsed (expected 5.3ms) → inserting 115.9ms silence (11124 samples)
2026-05-21T16:31:47.490407Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 81.4ms elapsed (expected 5.3ms) → inserting 76.0ms silence (7298 samples)
2026-05-21T16:34:14.189944Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=50 elapsed=3.166785416s
2026-05-21T16:34:14.191317Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames
2026-05-21T16:34:15.588973Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 2.4MB → 0.2MB (12.8x), 17 JPEGs deleted
2026-05-21T16:34:20.903782Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.7MB → 6.3MB (1.2x), 31 JPEGs deleted
2026-05-21T16:35:45.722571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6179899815906282118, trigger=click)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T16:39:22.363112Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:39:22.369205Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:39:24.617099Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:39:26.714508Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=112 elapsed=5.801488041s
2026-05-21T16:39:26.714969Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-05-21T16:39:29.362614Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 6.0MB → 0.2MB (26.4x), 42 JPEGs deleted
2026-05-21T16:39:42.257806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.7MB → 8.4MB (1.5x), 68 JPEGs deleted
2026-05-21T16:39:47.860464Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:39:50.893692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:40:03.022676Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:40:06.011601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:41:24.657491Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:41:24.658488Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T16:41:52.595621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:43:47.910446Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:44:42.833951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames
2026-05-21T16:44:44.888063Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.6MB → 0.2MB (20.4x), 32 JPEGs deleted
2026-05-21T16:44:49.576083Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.0MB → 3.7MB (1.9x), 38 JPEGs deleted
2026-05-21T16:45:54.178431Z INFO screenpipe_db::db: created new speaker id=54 (no existing match within threshold)
2026-05-21T16:46:27.250379Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T16:47:00.518699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:31.590299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:34.531981Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:42.221193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:45.223364Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:45.231252Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:46.719785Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:49:46.720147Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:54:58.885113Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=29 elapsed=3.561857292s
2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames
2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted
2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted
2026-05-21T16:55:16.793607Z WARN sqlx::query: summary="BEGIN IMMEDIATE" db.statement="" rows_affected=12 rows_returned=0 elapsed=1.050168334s
2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)
2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)
2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:10:22.001302Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=72 elapsed=1.959353916s
2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames
2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted
2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted
2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)
2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:15:29.064324Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=75 elapsed=1.019501s
2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames
2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted
2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:20:39.216934Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=78 elapsed=3.565377292s
2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames
2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted
2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)
2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)
2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)
2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted
2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)
2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:30:52.674618Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=29 elapsed=3.106591542s
2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames
2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted
2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames
2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted
2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames
2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted
2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T17:46:01.255420Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=2 elapsed=3.148277875s
2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:56:04.139385Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=0 elapsed=2.610081541s
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1
2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2
2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)
2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)
2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)
2026-05-21T17:56:54.133969Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=108 elapsed=9.299682667s
2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)
2026-05-21T17:57:46.799160Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=111 elapsed=1.611723958s
2026-05-21T17:58:16.568417Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=111 elapsed=1.722299583s
2026-05-21T17:58:37.239498Z WARN sqlx::query: summary="SELECT id...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"whisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:29:39.871941Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:29:57.124481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6230978081173998021, trigger=click)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:31:39.867243Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:31:39.867723Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:31:43.858744Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12459 samples)\n2026-05-21T16:31:44.136933Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 121.2ms elapsed (expected 5.3ms) → inserting 115.9ms silence (11124 samples)\n2026-05-21T16:31:47.490407Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 81.4ms elapsed (expected 5.3ms) → inserting 76.0ms silence (7298 samples)\n2026-05-21T16:34:14.189944Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=50 elapsed=3.166785416s\n2026-05-21T16:34:14.191317Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-05-21T16:34:15.588973Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 2.4MB → 0.2MB (12.8x), 17 JPEGs deleted\n2026-05-21T16:34:20.903782Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.7MB → 6.3MB (1.2x), 31 JPEGs deleted\n2026-05-21T16:35:45.722571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6179899815906282118, trigger=click)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T16:39:22.363112Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:39:22.369205Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:39:24.617099Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:39:26.714508Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=112 elapsed=5.801488041s\n2026-05-21T16:39:26.714969Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames\n2026-05-21T16:39:29.362614Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 6.0MB → 0.2MB (26.4x), 42 JPEGs deleted\n2026-05-21T16:39:42.257806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.7MB → 8.4MB (1.5x), 68 JPEGs deleted\n2026-05-21T16:39:47.860464Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:39:50.893692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:40:03.022676Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:40:06.011601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:41:24.657491Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:41:24.658488Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T16:41:52.595621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:43:47.910446Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:44:42.833951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T16:44:44.888063Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.6MB → 0.2MB (20.4x), 32 JPEGs deleted\n2026-05-21T16:44:49.576083Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.0MB → 3.7MB (1.9x), 38 JPEGs deleted\n2026-05-21T16:45:54.178431Z INFO screenpipe_db::db: created new speaker id=54 (no existing match within threshold)\n2026-05-21T16:46:27.250379Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T16:47:00.518699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:31.590299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:34.531981Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:42.221193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:45.223364Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:45.231252Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:46.719785Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:49:46.720147Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)","depth":4,"on_screen":true,"value":"whisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:29:39.871941Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:29:57.124481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6230978081173998021, trigger=click)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:31:39.867243Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:31:39.867723Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:31:43.858744Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12459 samples)\n2026-05-21T16:31:44.136933Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 121.2ms elapsed (expected 5.3ms) → inserting 115.9ms silence (11124 samples)\n2026-05-21T16:31:47.490407Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 81.4ms elapsed (expected 5.3ms) → inserting 76.0ms silence (7298 samples)\n2026-05-21T16:34:14.189944Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=50 elapsed=3.166785416s\n2026-05-21T16:34:14.191317Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-05-21T16:34:15.588973Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 2.4MB → 0.2MB (12.8x), 17 JPEGs deleted\n2026-05-21T16:34:20.903782Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.7MB → 6.3MB (1.2x), 31 JPEGs deleted\n2026-05-21T16:35:45.722571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6179899815906282118, trigger=click)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T16:39:22.363112Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:39:22.369205Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:39:24.617099Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:39:26.714508Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=112 elapsed=5.801488041s\n2026-05-21T16:39:26.714969Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames\n2026-05-21T16:39:29.362614Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 6.0MB → 0.2MB (26.4x), 42 JPEGs deleted\n2026-05-21T16:39:42.257806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.7MB → 8.4MB (1.5x), 68 JPEGs deleted\n2026-05-21T16:39:47.860464Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:39:50.893692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:40:03.022676Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:40:06.011601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:41:24.657491Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:41:24.658488Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T16:41:52.595621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:43:47.910446Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:44:42.833951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T16:44:44.888063Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.6MB → 0.2MB (20.4x), 32 JPEGs deleted\n2026-05-21T16:44:49.576083Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.0MB → 3.7MB (1.9x), 38 JPEGs deleted\n2026-05-21T16:45:54.178431Z INFO screenpipe_db::db: created new speaker id=54 (no existing match within threshold)\n2026-05-21T16:46:27.250379Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T16:47:00.518699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:31.590299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:34.531981Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:42.221193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:45.223364Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:45.231252Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:46.719785Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:49:46.720147Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"hostname","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.46944445,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
3866953042066539593
|
-6005196301964347935
|
manual
|
accessibility
|
NULL
|
whisper_init_state: kv pad size = 2.36 MB
whi whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:29:39.871941Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:29:57.124481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6230978081173998021, trigger=click)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T16:31:39.867243Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:31:39.867723Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T16:31:43.858744Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12459 samples)
2026-05-21T16:31:44.136933Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 121.2ms elapsed (expected 5.3ms) → inserting 115.9ms silence (11124 samples)
2026-05-21T16:31:47.490407Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 81.4ms elapsed (expected 5.3ms) → inserting 76.0ms silence (7298 samples)
2026-05-21T16:34:14.189944Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=50 elapsed=3.166785416s
2026-05-21T16:34:14.191317Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames
2026-05-21T16:34:15.588973Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 2.4MB → 0.2MB (12.8x), 17 JPEGs deleted
2026-05-21T16:34:20.903782Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.7MB → 6.3MB (1.2x), 31 JPEGs deleted
2026-05-21T16:35:45.722571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6179899815906282118, trigger=click)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T16:39:22.363112Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:39:22.369205Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:39:24.617099Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:39:26.714508Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=112 elapsed=5.801488041s
2026-05-21T16:39:26.714969Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-05-21T16:39:29.362614Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 6.0MB → 0.2MB (26.4x), 42 JPEGs deleted
2026-05-21T16:39:42.257806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.7MB → 8.4MB (1.5x), 68 JPEGs deleted
2026-05-21T16:39:47.860464Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:39:50.893692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:40:03.022676Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:40:06.011601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:41:24.657491Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:41:24.658488Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T16:41:52.595621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:43:47.910446Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:44:42.833951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames
2026-05-21T16:44:44.888063Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.6MB → 0.2MB (20.4x), 32 JPEGs deleted
2026-05-21T16:44:49.576083Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.0MB → 3.7MB (1.9x), 38 JPEGs deleted
2026-05-21T16:45:54.178431Z INFO screenpipe_db::db: created new speaker id=54 (no existing match within threshold)
2026-05-21T16:46:27.250379Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T16:47:00.518699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:31.590299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:34.531981Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:42.221193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:45.223364Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:45.231252Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:46.719785Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:49:46.720147Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:54:58.885113Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=29 elapsed=3.561857292s
2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames
2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted
2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted
2026-05-21T16:55:16.793607Z WARN sqlx::query: summary="BEGIN IMMEDIATE" db.statement="" rows_affected=12 rows_returned=0 elapsed=1.050168334s
2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)
2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)
2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:10:22.001302Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=72 elapsed=1.959353916s
2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames
2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted
2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted
2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)
2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:15:29.064324Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=75 elapsed=1.019501s
2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames
2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted
2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:20:39.216934Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=78 elapsed=3.565377292s
2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames
2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted
2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)
2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)
2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)
2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted
2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)
2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:30:52.674618Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=29 elapsed=3.106591542s
2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames
2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted
2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames
2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted
2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames
2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted
2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T17:46:01.255420Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=2 elapsed=3.148277875s
2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:56:04.139385Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=0 elapsed=2.610081541s
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1
2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2
2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)
2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)
2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)
2026-05-21T17:56:54.133969Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=108 elapsed=9.299682667s
2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)
2026-05-21T17:57:46.799160Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=111 elapsed=1.611723958s
2026-05-21T17:58:16.568417Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=111 elapsed=1.722299583s
2026-05-21T17:58:37.239498Z WARN sqlx::query: summary="SELECT id...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
68849
|
2466
|
0
|
2026-05-22T07:23:23.581045+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434603581_m2.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
whisper_init_state: compute buffer (conv) = 14 whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:29:39.871941Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:29:57.124481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6230978081173998021, trigger=click)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T16:31:39.867243Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:31:39.867723Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T16:31:43.858744Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12459 samples)
2026-05-21T16:31:44.136933Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 121.2ms elapsed (expected 5.3ms) → inserting 115.9ms silence (11124 samples)
2026-05-21T16:31:47.490407Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 81.4ms elapsed (expected 5.3ms) → inserting 76.0ms silence (7298 samples)
2026-05-21T16:34:14.189944Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=50 elapsed=3.166785416s
2026-05-21T16:34:14.191317Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames
2026-05-21T16:34:15.588973Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 2.4MB → 0.2MB (12.8x), 17 JPEGs deleted
2026-05-21T16:34:20.903782Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.7MB → 6.3MB (1.2x), 31 JPEGs deleted
2026-05-21T16:35:45.722571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6179899815906282118, trigger=click)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T16:39:22.363112Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:39:22.369205Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:39:24.617099Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:39:26.714508Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=112 elapsed=5.801488041s
2026-05-21T16:39:26.714969Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-05-21T16:39:29.362614Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 6.0MB → 0.2MB (26.4x), 42 JPEGs deleted
2026-05-21T16:39:42.257806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.7MB → 8.4MB (1.5x), 68 JPEGs deleted
2026-05-21T16:39:47.860464Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:39:50.893692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:40:03.022676Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:40:06.011601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:41:24.657491Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:41:24.658488Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T16:41:52.595621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:43:47.910446Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:44:42.833951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames
2026-05-21T16:44:44.888063Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.6MB → 0.2MB (20.4x), 32 JPEGs deleted
2026-05-21T16:44:49.576083Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.0MB → 3.7MB (1.9x), 38 JPEGs deleted
2026-05-21T16:45:54.178431Z INFO screenpipe_db::db: created new speaker id=54 (no existing match within threshold)
2026-05-21T16:46:27.250379Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T16:47:00.518699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:31.590299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:34.531981Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:42.221193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:45.223364Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:45.231252Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:46.719785Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:49:46.720147Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:54:58.885113Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=29 elapsed=3.561857292s
2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames
2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted
2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted
2026-05-21T16:55:16.793607Z WARN sqlx::query: summary="BEGIN IMMEDIATE" db.statement="" rows_affected=12 rows_returned=0 elapsed=1.050168334s
2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)
2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)
2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:10:22.001302Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=72 elapsed=1.959353916s
2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames
2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted
2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted
2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)
2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:15:29.064324Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=75 elapsed=1.019501s
2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames
2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted
2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:20:39.216934Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=78 elapsed=3.565377292s
2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames
2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted
2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)
2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)
2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)
2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted
2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)
2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:30:52.674618Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=29 elapsed=3.106591542s
2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames
2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted
2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames
2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted
2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames
2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted
2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T17:46:01.255420Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=2 elapsed=3.148277875s
2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:56:04.139385Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=0 elapsed=2.610081541s
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1
2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2
2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)
2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)
2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)
2026-05-21T17:56:54.133969Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=108 elapsed=9.299682667s
2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)
2026-05-21T17:57:46.799160Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=111 elapsed=1.611723958s
2026-05-21T17:58:16.568417Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=111 elapsed=1.722299583s
2026-05-21T17:58:37.239498Z WARN sqlx::query: summary="SELECT id, name, metadata …" db.statement="\n\nSELECT\...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"whisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:29:39.871941Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:29:57.124481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6230978081173998021, trigger=click)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:31:39.867243Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:31:39.867723Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:31:43.858744Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12459 samples)\n2026-05-21T16:31:44.136933Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 121.2ms elapsed (expected 5.3ms) → inserting 115.9ms silence (11124 samples)\n2026-05-21T16:31:47.490407Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 81.4ms elapsed (expected 5.3ms) → inserting 76.0ms silence (7298 samples)\n2026-05-21T16:34:14.189944Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=50 elapsed=3.166785416s\n2026-05-21T16:34:14.191317Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-05-21T16:34:15.588973Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 2.4MB → 0.2MB (12.8x), 17 JPEGs deleted\n2026-05-21T16:34:20.903782Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.7MB → 6.3MB (1.2x), 31 JPEGs deleted\n2026-05-21T16:35:45.722571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6179899815906282118, trigger=click)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T16:39:22.363112Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:39:22.369205Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:39:24.617099Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:39:26.714508Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=112 elapsed=5.801488041s\n2026-05-21T16:39:26.714969Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames\n2026-05-21T16:39:29.362614Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 6.0MB → 0.2MB (26.4x), 42 JPEGs deleted\n2026-05-21T16:39:42.257806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.7MB → 8.4MB (1.5x), 68 JPEGs deleted\n2026-05-21T16:39:47.860464Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:39:50.893692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:40:03.022676Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:40:06.011601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:41:24.657491Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:41:24.658488Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T16:41:52.595621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:43:47.910446Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:44:42.833951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T16:44:44.888063Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.6MB → 0.2MB (20.4x), 32 JPEGs deleted\n2026-05-21T16:44:49.576083Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.0MB → 3.7MB (1.9x), 38 JPEGs deleted\n2026-05-21T16:45:54.178431Z INFO screenpipe_db::db: created new speaker id=54 (no existing match within threshold)\n2026-05-21T16:46:27.250379Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T16:47:00.518699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:31.590299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:34.531981Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:42.221193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:45.223364Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:45.231252Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:46.719785Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:49:46.720147Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)","depth":4,"on_screen":true,"value":"whisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:29:39.871941Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:29:57.124481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6230978081173998021, trigger=click)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:31:39.867243Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:31:39.867723Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:31:43.858744Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12459 samples)\n2026-05-21T16:31:44.136933Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 121.2ms elapsed (expected 5.3ms) → inserting 115.9ms silence (11124 samples)\n2026-05-21T16:31:47.490407Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 81.4ms elapsed (expected 5.3ms) → inserting 76.0ms silence (7298 samples)\n2026-05-21T16:34:14.189944Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=50 elapsed=3.166785416s\n2026-05-21T16:34:14.191317Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-05-21T16:34:15.588973Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 2.4MB → 0.2MB (12.8x), 17 JPEGs deleted\n2026-05-21T16:34:20.903782Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.7MB → 6.3MB (1.2x), 31 JPEGs deleted\n2026-05-21T16:35:45.722571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6179899815906282118, trigger=click)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T16:39:22.363112Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:39:22.369205Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:39:24.617099Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:39:26.714508Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=112 elapsed=5.801488041s\n2026-05-21T16:39:26.714969Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames\n2026-05-21T16:39:29.362614Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 6.0MB → 0.2MB (26.4x), 42 JPEGs deleted\n2026-05-21T16:39:42.257806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.7MB → 8.4MB (1.5x), 68 JPEGs deleted\n2026-05-21T16:39:47.860464Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:39:50.893692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:40:03.022676Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:40:06.011601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:41:24.657491Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:41:24.658488Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T16:41:52.595621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:43:47.910446Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:44:42.833951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T16:44:44.888063Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.6MB → 0.2MB (20.4x), 32 JPEGs deleted\n2026-05-21T16:44:49.576083Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.0MB → 3.7MB (1.9x), 38 JPEGs deleted\n2026-05-21T16:45:54.178431Z INFO screenpipe_db::db: created new speaker id=54 (no existing match within threshold)\n2026-05-21T16:46:27.250379Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T16:47:00.518699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:31.590299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:34.531981Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:42.221193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:45.223364Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:45.231252Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:46.719785Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:49:46.720147Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.26894948,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.27094415,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.34773937,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.34973404,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.42652926,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.42852393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.50515294,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.5071476,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5837766,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.58577126,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.66240025,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.664395,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.4950133,"top":1.0,"width":0.027925532,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
-6195183921668000762
|
-6005196301964347935
|
manual
|
accessibility
|
NULL
|
whisper_init_state: compute buffer (conv) = 14 whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:29:39.871941Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:29:57.124481Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6230978081173998021, trigger=click)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T16:31:39.867243Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:31:39.867723Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T16:31:43.858744Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12459 samples)
2026-05-21T16:31:44.136933Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 121.2ms elapsed (expected 5.3ms) → inserting 115.9ms silence (11124 samples)
2026-05-21T16:31:47.490407Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 81.4ms elapsed (expected 5.3ms) → inserting 76.0ms silence (7298 samples)
2026-05-21T16:34:14.189944Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=50 elapsed=3.166785416s
2026-05-21T16:34:14.191317Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames
2026-05-21T16:34:15.588973Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 2.4MB → 0.2MB (12.8x), 17 JPEGs deleted
2026-05-21T16:34:20.903782Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.7MB → 6.3MB (1.2x), 31 JPEGs deleted
2026-05-21T16:35:45.722571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6179899815906282118, trigger=click)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T16:39:22.363112Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:39:22.369205Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:39:24.617099Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:39:26.714508Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=112 elapsed=5.801488041s
2026-05-21T16:39:26.714969Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-05-21T16:39:29.362614Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 6.0MB → 0.2MB (26.4x), 42 JPEGs deleted
2026-05-21T16:39:42.257806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.7MB → 8.4MB (1.5x), 68 JPEGs deleted
2026-05-21T16:39:47.860464Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:39:50.893692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:40:03.022676Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:40:06.011601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:41:24.657491Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:41:24.658488Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T16:41:52.595621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:43:47.910446Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:44:42.833951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames
2026-05-21T16:44:44.888063Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.6MB → 0.2MB (20.4x), 32 JPEGs deleted
2026-05-21T16:44:49.576083Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.0MB → 3.7MB (1.9x), 38 JPEGs deleted
2026-05-21T16:45:54.178431Z INFO screenpipe_db::db: created new speaker id=54 (no existing match within threshold)
2026-05-21T16:46:27.250379Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T16:47:00.518699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:31.590299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:34.531981Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:42.221193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:45.223364Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:45.231252Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:46.719785Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:49:46.720147Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:54:58.885113Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=29 elapsed=3.561857292s
2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames
2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted
2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted
2026-05-21T16:55:16.793607Z WARN sqlx::query: summary="BEGIN IMMEDIATE" db.statement="" rows_affected=12 rows_returned=0 elapsed=1.050168334s
2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)
2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)
2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:10:22.001302Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=72 elapsed=1.959353916s
2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames
2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted
2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted
2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)
2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:15:29.064324Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=75 elapsed=1.019501s
2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames
2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted
2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:20:39.216934Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=78 elapsed=3.565377292s
2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames
2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted
2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)
2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)
2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)
2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted
2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)
2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:30:52.674618Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=29 elapsed=3.106591542s
2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames
2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted
2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames
2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted
2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames
2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted
2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T17:46:01.255420Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=2 elapsed=3.148277875s
2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:56:04.139385Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=0 elapsed=2.610081541s
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1
2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2
2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)
2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)
2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)
2026-05-21T17:56:54.133969Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=108 elapsed=9.299682667s
2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)
2026-05-21T17:57:46.799160Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=111 elapsed=1.611723958s
2026-05-21T17:58:16.568417Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=111 elapsed=1.722299583s
2026-05-21T17:58:37.239498Z WARN sqlx::query: summary="SELECT id, name, metadata …" db.statement="\n\nSELECT\...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
68850
|
2465
|
1
|
2026-05-22T07:23:29.553908+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434609553_m1.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
whisper_backend_init_gpu: device 0: Metal (type: 1 whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T16:31:43.858744Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12459 samples)
2026-05-21T16:31:44.136933Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 121.2ms elapsed (expected 5.3ms) → inserting 115.9ms silence (11124 samples)
2026-05-21T16:31:47.490407Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 81.4ms elapsed (expected 5.3ms) → inserting 76.0ms silence (7298 samples)
2026-05-21T16:34:14.189944Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=50 elapsed=3.166785416s
2026-05-21T16:34:14.191317Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames
2026-05-21T16:34:15.588973Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 2.4MB → 0.2MB (12.8x), 17 JPEGs deleted
2026-05-21T16:34:20.903782Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.7MB → 6.3MB (1.2x), 31 JPEGs deleted
2026-05-21T16:35:45.722571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6179899815906282118, trigger=click)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T16:39:22.363112Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:39:22.369205Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:39:24.617099Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:39:26.714508Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=112 elapsed=5.801488041s
2026-05-21T16:39:26.714969Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-05-21T16:39:29.362614Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 6.0MB → 0.2MB (26.4x), 42 JPEGs deleted
2026-05-21T16:39:42.257806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.7MB → 8.4MB (1.5x), 68 JPEGs deleted
2026-05-21T16:39:47.860464Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:39:50.893692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:40:03.022676Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:40:06.011601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:41:24.657491Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:41:24.658488Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T16:41:52.595621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:43:47.910446Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:44:42.833951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames
2026-05-21T16:44:44.888063Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.6MB → 0.2MB (20.4x), 32 JPEGs deleted
2026-05-21T16:44:49.576083Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.0MB → 3.7MB (1.9x), 38 JPEGs deleted
2026-05-21T16:45:54.178431Z INFO screenpipe_db::db: created new speaker id=54 (no existing match within threshold)
2026-05-21T16:46:27.250379Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T16:47:00.518699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:31.590299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:34.531981Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:42.221193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:45.223364Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:45.231252Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:46.719785Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:49:46.720147Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:54:58.885113Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=29 elapsed=3.561857292s
2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames
2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted
2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted
2026-05-21T16:55:16.793607Z WARN sqlx::query: summary="BEGIN IMMEDIATE" db.statement="" rows_affected=12 rows_returned=0 elapsed=1.050168334s
2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)
2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)
2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:10:22.001302Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=72 elapsed=1.959353916s
2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames
2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted
2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted
2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)
2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:15:29.064324Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=75 elapsed=1.019501s
2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames
2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted
2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:20:39.216934Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=78 elapsed=3.565377292s
2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames
2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted
2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)
2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)
2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)
2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted
2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)
2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:30:52.674618Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=29 elapsed=3.106591542s
2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames
2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted
2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames
2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted
2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames
2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted
2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T17:46:01.255420Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=2 elapsed=3.148277875s
2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:56:04.139385Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=0 elapsed=2.610081541s
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1
2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2
2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)
2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)
2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)
2026-05-21T17:56:54.133969Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=108 elapsed=9.299682667s
2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)
2026-05-21T17:57:46.799160Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=111 elapsed=1.611723958s
2026-05-21T17:58:16.568417Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=111 elapsed=1.722299583s
2026-05-21T17:58:37.239498Z WARN sqlx::query: summary="SELECT id, name, metadata …" db.statement="\n\nSELECT\n id,\n name,\n metadata\nFROM\n speakers\nWHERE\n id = (\n SELECT\n speaker_id\n FROM\n speaker_embeddings\n WHERE\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\n ORDER BY\n vec_distance_cosine(embedding, vec_f32(?1))\n LIMIT\n 1\n )\n" rows_affected=1 rows_returned=1 elapsed=2.020183542s
2026-05-21T18:01:07.293183Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=0 elapsed=3.141064292s
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)
2026-05-21T18:02:21.820121Z INFO screenpipe_engine::even...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"whisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:31:43.858744Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12459 samples)\n2026-05-21T16:31:44.136933Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 121.2ms elapsed (expected 5.3ms) → inserting 115.9ms silence (11124 samples)\n2026-05-21T16:31:47.490407Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 81.4ms elapsed (expected 5.3ms) → inserting 76.0ms silence (7298 samples)\n2026-05-21T16:34:14.189944Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=50 elapsed=3.166785416s\n2026-05-21T16:34:14.191317Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-05-21T16:34:15.588973Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 2.4MB → 0.2MB (12.8x), 17 JPEGs deleted\n2026-05-21T16:34:20.903782Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.7MB → 6.3MB (1.2x), 31 JPEGs deleted\n2026-05-21T16:35:45.722571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6179899815906282118, trigger=click)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T16:39:22.363112Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:39:22.369205Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:39:24.617099Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:39:26.714508Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=112 elapsed=5.801488041s\n2026-05-21T16:39:26.714969Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames\n2026-05-21T16:39:29.362614Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 6.0MB → 0.2MB (26.4x), 42 JPEGs deleted\n2026-05-21T16:39:42.257806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.7MB → 8.4MB (1.5x), 68 JPEGs deleted\n2026-05-21T16:39:47.860464Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:39:50.893692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:40:03.022676Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:40:06.011601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:41:24.657491Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:41:24.658488Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T16:41:52.595621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:43:47.910446Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:44:42.833951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T16:44:44.888063Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.6MB → 0.2MB (20.4x), 32 JPEGs deleted\n2026-05-21T16:44:49.576083Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.0MB → 3.7MB (1.9x), 38 JPEGs deleted\n2026-05-21T16:45:54.178431Z INFO screenpipe_db::db: created new speaker id=54 (no existing match within threshold)\n2026-05-21T16:46:27.250379Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T16:47:00.518699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:31.590299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:34.531981Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:42.221193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:45.223364Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:45.231252Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:46.719785Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:49:46.720147Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2","depth":4,"on_screen":true,"value":"whisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:31:43.858744Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12459 samples)\n2026-05-21T16:31:44.136933Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 121.2ms elapsed (expected 5.3ms) → inserting 115.9ms silence (11124 samples)\n2026-05-21T16:31:47.490407Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 81.4ms elapsed (expected 5.3ms) → inserting 76.0ms silence (7298 samples)\n2026-05-21T16:34:14.189944Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=50 elapsed=3.166785416s\n2026-05-21T16:34:14.191317Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames\n2026-05-21T16:34:15.588973Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 2.4MB → 0.2MB (12.8x), 17 JPEGs deleted\n2026-05-21T16:34:20.903782Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.7MB → 6.3MB (1.2x), 31 JPEGs deleted\n2026-05-21T16:35:45.722571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6179899815906282118, trigger=click)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T16:39:22.363112Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:39:22.369205Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:39:24.617099Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:39:26.714508Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=112 elapsed=5.801488041s\n2026-05-21T16:39:26.714969Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames\n2026-05-21T16:39:29.362614Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 6.0MB → 0.2MB (26.4x), 42 JPEGs deleted\n2026-05-21T16:39:42.257806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.7MB → 8.4MB (1.5x), 68 JPEGs deleted\n2026-05-21T16:39:47.860464Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:39:50.893692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:40:03.022676Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:40:06.011601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:41:24.657491Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:41:24.658488Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T16:41:52.595621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:43:47.910446Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:44:42.833951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T16:44:44.888063Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.6MB → 0.2MB (20.4x), 32 JPEGs deleted\n2026-05-21T16:44:49.576083Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.0MB → 3.7MB (1.9x), 38 JPEGs deleted\n2026-05-21T16:45:54.178431Z INFO screenpipe_db::db: created new speaker id=54 (no existing match within threshold)\n2026-05-21T16:46:27.250379Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T16:47:00.518699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:31.590299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:34.531981Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:42.221193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:45.223364Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:45.231252Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:46.719785Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:49:46.720147Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.46944445,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-6562698902360324409
|
-4852272598334245407
|
visual_change
|
accessibility
|
NULL
|
whisper_backend_init_gpu: device 0: Metal (type: 1 whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T16:31:43.858744Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 135.1ms elapsed (expected 5.3ms) → inserting 129.8ms silence (12459 samples)
2026-05-21T16:31:44.136933Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 121.2ms elapsed (expected 5.3ms) → inserting 115.9ms silence (11124 samples)
2026-05-21T16:31:47.490407Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 81.4ms elapsed (expected 5.3ms) → inserting 76.0ms silence (7298 samples)
2026-05-21T16:34:14.189944Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=50 elapsed=3.166785416s
2026-05-21T16:34:14.191317Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 50 eligible frames
2026-05-21T16:34:15.588973Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 17 frames, 2.4MB → 0.2MB (12.8x), 17 JPEGs deleted
2026-05-21T16:34:20.903782Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.7MB → 6.3MB (1.2x), 31 JPEGs deleted
2026-05-21T16:35:45.722571Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6179899815906282118, trigger=click)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T16:39:22.363112Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:39:22.369205Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:39:24.617099Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:39:26.714508Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=112 elapsed=5.801488041s
2026-05-21T16:39:26.714969Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-05-21T16:39:29.362614Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 6.0MB → 0.2MB (26.4x), 42 JPEGs deleted
2026-05-21T16:39:42.257806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.7MB → 8.4MB (1.5x), 68 JPEGs deleted
2026-05-21T16:39:47.860464Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:39:50.893692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:40:03.022676Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:40:06.011601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:41:24.657491Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:41:24.658488Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T16:41:52.595621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:43:47.910446Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:44:42.833951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames
2026-05-21T16:44:44.888063Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.6MB → 0.2MB (20.4x), 32 JPEGs deleted
2026-05-21T16:44:49.576083Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.0MB → 3.7MB (1.9x), 38 JPEGs deleted
2026-05-21T16:45:54.178431Z INFO screenpipe_db::db: created new speaker id=54 (no existing match within threshold)
2026-05-21T16:46:27.250379Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T16:47:00.518699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:31.590299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:34.531981Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:42.221193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:45.223364Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:45.231252Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:46.719785Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:49:46.720147Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:54:58.885113Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=29 elapsed=3.561857292s
2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames
2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted
2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted
2026-05-21T16:55:16.793607Z WARN sqlx::query: summary="BEGIN IMMEDIATE" db.statement="" rows_affected=12 rows_returned=0 elapsed=1.050168334s
2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)
2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)
2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:10:22.001302Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=72 elapsed=1.959353916s
2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames
2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted
2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted
2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)
2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:15:29.064324Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=75 elapsed=1.019501s
2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames
2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted
2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:20:39.216934Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=78 elapsed=3.565377292s
2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames
2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted
2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)
2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)
2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)
2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted
2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)
2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:30:52.674618Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=29 elapsed=3.106591542s
2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames
2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted
2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames
2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted
2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames
2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted
2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T17:46:01.255420Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=2 elapsed=3.148277875s
2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:56:04.139385Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=0 elapsed=2.610081541s
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1
2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2
2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)
2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)
2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)
2026-05-21T17:56:54.133969Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=108 elapsed=9.299682667s
2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)
2026-05-21T17:57:46.799160Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=111 elapsed=1.611723958s
2026-05-21T17:58:16.568417Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=111 elapsed=1.722299583s
2026-05-21T17:58:37.239498Z WARN sqlx::query: summary="SELECT id, name, metadata …" db.statement="\n\nSELECT\n id,\n name,\n metadata\nFROM\n speakers\nWHERE\n id = (\n SELECT\n speaker_id\n FROM\n speaker_embeddings\n WHERE\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\n ORDER BY\n vec_distance_cosine(embedding, vec_f32(?1))\n LIMIT\n 1\n )\n" rows_affected=1 rows_returned=1 elapsed=2.020183542s
2026-05-21T18:01:07.293183Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=0 elapsed=3.141064292s
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)
2026-05-21T18:02:21.820121Z INFO screenpipe_engine::even...
|
68848
|
NULL
|
NULL
|
NULL
|
|
68851
|
2465
|
2
|
2026-05-22T07:23:50.443872+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434630443_m1.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
ggml_metal_free: deallocating
2026-05-21T16:39:24. ggml_metal_free: deallocating
2026-05-21T16:39:24.617099Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:39:26.714508Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=112 elapsed=5.801488041s
2026-05-21T16:39:26.714969Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-05-21T16:39:29.362614Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 6.0MB → 0.2MB (26.4x), 42 JPEGs deleted
2026-05-21T16:39:42.257806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.7MB → 8.4MB (1.5x), 68 JPEGs deleted
2026-05-21T16:39:47.860464Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:39:50.893692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:40:03.022676Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:40:06.011601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:41:24.657491Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:41:24.658488Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T16:41:52.595621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:43:47.910446Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:44:42.833951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames
2026-05-21T16:44:44.888063Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.6MB → 0.2MB (20.4x), 32 JPEGs deleted
2026-05-21T16:44:49.576083Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.0MB → 3.7MB (1.9x), 38 JPEGs deleted
2026-05-21T16:45:54.178431Z INFO screenpipe_db::db: created new speaker id=54 (no existing match within threshold)
2026-05-21T16:46:27.250379Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T16:47:00.518699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:31.590299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:34.531981Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:42.221193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:45.223364Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:45.231252Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:46.719785Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:49:46.720147Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:54:58.885113Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=29 elapsed=3.561857292s
2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames
2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted
2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted
2026-05-21T16:55:16.793607Z WARN sqlx::query: summary="BEGIN IMMEDIATE" db.statement="" rows_affected=12 rows_returned=0 elapsed=1.050168334s
2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)
2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)
2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:10:22.001302Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=72 elapsed=1.959353916s
2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames
2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted
2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted
2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)
2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:15:29.064324Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=75 elapsed=1.019501s
2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames
2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted
2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:20:39.216934Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=78 elapsed=3.565377292s
2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames
2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted
2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)
2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)
2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)
2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted
2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)
2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:30:52.674618Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=29 elapsed=3.106591542s
2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames
2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted
2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames
2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted
2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames
2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted
2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T17:46:01.255420Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=2 elapsed=3.148277875s
2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:56:04.139385Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=0 elapsed=2.610081541s
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1
2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2
2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)
2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)
2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)
2026-05-21T17:56:54.133969Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=108 elapsed=9.299682667s
2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)
2026-05-21T17:57:46.799160Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=111 elapsed=1.611723958s
2026-05-21T17:58:16.568417Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=111 elapsed=1.722299583s
2026-05-21T17:58:37.239498Z WARN sqlx::query: summary="SELECT id, name, metadata …" db.statement="\n\nSELECT\n id,\n name,\n metadata\nFROM\n speakers\nWHERE\n id = (\n SELECT\n speaker_id\n FROM\n speaker_embeddings\n WHERE\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\n ORDER BY\n vec_distance_cosine(embedding, vec_f32(?1))\n LIMIT\n 1\n )\n" rows_affected=1 rows_returned=1 elapsed=2.020183542s
2026-05-21T18:01:07.293183Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=0 elapsed=3.141064292s
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)
2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)
2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)
2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)
2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart
2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)
2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)
2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)
2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)
2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)
2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)
2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)
2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)
2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)
2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found
2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)
2026-05-21T18:05:10.092598Z WARN screenpipe_audio:...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"ggml_metal_free: deallocating\n2026-05-21T16:39:24.617099Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:39:26.714508Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=112 elapsed=5.801488041s\n2026-05-21T16:39:26.714969Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames\n2026-05-21T16:39:29.362614Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 6.0MB → 0.2MB (26.4x), 42 JPEGs deleted\n2026-05-21T16:39:42.257806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.7MB → 8.4MB (1.5x), 68 JPEGs deleted\n2026-05-21T16:39:47.860464Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:39:50.893692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:40:03.022676Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:40:06.011601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:41:24.657491Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:41:24.658488Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T16:41:52.595621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:43:47.910446Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:44:42.833951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T16:44:44.888063Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.6MB → 0.2MB (20.4x), 32 JPEGs deleted\n2026-05-21T16:44:49.576083Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.0MB → 3.7MB (1.9x), 38 JPEGs deleted\n2026-05-21T16:45:54.178431Z INFO screenpipe_db::db: created new speaker id=54 (no existing match within threshold)\n2026-05-21T16:46:27.250379Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T16:47:00.518699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:31.590299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:34.531981Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:42.221193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:45.223364Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:45.231252Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:46.719785Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:49:46.720147Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)","depth":4,"on_screen":true,"value":"ggml_metal_free: deallocating\n2026-05-21T16:39:24.617099Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:39:26.714508Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=112 elapsed=5.801488041s\n2026-05-21T16:39:26.714969Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames\n2026-05-21T16:39:29.362614Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 6.0MB → 0.2MB (26.4x), 42 JPEGs deleted\n2026-05-21T16:39:42.257806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.7MB → 8.4MB (1.5x), 68 JPEGs deleted\n2026-05-21T16:39:47.860464Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:39:50.893692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:40:03.022676Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:40:06.011601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:41:24.657491Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:41:24.658488Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T16:41:52.595621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:43:47.910446Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:44:42.833951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T16:44:44.888063Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.6MB → 0.2MB (20.4x), 32 JPEGs deleted\n2026-05-21T16:44:49.576083Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.0MB → 3.7MB (1.9x), 38 JPEGs deleted\n2026-05-21T16:45:54.178431Z INFO screenpipe_db::db: created new speaker id=54 (no existing match within threshold)\n2026-05-21T16:46:27.250379Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T16:47:00.518699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:31.590299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:34.531981Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:42.221193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:45.223364Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:45.231252Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)\n2026-05-21T16:49:46.719785Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:49:46.720147Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.46944445,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
7443217622484599440
|
-6005194102949480991
|
visual_change
|
accessibility
|
NULL
|
ggml_metal_free: deallocating
2026-05-21T16:39:24. ggml_metal_free: deallocating
2026-05-21T16:39:24.617099Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:39:26.714508Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=112 elapsed=5.801488041s
2026-05-21T16:39:26.714969Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 112 eligible frames
2026-05-21T16:39:29.362614Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 42 frames, 6.0MB → 0.2MB (26.4x), 42 JPEGs deleted
2026-05-21T16:39:42.257806Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.7MB → 8.4MB (1.5x), 68 JPEGs deleted
2026-05-21T16:39:47.860464Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:39:50.893692Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:40:03.022676Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:40:06.011601Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:41:24.657491Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:41:24.658488Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T16:41:52.595621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:43:47.910446Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:44:42.833951Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames
2026-05-21T16:44:44.888063Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 32 frames, 4.6MB → 0.2MB (20.4x), 32 JPEGs deleted
2026-05-21T16:44:49.576083Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 7.0MB → 3.7MB (1.9x), 38 JPEGs deleted
2026-05-21T16:45:54.178431Z INFO screenpipe_db::db: created new speaker id=54 (no existing match within threshold)
2026-05-21T16:46:27.250379Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T16:47:00.518699Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:31.590299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:34.531981Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:42.221193Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:45.223364Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:45.231252Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=click)
2026-05-21T16:49:46.719785Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:49:46.720147Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)
2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)
2026-05-21T16:54:58.885113Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=29 elapsed=3.561857292s
2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames
2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted
2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted
2026-05-21T16:55:16.793607Z WARN sqlx::query: summary="BEGIN IMMEDIATE" db.statement="" rows_affected=12 rows_returned=0 elapsed=1.050168334s
2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)
2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)
2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:10:22.001302Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=72 elapsed=1.959353916s
2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames
2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted
2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted
2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)
2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:15:29.064324Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=75 elapsed=1.019501s
2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames
2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted
2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:20:39.216934Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=0 rows_returned=78 elapsed=3.565377292s
2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames
2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted
2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)
2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)
2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)
2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)
2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames
2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted
2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)
2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)
2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:30:52.674618Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=29 elapsed=3.106591542s
2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames
2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted
2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames
2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted
2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames
2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted
2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted
survey: tell us what you think of screenpipe:
npx screenpipe survey
https://screenpi.pe/survey
2026-05-21T17:46:01.255420Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=2 elapsed=3.148277875s
2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames
tip: get the screenpipe desktop app for the full experience
https://screenpi.pe
2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:56:04.139385Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=0 elapsed=2.610081541s
tip: install a starter bundle of pipes:
npx screenpipe install https://screenpi.pe/start.json
2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1
2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)
2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2
2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)
2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)
2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)
2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)
2026-05-21T17:56:54.133969Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=108 elapsed=9.299682667s
2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)
2026-05-21T17:57:46.799160Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=111 elapsed=1.611723958s
2026-05-21T17:58:16.568417Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=111 elapsed=1.722299583s
2026-05-21T17:58:37.239498Z WARN sqlx::query: summary="SELECT id, name, metadata …" db.statement="\n\nSELECT\n id,\n name,\n metadata\nFROM\n speakers\nWHERE\n id = (\n SELECT\n speaker_id\n FROM\n speaker_embeddings\n WHERE\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\n ORDER BY\n vec_distance_cosine(embedding, vec_f32(?1))\n LIMIT\n 1\n )\n" rows_affected=1 rows_returned=1 elapsed=2.020183542s
2026-05-21T18:01:07.293183Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=0 elapsed=3.141064292s
tip: sign in for higher AI quotas + cloud sync:
npx screenpipe login
2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)
2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)
2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)
2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)
2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart
2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)
2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)
2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)
2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)
2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)
2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)
2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)
2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)
2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)
2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found
2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)
2026-05-21T18:05:10.092598Z WARN screenpipe_audio:...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
68852
|
2465
|
3
|
2026-05-22T07:23:55.871078+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434635871_m1.jpg...
|
Control Centre
|
Control Centre
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp<lahl100% Cscreenpipe"8838•Fri 22 May 10:23:55iTermDOCKERDEV (-zsh)O $82APP (-zsh)screenpipe"*4-zshwhisper_model_load: n_audio_ctx= 1500whisper_model_load:n_audio_state =384Wi-FiOffFOCuswhisper_model_load: n_audio_head=6whisper_model_load:n_audio_layer= 4BluetoothOnwhisper_model_load:n_text_ctx448whisper_model_load:n_text_state384whisper_model_load:n_text_head6AirDropOffStageManagerwhisper_model_load:n_text_layer4whisper_model_load: n_mels80whisper_model_load:ftype1Displaywhisper_model_load:qntvr=whisper_model_load:type1whisper_model_load:adding(tiny)1608extratokenswhisper_model_load: n_langsSound= 99whisper_model_load:Metaltotalsize =77.11 MBwhisper_model_load: modelsize77.11MB2026-05-22T10:23:47.394802ZINFOscreenpipe_audio::transcription::engine: whisper model loaded successfullywhisper_backend_init_gpu: device 0: Metal(type:1)whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)6: Metal (type: 1, cnt: 0)Music.appwhisper_backend_init_gpu: using Metal backendggml_metal_init: allocatingggml_metal_init: found device: Apple M1ggml_metal_init: picking default device: Apple M1ggml_metal_init: use fusiontrueggml_metal_init: use concurrencytrueggml_metal_init: use graph optimize =truewhisper_backend_init: using BLASbackendwhisper_init_state: kv self size=3.15 MBwhisper_init_state: kv cross size =9.44 MBwhisper_init_state: kv padsize=2.36 MBwhisper_init_state: compute buffer (conv)=14.17 MBwhisper_init_state: compute buffer (encode) =65.96 MBwhisper_init_state: computebuffer (cross)=8.50 MBwhisper_init_state: compute buffer (decode) =96.83 MB2026-05-22T10:23:47.405690ZINFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)2026-05-22T10:23:47.406338ZINFOscreenpipe_audio::meeting_streaming:: controller: meeting streaming: coordinator listening (provider=selected-engine)2026-05-22T10:23:47.433579ZINFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager2026-05-22T10:23:47.433654ZINFOscreenpipe_audio::audio_manager::manager: audio manager started2026-05-22T10:23:47.433686ZINFOscreenpipe_audio::audio_manager::manager: calendar-assistedspeaker diarization: listening for meeting events2026-05-22T10:23:47.980858ZINFOscreenpipe_audio::device::device_manager: starting recording for device: System Audio (output)2026-05-22110:23:48.105587ZINFOscreenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)2026-05-22T10:23:48.105714ZINFOscreenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30ssegments)2026-05-22T10:23:48.105713ZINFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)2026-05-22110:23:54.8192992INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)ScreenMirroring...
|
NULL
|
4666470157923434292
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp<lahl100% Cscreenpipe"8838•Fri 22 May 10:23:55iTermDOCKERDEV (-zsh)O $82APP (-zsh)screenpipe"*4-zshwhisper_model_load: n_audio_ctx= 1500whisper_model_load:n_audio_state =384Wi-FiOffFOCuswhisper_model_load: n_audio_head=6whisper_model_load:n_audio_layer= 4BluetoothOnwhisper_model_load:n_text_ctx448whisper_model_load:n_text_state384whisper_model_load:n_text_head6AirDropOffStageManagerwhisper_model_load:n_text_layer4whisper_model_load: n_mels80whisper_model_load:ftype1Displaywhisper_model_load:qntvr=whisper_model_load:type1whisper_model_load:adding(tiny)1608extratokenswhisper_model_load: n_langsSound= 99whisper_model_load:Metaltotalsize =77.11 MBwhisper_model_load: modelsize77.11MB2026-05-22T10:23:47.394802ZINFOscreenpipe_audio::transcription::engine: whisper model loaded successfullywhisper_backend_init_gpu: device 0: Metal(type:1)whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)6: Metal (type: 1, cnt: 0)Music.appwhisper_backend_init_gpu: using Metal backendggml_metal_init: allocatingggml_metal_init: found device: Apple M1ggml_metal_init: picking default device: Apple M1ggml_metal_init: use fusiontrueggml_metal_init: use concurrencytrueggml_metal_init: use graph optimize =truewhisper_backend_init: using BLASbackendwhisper_init_state: kv self size=3.15 MBwhisper_init_state: kv cross size =9.44 MBwhisper_init_state: kv padsize=2.36 MBwhisper_init_state: compute buffer (conv)=14.17 MBwhisper_init_state: compute buffer (encode) =65.96 MBwhisper_init_state: computebuffer (cross)=8.50 MBwhisper_init_state: compute buffer (decode) =96.83 MB2026-05-22T10:23:47.405690ZINFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)2026-05-22T10:23:47.406338ZINFOscreenpipe_audio::meeting_streaming:: controller: meeting streaming: coordinator listening (provider=selected-engine)2026-05-22T10:23:47.433579ZINFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager2026-05-22T10:23:47.433654ZINFOscreenpipe_audio::audio_manager::manager: audio manager started2026-05-22T10:23:47.433686ZINFOscreenpipe_audio::audio_manager::manager: calendar-assistedspeaker diarization: listening for meeting events2026-05-22T10:23:47.980858ZINFOscreenpipe_audio::device::device_manager: starting recording for device: System Audio (output)2026-05-22110:23:48.105587ZINFOscreenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)2026-05-22T10:23:48.105714ZINFOscreenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30ssegments)2026-05-22T10:23:48.105713ZINFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)2026-05-22110:23:54.8192992INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)ScreenMirroring...
|
68851
|
NULL
|
NULL
|
NULL
|
|
68853
|
2465
|
4
|
2026-05-22T07:23:57.336897+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434637336_m1.jpg...
|
Control Centre
|
Control Centre
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 8 Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 87%
soundcore AeroClip, 100%
LakyLak bose qc35 II
M720 Triathlon
Magic Keyboard
Magic Keyboard
Soundcore Life Dot 2 NC
Bluetooth Settings…...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Bluetooth","depth":2,"bounds":{"left":0.7916667,"top":0.04777778,"width":0.042708334,"height":0.017777778},"on_screen":true,"automation_id":"bluetooth-header","role_description":"text"},{"role":"AXCheckBox","text":"Bluetooth","depth":2,"bounds":{"left":0.9527778,"top":0.044444446,"width":0.02638889,"height":0.024444444},"on_screen":true,"automation_id":"bluetooth-header","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false},{"role":"AXHeading","text":"Devices","depth":3,"bounds":{"left":0.7916667,"top":0.090555556,"width":0.032291666,"height":0.016666668},"on_screen":true,"role_description":"heading"},{"role":"AXCheckBox","text":"Lukas’s Magic Mouse, 87%","depth":3,"bounds":{"left":0.78541666,"top":0.11111111,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-Lukas’s Magic Mouse","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"soundcore AeroClip, 100%","depth":3,"bounds":{"left":0.78541666,"top":0.14666666,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-soundcore AeroClip","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"LakyLak bose qc35 II","depth":3,"bounds":{"left":0.78541666,"top":0.18222222,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-LakyLak bose qc35 II","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"M720 Triathlon","depth":3,"bounds":{"left":0.78541666,"top":0.21777777,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-M720 Triathlon","role_description":"toggle button","subrole":"AXToggle","is_enabled":false},{"role":"AXCheckBox","text":"Magic Keyboard","depth":3,"bounds":{"left":0.78541666,"top":0.25333333,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-Magic Keyboard","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"Magic Keyboard","depth":3,"bounds":{"left":0.78541666,"top":0.2888889,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-Magic Keyboard","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"Soundcore Life Dot 2 NC","depth":3,"bounds":{"left":0.78541666,"top":0.32444444,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-Soundcore Life Dot 2 NC","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXButton","text":"Bluetooth Settings…","depth":2,"bounds":{"left":0.78541666,"top":0.37555555,"width":0.09791667,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false}]...
|
5065144611963521308
|
-4282010603514655875
|
visual_change
|
hybrid
|
NULL
|
Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 8 Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 87%
soundcore AeroClip, 100%
LakyLak bose qc35 II
M720 Triathlon
Magic Keyboard
Magic Keyboard
Soundcore Life Dot 2 NC
Bluetooth Settings…
iTerm2ShellEditViewSessionScriptsProfilesWindowHelp<lahl100% <478•Fri 22 May 10:23:57screenpipe"883BluetoothDOCKERDEV (-zsh)O $82APP (-zsh)screenpipe"*4-zshwhisper_model_load: n_audio_state= 384Deviceswhisper_model_load:n_audio_head6whisper_model_load: n_audio_layer= 4Lukas's Magic Mouse87%0whisper_model_load:n_text_ctx= 448soundcore AeroClip100% Cwhisper_model_load:n_text_statewhisper_model_load:384n_text_head6whisper_model_load:n_text_layer=4LakyLak bose qc35 llwhisper_model_load:n_mels80M720 Triathlonwhisper_model_load:whisper_model_load:ftype= 1qntvr=0Magic Keyboardwhisper_model_load:type= 1whisper_model_load:(tiny)Magic Keyboardextratokenswhisper_model_load:adding1608n_langs99whisper_model_load:MetaltotalSoundcore Life Dot 2 NCsize =77.11 MBwhisper_model_load: modelsize77.11 MBBluetooth Settings...2026-05-22T10:23:47.394802ZINFOscreenpipe_audio::transcription::engine: whisper model loaded successfullywhisper_backend_init_gpu: device 0: Metal (type:Ct: Metal (type: 1, cnt: 0)whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)whisper_backend_init_gpu: using Metal backendggml_metal_init: allocatingggml_metal_init: found device: Apple M1ggml_metal_init: picking default device: Apple M1ggml_metal_init: use fusion= trueggml_metal_init: use concurrency= trueggml_metal_init: use graph optimizetruewhisper_backend_init: using BLAS backendwhisper_init_state: kv selfsize3.15 MBwhisper_init_state: kv cross size =9.44 MBwhisper_init_state: kv padsize=2.36 MBwhisper_init_state: compute buffer (conv)=14.17MBwhisper_init_state: computebuffer (encode) =65.96 MBwhisper_init_state: computebuffer (cross)=8.50 MBwhisper_init_state: computebuffer (decode) =96.83 MB2026-05-22110:23:47.4056902INFOscreenpipe_audio::audio_manager::manager: transcription session created (will be reused acrosssegments)2026-05-22T10:23:47.406338ZINFOscreenpipe_audio::meeting_streaming::controller: meeting streaming:coordinator listening (provider=selected-engine)2026-05-22T10:23:47.433579ZINFOscreenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager2026-05-22T10:23:47.433654ZINFOscreenpipe_audio::audio_manager::manager: audio manager started2026-05-22T10:23:47.433686ZINFOscreenpipe_audio::audio_manager::manager: calendar-assistedspeaker diarization: listening for meeting events2026-05-22T10:23:47.980858ZINFOscreenpipe_audio::device::device_manager: starting recording for device: System Audio (output)2026-05-22T10:23:48.1055872INFOscreenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)2026-05-22110:23:48.105714ZINFOscreenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)2026-05-22T10:23:48.105713ZINFOscreenpipe_audio::core::run_record_and_transcribe: startingcontinuous recording for System Audio (output) (unknown / 30s segments)2026-05-22T10:23:54.819299ZINFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)2026-05-22110:23:55.7665412INFO screenpipe_engine::frame_linker_actor: frame_linker: pairedframe+events (eventsarrived first) frame_id=68851 paired-1 still_pending=0...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
68854
|
2466
|
1
|
2026-05-22T07:23:57.398941+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434637398_m2.jpg...
|
Control Centre
|
Control Centre
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 8 Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 87%
soundcore AeroClip, 100%
LakyLak bose qc35 II
M720 Triathlon
Magic Keyboard
Magic Keyboard
Soundcore Life Dot 2 NC
Bluetooth Settings…...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Bluetooth","depth":2,"bounds":{"left":0.6492686,"top":1.0,"width":0.02044548,"height":-0.034317613},"on_screen":true,"automation_id":"bluetooth-header","role_description":"text"},{"role":"AXCheckBox","text":"Bluetooth","depth":2,"bounds":{"left":0.72639626,"top":1.0,"width":0.012632979,"height":-0.031923413},"on_screen":true,"automation_id":"bluetooth-header","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false},{"role":"AXHeading","text":"Devices","depth":3,"bounds":{"left":0.6492686,"top":1.0,"width":0.015458777,"height":-0.065043926},"on_screen":true,"role_description":"heading"},{"role":"AXCheckBox","text":"Lukas’s Magic Mouse, 87%","depth":3,"bounds":{"left":0.6462766,"top":1.0,"width":0.095744684,"height":-0.07980847},"on_screen":true,"automation_id":"bluetooth-device-Lukas’s Magic Mouse","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"soundcore AeroClip, 100%","depth":3,"on_screen":true,"automation_id":"bluetooth-device-soundcore AeroClip","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"LakyLak bose qc35 II","depth":3,"on_screen":true,"automation_id":"bluetooth-device-LakyLak bose qc35 II","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"M720 Triathlon","depth":3,"on_screen":true,"automation_id":"bluetooth-device-M720 Triathlon","role_description":"toggle button","subrole":"AXToggle","is_enabled":false},{"role":"AXCheckBox","text":"Magic Keyboard","depth":3,"on_screen":true,"automation_id":"bluetooth-device-Magic Keyboard","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"Magic Keyboard","depth":3,"on_screen":true,"automation_id":"bluetooth-device-Magic Keyboard","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"Soundcore Life Dot 2 NC","depth":3,"on_screen":true,"automation_id":"bluetooth-device-Soundcore Life Dot 2 NC","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXButton","text":"Bluetooth Settings…","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false}]...
|
5065144611963521308
|
-4282010603514655875
|
click
|
hybrid
|
NULL
|
Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 8 Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 87%
soundcore AeroClip, 100%
LakyLak bose qc35 II
M720 Triathlon
Magic Keyboard
Magic Keyboard
Soundcore Life Dot 2 NC
Bluetooth Settings…
FV faVsco.js v?9 masterProjectMỀ CLAUDE.md& composer.json0 composer.lock0 dependency-checker.json0 dev.json= ids tytlE infection.json.distM-INSTALL.mdM+ INTERNAL_WEBHOOK_SETUP.mdEjiminny storageM+licenses.mom Makerileраскаqе-lock. sonE phpstan.neon.dist= phostan-baseline.neon<› phounit.xmliTe raw sal querv.saML README.mdso sonar-oroiect.oropertiesE test.py<> Untited Diadram.xmlI vetur.config.jsMJ WEBHOOK FILTERING IMPLEMENTATION.mo› ib External Librariesv = Scratches and Consolesv D Database ConsolesVASUA console (EU]A DEAL RISKS [EU]A DI [EU]A EU (EU]v A jiminny@localhostA console ljiminny@localhost]A DI [jiminny@localhost]A HS_local [jiminny@localhost]A SF [iiminny@localhostl& zoho dev liminny@localhostV A PRODA console (PROD]A console_1 [PROD]A DI (PROD]> ДOAA QAI> A QAI PRODSTAGINGA console [STAGiNGIA console 1 [STAGiNG)#uranus STAGINGI>• Extensions) M Scratches100% 10• rli zz May 10-23.01Propnetcllent.onpcetalActivity lypeviarropnetservice.onp© SyncRe© GenerateAiActivityTypewsnaredsyncrieldsIrait.onowsyncermrieldstrait.ongC) FieldRepository.phpActivityPlaybookTrait.php© ImportMetadata.php© CrmHelyclass GenerateAiActivityTypeServiceprivate function processAlActivityTypeResponse(arnay Scontent, $activityType = $this->playbookCategoryRepository->findByGrc$content['ai_activity_type'],sgroupif ($activityType === null) {$this->processingStateManager->setSkipped(sactivity->getldo,state: ActivityProcessingStateManager::STATE_AI_ACTI\sthns->loqger-sintorcinuD• ' Vetected Al ACtIvITY'activity' => Sactivity->getUuid(),sthis->loalolatadod Sactivity.isDetected: "No')return:Sthis->activityRepository->update($activity, ('playbook_category_id' = $activityType->getId(),151153$this->LogToDatadog(Sactivity,isDetected: IVec1)*$this->processingStateManager->setFinishedC$activity->getId(),state: ActivityProcessingStateManager::STATE_AI_ACTIVITY_);private function loaToDatadog(Activity Sactivity. string SisDet•• C0, Chat:= Cowork" Code+ New chat6 Projects8 Artifactse CustomizePinned• Bulgarian citizenship application proDawarich location tracking projectKecents• Screenpipe module not found error• Interactive language learning throus• Recent love experiences• Cities visited this year• Did I drive today• Last visit to Lovech• Monthlv spending breakdown and re• Swimming visits this vear• Screenpipe prune database vacuum e• Marking text locations in Screenpipe• Updating packages in Laravel• Screenpipe data sync and retention n• Screenpipe svnc script failing after reO Hubsnot BadRequest headers debug• Monthly expense tracking• Exporting transaction data from Notil• @ How much have I spent for groc.• April 2026 spending by category• Code diff review@ HubSoot rate limit imolementation stiScreenpipe module not found errorlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $npxscreenpipe@latest recordinternal/modules/cjs/loader.js:883inrow ertrError: Cannot find module 'node:child_process'Require stack:/cerc/lukac/nnm/nnyl47257/lih/node modulac/ccreonnine/ccrinte/moctinctaShow moreThought for 5s>Ihat's not a screenpipe bug — it's your Node.js version. Une node: child process syntax (thenode: prefix for built-in modules) requires Node 14.18+ / 16+, and your stack traceCanternal/modules/cis/loader.1s:880.0d nom ERR. format. nox cache daun_npx/47357/ ) is classic Node 12.x.Check what you've got:bashnode -vwhich nodeI'd bet on v12.x. Fix by upgrading. If you're on nvm:Reply +120.default 20nvm use 20itBomehrew.brew upgrade nodeIf neither, install nvm — it's the cleanest way to manage Node on the Mac, especially since youswitch between work projects.After upgrading, clear the stale npx cache before retrying so it doesn't reuse the broken install:Write a messageRelaunch to updatelK lukas. ProOous 4. Adaptive vCiaude ic Aland can make mictakas Plesce doublo-chork recnoncod...
|
68849
|
NULL
|
NULL
|
NULL
|
|
68855
|
NULL
|
0
|
2026-05-22T07:24:29.536974+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434669536_m2.jpg...
|
Control Centre
|
Control Centre
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 8 Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 87%
soundcore AeroClip
LakyLak bose qc35 II
M720 Triathlon
Magic Keyboard
Magic Keyboard
Soundcore Life Dot 2 NC
Bluetooth Settings…...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Bluetooth","depth":2,"bounds":{"left":0.6492686,"top":1.0,"width":0.02044548,"height":-0.034317613},"on_screen":true,"automation_id":"bluetooth-header","role_description":"text"},{"role":"AXCheckBox","text":"Bluetooth","depth":2,"bounds":{"left":0.72639626,"top":1.0,"width":0.012632979,"height":-0.031923413},"on_screen":true,"automation_id":"bluetooth-header","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false},{"role":"AXHeading","text":"Devices","depth":3,"bounds":{"left":0.6492686,"top":1.0,"width":0.015458777,"height":-0.065043926},"on_screen":true,"role_description":"heading"},{"role":"AXCheckBox","text":"Lukas’s Magic Mouse, 87%","depth":3,"bounds":{"left":0.6462766,"top":1.0,"width":0.095744684,"height":-0.07980847},"on_screen":true,"automation_id":"bluetooth-device-Lukas’s Magic Mouse","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"soundcore AeroClip","depth":3,"on_screen":true,"automation_id":"bluetooth-device-soundcore AeroClip","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"LakyLak bose qc35 II","depth":3,"on_screen":true,"automation_id":"bluetooth-device-LakyLak bose qc35 II","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"M720 Triathlon","depth":3,"on_screen":true,"automation_id":"bluetooth-device-M720 Triathlon","role_description":"toggle button","subrole":"AXToggle","is_enabled":false},{"role":"AXCheckBox","text":"Magic Keyboard","depth":3,"on_screen":true,"automation_id":"bluetooth-device-Magic Keyboard","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"Magic Keyboard","depth":3,"on_screen":true,"automation_id":"bluetooth-device-Magic Keyboard","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"Soundcore Life Dot 2 NC","depth":3,"on_screen":true,"automation_id":"bluetooth-device-Soundcore Life Dot 2 NC","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXButton","text":"Bluetooth Settings…","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false}]...
|
9013788568056476015
|
-8929743010744432652
|
idle
|
hybrid
|
NULL
|
Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 8 Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 87%
soundcore AeroClip
LakyLak bose qc35 II
M720 Triathlon
Magic Keyboard
Magic Keyboard
Soundcore Life Dot 2 NC
Bluetooth Settings…
FV faVsco.js v?9 masterProjectMỀ CLAUDE.md& composer.json0 composer.lock0 dependency-checker.json0 dev.json= ids tytlE infection.json.distM-INSTALL.mdM+ INTERNAL_WEBHOOK_SETUP.mdEjiminny storageM+licenses.mom Makerileраскаqе-lock. sonE phpstan.neon.dist= phostan-baseline.neon<› phounit.xmliTe raw sal querv.saML README.mdso sonar-oroiect.oropertiesE test.py<> Untited Diadram.xmlI vetur.config.jsMJ WEBHOOK FILTERING IMPLEMENTATION.mo› ib External Librariesv = Scratches and Consolesv D Database ConsolesVASUA console (EU]A DEAL RISKS [EU]A DI [EU]A EU (EU]v A jiminny@localhostA console ljiminny@localhost]A DI [jiminny@localhost]A HS_local [jiminny@localhost]A SF [iiminny@localhostl& zoho dev liminny@localhostV A PRODA console (PROD]A console_1 [PROD]A DI (PROD]> ДOAA QAI> A QAI PRODSTAGINGA console [STAGiNGIA console 1 [STAGiNG)#uranus STAGINGI>• Extensions) M Scratches100% 13• rli zz May 10-24-24Propnetcllent.onpcetalActivity lypeviarropnetservice.onp© SyncRe© GenerateAiActivityTypewsnaredsyncrieldsIrait.onowsyncermrieldstrait.ongC) FieldRepository.phpActivityPlaybookTrait.php© ImportMetadata.php© CrmHelyclass GenerateAiActivityTypeServiceprivate function processAlActivityTypeResponse(arnay Scontent, $activityType = $this->playbookCategoryRepository->findByGrc$content['ai_activity_type'],sgroupif ($activityType === null) {$this->processingStateManager->setSkipped(sactivity->getldo,state: ActivityProcessingStateManager::STATE_AI_ACTI\sthns->loqger-sintorcinuD• ' Vetected Al ACtIvITY'activity' => Sactivity->getUuid(),sthis->loalolatadod Sactivity.isDetected: "No')return:Sthis->activityRepository->update($activity, ('playbook_category_id' = $activityType->getId(),151153$this->LogToDatadog(Sactivity,isDetected: IVec1)*$this->processingStateManager->setFinishedC$activity->getId(),state: ActivityProcessingStateManager::STATE_AI_ACTIVITY_);private function loaToDatadog(Activity Sactivity. string SisDet•• C0, Chat:= Cowork" Code+ New chat6 Projects8 Artifactse CustomizePinned• Bulgarian citizenship application proDawarich location tracking projectKecents• Screenpipe module not found error• Interactive language learning throus• Recent love experiences• Cities visited this year• Did I drive today• Last visit to Lovech• Monthlv spending breakdown and re• Swimming visits this vear• Screenpipe prune database vacuum e• Marking text locations in Screenpipe• Updating packages in Laravel• Screenpipe data sync and retention n• Screenpipe svnc script failing after reO Hubsnot BadRequest headers debug• Monthly expense tracking• Exporting transaction data from Notil• @ How much have I spent for groc.• April 2026 spending by category• Code diff review@ HubSoot rate limit imolementation stiScreenpipe module not found errorlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $npxscreenpipe@latest recordinternal/modules/cjs/loader.js:883inrow ertrError: Cannot find module 'node:child_process'Require stack:/cerc/lukac/nnm/nnyl47257/lih/node modulac/ccreonnine/ccrinte/moctinctaShow moreThought for 5s>Ihat's not a screenpipe bug — it's your Node.js version. Une node: child process syntax (thenode: prefix for built-in modules) requires Node 14.18+ / 16+, and your stack traceCanternal/modules/cis/loader.1s:880.0d nom ERR. format. nox cache daun_npx/47357/ ) is classic Node 12.x.Check what you've got:bashnode -vwhich nodeI'd bet on v12.x. Fix by upgrading. If you're on nvm:Reply +120.default 20nvm use 20itBomehrew.brew upgrade nodeIf neither, install nvm — it's the cleanest way to manage Node on the Mac, especially since youswitch between work projects.After upgrading, clear the stale npx cache before retrying so it doesn't reuse the broken install:Write a messageRelaunch to updatelK lukas. ProOous 4. Adaptive vCiaude ic Aland can make mictakas Plesce doublo-chork recnoncod...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
68856
|
NULL
|
0
|
2026-05-22T07:24:30.365776+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434670365_m1.jpg...
|
Control Centre
|
Control Centre
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 8 Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 87%
soundcore AeroClip
LakyLak bose qc35 II
M720 Triathlon
Magic Keyboard
Magic Keyboard
Soundcore Life Dot 2 NC
Bluetooth Settings…...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Bluetooth","depth":2,"bounds":{"left":0.7916667,"top":0.04777778,"width":0.042708334,"height":0.017777778},"on_screen":true,"automation_id":"bluetooth-header","role_description":"text"},{"role":"AXCheckBox","text":"Bluetooth","depth":2,"bounds":{"left":0.9527778,"top":0.044444446,"width":0.02638889,"height":0.024444444},"on_screen":true,"automation_id":"bluetooth-header","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false},{"role":"AXHeading","text":"Devices","depth":3,"bounds":{"left":0.7916667,"top":0.090555556,"width":0.032291666,"height":0.016666668},"on_screen":true,"role_description":"heading"},{"role":"AXCheckBox","text":"Lukas’s Magic Mouse, 87%","depth":3,"bounds":{"left":0.78541666,"top":0.11111111,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-Lukas’s Magic Mouse","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"soundcore AeroClip","depth":3,"bounds":{"left":0.78541666,"top":0.14666666,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-soundcore AeroClip","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"LakyLak bose qc35 II","depth":3,"bounds":{"left":0.78541666,"top":0.18222222,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-LakyLak bose qc35 II","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"M720 Triathlon","depth":3,"bounds":{"left":0.78541666,"top":0.21777777,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-M720 Triathlon","role_description":"toggle button","subrole":"AXToggle","is_enabled":false},{"role":"AXCheckBox","text":"Magic Keyboard","depth":3,"bounds":{"left":0.78541666,"top":0.25333333,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-Magic Keyboard","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"Magic Keyboard","depth":3,"bounds":{"left":0.78541666,"top":0.2888889,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-Magic Keyboard","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"Soundcore Life Dot 2 NC","depth":3,"bounds":{"left":0.78541666,"top":0.32444444,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-Soundcore Life Dot 2 NC","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXButton","text":"Bluetooth Settings…","depth":2,"bounds":{"left":0.78541666,"top":0.37555555,"width":0.09791667,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false}]...
|
9013788568056476015
|
-8929743010744432652
|
idle
|
hybrid
|
NULL
|
Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 8 Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 87%
soundcore AeroClip
LakyLak bose qc35 II
M720 Triathlon
Magic Keyboard
Magic Keyboard
Soundcore Life Dot 2 NC
Bluetooth Settings…
iTerm2ShellEditViewSessionScriptsProfilesWindowHelplablA100% <478•Fri 22 May 10:24:30screenpipe"BluetoothDOCKERO ₴1DEV (-zsh)О $82APP (-zsh)83screenpipe*84-zshggml_metal_init:use fusion= trueDevicesggml_metal_init:use concurrencytrueggml_metal_init:usegraph optimizeLukas's Magic Mouse87%0truewhisper_backend_init: using BLAS backendsoundcore AeroClipwhisper_init_state: kv self size3.15 MBwhisper_init_state: kv cross size =9.44 MBwhisper_init_state: kv padsizeLakyLak bose qc35 ll=2.36 MBwhisper_init_state: compute buffer (conv)14.17 MBM720 Triathlonwhisper_init_state: compute buffer (encode)=65.96 MBwhisper_init_state: computebuffer (cross)=8.50 MBMagic Keyboardwhisper_init_state: computebuffer (decode)=96.83 MB2026-05-22T10:23:47.405690ZINFOMagic Keyboardscreenpipe_audio::audio_manager::manager:transcription session created(will be reused acrosssegments)2026-05-22T10:23:47.406338ZINFOscreenpipe_audio::meeting_streaming::controller: meeting streaming:coordinator listening (provider=selecte2026-05-22110:23:47.4335792INFOSoundcore Life Dot 2 NCscreenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manag2026-05-22T10:23:47.433654ZINFOscreenpipe_audio::audio_manager::manager: audio manager startedBluetooth Settings...2026-05-22T10:23:47.433686ZINFOscreenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meetingever~2026-05-22T10:23:47.980858ZINFOscreenpipe_audio: :device::device_manager: starting recording for device: System Audio (output)2026-05-22T10:23:48.105587ZINFOscreenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip(input)2026-05-22T10:23:48.105714ZINFOscreenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)2026-05-22T10:23:48.105713ZINFOscreenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)2026-05-22110:23:54.819299ZINFO2026-05-22T10:23:55.766541ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id-68851 paired-1 still_pending=02026-05-22T10:23:57.6038212INFO2026-05-22110:23:58.0243822INFOsck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id-68852 paired-1 still_pending=02026-05-22T10:23:58.493391ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=68854 paired-1 still_pending=22026-05-22T10:23:59.209854ZINFO2026-05-22T10:23:59.268980Zscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)INFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first) frame_id=68853 paired=2 still_pending=02026-05-22T10:23:59.301677ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)2026-05-22T10:24:00.312589ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)2026-05-22T10:24:01.6299572WARNscreenpipe_audio::core::stream: audio device soundcore AeroClip disconnected.stopping recording.2026-05-22110:24:01.9130302INFOscreenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)2026-05-22T10:24:01.913814ZERRORscreenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (willbackoff)2026-05-22110:24:02.1905212WARNscreenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone(input)2026-05-22110:24:02.33557822026-05-22T10:24:02.335720Z2026-05-22T10:24:02.335834Z2026-05-22T10:24:07.635795Z2026-05-22T10:24:26.050807ZROM\nframes \nWHERE\nINFOscreenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)INFOscreenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)INFOscreenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)WARNscreenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnectWARNsqlx::query:summary="SELECT id,snapshot_path, device_name,db.statement="\n\nSELECT\nid, \nsnapshot_path, \ndevice_name, \ntimestamp\nFsnapshot_path IS NOT NULL\nAND timestamp < ?1\nORDER BY\n device_name, \ntimestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=177 elapsed=3.21525875s2026-05-22T10:24:26.052106Z2026-05-22110:24:30.1147052INFOscreenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible framesINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9X), 68 JPEGs deleted...
|
68853
|
NULL
|
NULL
|
NULL
|
|
68857
|
2468
|
0
|
2026-05-22T07:25:00.441424+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434700441_m2.jpg...
|
Control Centre
|
Control Centre
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 8 Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 87%
soundcore AeroClip
LakyLak bose qc35 II
M720 Triathlon
Magic Keyboard
Magic Keyboard
Soundcore Life Dot 2 NC
Bluetooth Settings…...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Bluetooth","depth":2,"bounds":{"left":0.6492686,"top":1.0,"width":0.02044548,"height":-0.034317613},"on_screen":true,"automation_id":"bluetooth-header","role_description":"text"},{"role":"AXCheckBox","text":"Bluetooth","depth":2,"bounds":{"left":0.72639626,"top":1.0,"width":0.012632979,"height":-0.031923413},"on_screen":true,"automation_id":"bluetooth-header","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false},{"role":"AXHeading","text":"Devices","depth":3,"bounds":{"left":0.6492686,"top":1.0,"width":0.015458777,"height":-0.065043926},"on_screen":true,"role_description":"heading"},{"role":"AXCheckBox","text":"Lukas’s Magic Mouse, 87%","depth":3,"bounds":{"left":0.6462766,"top":1.0,"width":0.095744684,"height":-0.07980847},"on_screen":true,"automation_id":"bluetooth-device-Lukas’s Magic Mouse","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"soundcore AeroClip","depth":3,"on_screen":true,"automation_id":"bluetooth-device-soundcore AeroClip","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"LakyLak bose qc35 II","depth":3,"on_screen":true,"automation_id":"bluetooth-device-LakyLak bose qc35 II","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"M720 Triathlon","depth":3,"on_screen":true,"automation_id":"bluetooth-device-M720 Triathlon","role_description":"toggle button","subrole":"AXToggle","is_enabled":false},{"role":"AXCheckBox","text":"Magic Keyboard","depth":3,"on_screen":true,"automation_id":"bluetooth-device-Magic Keyboard","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"Magic Keyboard","depth":3,"on_screen":true,"automation_id":"bluetooth-device-Magic Keyboard","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"Soundcore Life Dot 2 NC","depth":3,"on_screen":true,"automation_id":"bluetooth-device-Soundcore Life Dot 2 NC","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXButton","text":"Bluetooth Settings…","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false}]...
|
9013788568056476015
|
-8929743010744432652
|
idle
|
hybrid
|
NULL
|
Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 8 Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 87%
soundcore AeroClip
LakyLak bose qc35 II
M720 Triathlon
Magic Keyboard
Magic Keyboard
Soundcore Life Dot 2 NC
Bluetooth Settings…
FV faVsco.js v?9 masterProjectMỀ CLAUDE.md& composer.json0 composer.lock0 dependency-checker.json0 dev.json= ids tytlE infection.json.distM-INSTALL.mdM+ INTERNAL_WEBHOOK_SETUP.mdEjiminny storageM+licenses.mom Makerileраскаqе-lock. sonE phpstan.neon.dist= phostan-baseline.neon<› phounit.xmliTe raw sal querv.saML README.mdso sonar-oroiect.oropertiesE test.py<> Untited Diadram.xmlI vetur.config.jsMJ WEBHOOK FILTERING IMPLEMENTATION.mo› ib External Librariesv = Scratches and Consolesv D Database ConsolesVASUA console (EU]A DEAL RISKS [EU]A DI [EU]A EU (EU]v A jiminny@localhostA console ljiminny@localhost]A DI [jiminny@localhost]A HS_local [jiminny@localhost]A SF [iiminny@localhostl& zoho dev liminny@localhostV A PRODA console (PROD]A console_1 [PROD]A DI (PROD]> ДOAA QAI> A QAI PRODSTAGINGA console [STAGiNGIA console 1 [STAGiNG)#uranus STAGINGI>• Extensions) M Scratches100% 1• rli zz May 10-20:00Propnetcllent.onpcetalActivity lypeviarropnetservice.onp© SyncRe© GenerateAiActivityTypewsnaredsyncrieldsIrait.onowsyncermrieldstrait.ongC) FieldRepository.phpActivityPlaybookTrait.php© ImportMetadata.php© CrmHelyclass GenerateAiActivityTypeServiceprivate function processAlActivityTypeResponse(arnay Scontent, $activityType = $this->playbookCategoryRepository->findByGrc$content['ai_activity_type'],sgroupif ($activityType === null) {$this->processingStateManager->setSkipped(sactivity->getldo,state: ActivityProcessingStateManager::STATE_AI_ACTI\sthns->loqger-sintorcinuD• ' Vetected Al ACtIvITY'activity' => Sactivity->getUuid(),sthis->loalolatadod Sactivity.isDetected: "No')return:Sthis->activityRepository->update($activity, ('playbook_category_id' = $activityType->getId(),151153$this->LogToDatadog(Sactivity,isDetected: IVec1)*$this->processingStateManager->setFinishedC$activity->getId(),state: ActivityProcessingStateManager::STATE_AI_ACTIVITY_);private function loaToDatadog(Activity Sactivity. string SisDet•• C0, Chat:= Cowork" Code+ New chat6 Projects8 Artifactse CustomizePinned• Bulgarian citizenship application proDawarich location tracking projectKecents• Screenpipe module not found error• Interactive language learning throus• Recent love experiences• Cities visited this year• Did I drive today• Last visit to Lovech• Monthlv spending breakdown and re• Swimming visits this vear• Screenpipe prune database vacuum e• Marking text locations in Screenpipe• Updating packages in Laravel• Screenpipe data sync and retention n• Screenpipe svnc script failing after reO Hubsnot BadRequest headers debug• Monthly expense tracking• Exporting transaction data from Notil• @ How much have I spent for groc.• April 2026 spending by category• Code diff review@ HubSoot rate limit imolementation stiScreenpipe module not found errorlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $npxscreenpipe@latest recordinternal/modules/cjs/loader.js:883inrow ertrError: Cannot find module 'node:child_process'Require stack:/cerc/lukac/nnm/nnyl47257/lih/node modulac/ccreonnine/ccrinte/moctinctaShow moreThought for 5s>Ihat's not a screenpipe bug — it's your Node.js version. Une node: child process syntax (thenode: prefix for built-in modules) requires Node 14.18+ / 16+, and your stack traceCanternal/modules/cis/loader.1s:880.0d nom ERR. format. nox cache daun_npx/47357/ ) is classic Node 12.x.Check what you've got:bashnode -vwhich nodeI'd bet on v12.x. Fix by upgrading. If you're on nvm:Reply +120.default 20nvm use 20itBomehrew.brew upgrade nodeIf neither, install nvm — it's the cleanest way to manage Node on the Mac, especially since youswitch between work projects.After upgrading, clear the stale npx cache before retrying so it doesn't reuse the broken install:Write a messageRelaunch to updatelK lukas. ProOous 4. Adaptive vCiaude ic Aland can make mictakas Plesce doublo-chork recnoncod...
|
68855
|
NULL
|
NULL
|
NULL
|
|
68858
|
2467
|
0
|
2026-05-22T07:25:01.084317+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434701084_m1.jpg...
|
Control Centre
|
Control Centre
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 8 Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 87%
soundcore AeroClip
LakyLak bose qc35 II
M720 Triathlon
Magic Keyboard
Magic Keyboard
Soundcore Life Dot 2 NC
Bluetooth Settings…...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Bluetooth","depth":2,"bounds":{"left":0.7916667,"top":0.04777778,"width":0.042708334,"height":0.017777778},"on_screen":true,"automation_id":"bluetooth-header","role_description":"text"},{"role":"AXCheckBox","text":"Bluetooth","depth":2,"bounds":{"left":0.9527778,"top":0.044444446,"width":0.02638889,"height":0.024444444},"on_screen":true,"automation_id":"bluetooth-header","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false},{"role":"AXHeading","text":"Devices","depth":3,"bounds":{"left":0.7916667,"top":0.090555556,"width":0.032291666,"height":0.016666668},"on_screen":true,"role_description":"heading"},{"role":"AXCheckBox","text":"Lukas’s Magic Mouse, 87%","depth":3,"bounds":{"left":0.78541666,"top":0.11111111,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-Lukas’s Magic Mouse","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"soundcore AeroClip","depth":3,"bounds":{"left":0.78541666,"top":0.14666666,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-soundcore AeroClip","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"LakyLak bose qc35 II","depth":3,"bounds":{"left":0.78541666,"top":0.18222222,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-LakyLak bose qc35 II","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"M720 Triathlon","depth":3,"bounds":{"left":0.78541666,"top":0.21777777,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-M720 Triathlon","role_description":"toggle button","subrole":"AXToggle","is_enabled":false},{"role":"AXCheckBox","text":"Magic Keyboard","depth":3,"bounds":{"left":0.78541666,"top":0.25333333,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-Magic Keyboard","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"Magic Keyboard","depth":3,"bounds":{"left":0.78541666,"top":0.2888889,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-Magic Keyboard","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"Soundcore Life Dot 2 NC","depth":3,"bounds":{"left":0.78541666,"top":0.32444444,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-Soundcore Life Dot 2 NC","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXButton","text":"Bluetooth Settings…","depth":2,"bounds":{"left":0.78541666,"top":0.37555555,"width":0.09791667,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false}]...
|
9013788568056476015
|
-8929743010744432652
|
idle
|
hybrid
|
NULL
|
Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 8 Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 87%
soundcore AeroClip
LakyLak bose qc35 II
M720 Triathlon
Magic Keyboard
Magic Keyboard
Soundcore Life Dot 2 NC
Bluetooth Settings…
iTerm2ShellEditViewSessionScriptsProfilesWindowHelplabl100% C8•Fri 22 May 10:25:00screenpipe"BluetoothDOCKERO 81DEV (-zsh)O $82APP (-zsh)83screenpipe*84-zshggml_metal_init:usegraph optimizetrueDeviceswhisper_backend_init:using BLASbackendwhisper_init_state: kv selfsize=3.15 MBLukas's Magic Mouse87%0whisper_init_state: kv crosssize=9.44 MBsoundcore AeroClipwhisper_init_state: kv padsize2.36 MBwhisper_init_state: compute buffer (conv)14.17 MBLakyLak bose qc35 llwhisper_init_state: compute buffer (encode)65.96 MBwhisper_init_state: compute buffer (cross)8.50 MBM720 Triathlonwhisper_init_state: computebuffer (decode)=96.83 MB2026-05-22T10:23:47.405690ZINFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)Magic Keyboard2026-05-22110:23:47.4063382INFOscreenpipe_audio: :meeting_streaming::controller: meeting streaming:coordinator listening (provider=selecte2026-05-22T10:23:47.433579ZINFOMagic Keyboardscreenpipe_audio::audio_manager::manager: seeded 60 speakers(named + unnamed) from DB intoembedding manag2026-05-22T10:23:47.433654ZINFOscreenpipe_audio::audio_manager::manager: audio managerstarted2026-05-22110:23:47.4336862INFOSoundcore Life Dot 2 NCscreenpipe_audio::audio_manager::manager: calendar-assistedspeaker diarization: listening for meetingever2026-05-22T10:23:47.980858ZINFOscreenpipe_audio::device::device_manager: starting recording for device: System Audio (output)Bluetooth Settings...2026-05-22110:23:48.1055872INFOscreenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)2026-05-22T10:23:48.105714ZINFOscreenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)2026-05-22T10:23:48.105713ZINFOscreenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown/ 30s segments)2026-05-22T10:23:54.819299ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)2026-05-22T10:23:55.766541ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame+events (events arrived first) frame_id-68851 paired-1 still_pending=02026-05-22110:23:57.603821ZINFOsck_rs::stream_manager:2026-05-22T10:23:58.024382ZINFOpersistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id-68852 paired-1 still_pending=02026-05-22T10:23:58.493391ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame+events (events arrived first) frame_id-68854 paired-1 still_pending=22026-05-22110:23:59.2098542INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)2026-05-22T10:23:59.268980ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first)frame_id=68853 paired-2 still_pending=02026-05-22110:23:59.301677ZINFO2026-05-22T10:24:00.312589ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)screenpipe_engine::event_driven_capture: content dedup:2026-05-22T10:24:01.629957ZWARNskipping capture for monitor 1 (hash=5065144611963521308, trigger=click)screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.2026-05-22T10:24:01.913030ZINFOscreenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)2026-05-22T10:24:01.913814ZERRORscreenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)2026-05-22T10:24:02.190521ZWARN(input)screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone2026-05-22110:24:02.33557822026-05-22T10:24:02.335720Z2026-05-22T10:24:02.335834Z2026-05-22T10:24:07.635795Z2026-05-22T10:24:26.050807ZROM \nframes \nWHERE\nINFOscreenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)INFOscreenpipe_audio::audio_manager::device_monitor:[DEVICE_RECOVERY] input device restored,device=MacBook Pro Microphone (input)INFOscreenpipe_audio::core::run_record_and_transcribe: starting continuousrecording for MacBook Pro Microphone (input) (wired / 30ssegments)WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnectWARN sqlx::query:summary="SELECT id,snapshot_path, device_name,db.statement="\n\nSELECT\nid, \nsnapshot_path IS NOT NULL\nsnapshot_path,\ndevice_name, \ntimestamp\nFAND timestamp < ?1\nORDER BY\ndevice_name, \ntimestamp ASC\nLIMIT\n 5000\n" rows_affected-1 rows_returned-177 elapsed=3.2152587552026-05-22110:24:26.052106Z2026-05-22T10:24:30.114705Z2026-05-22T10:24:36.141906Z2026-05-22110:24:37.6878012INFOscreenpipe_engine::snapshot_compaction:snapshotcompaction: found 177 eligible framesINFOINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9X), 68 JPEGSscreenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deletedINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9X), 9 JPEGS deleted...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
68859
|
2468
|
1
|
2026-05-22T07:25:31.424821+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434731424_m2.jpg...
|
Control Centre
|
Control Centre
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 8 Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 87%
soundcore AeroClip
LakyLak bose qc35 II
M720 Triathlon
Magic Keyboard
Magic Keyboard
Soundcore Life Dot 2 NC
Bluetooth Settings…...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Bluetooth","depth":2,"bounds":{"left":0.6492686,"top":1.0,"width":0.02044548,"height":-0.034317613},"on_screen":true,"automation_id":"bluetooth-header","role_description":"text"},{"role":"AXCheckBox","text":"Bluetooth","depth":2,"bounds":{"left":0.72639626,"top":1.0,"width":0.012632979,"height":-0.031923413},"on_screen":true,"automation_id":"bluetooth-header","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false},{"role":"AXHeading","text":"Devices","depth":3,"bounds":{"left":0.6492686,"top":1.0,"width":0.015458777,"height":-0.065043926},"on_screen":true,"role_description":"heading"},{"role":"AXCheckBox","text":"Lukas’s Magic Mouse, 87%","depth":3,"bounds":{"left":0.6462766,"top":1.0,"width":0.095744684,"height":-0.07980847},"on_screen":true,"automation_id":"bluetooth-device-Lukas’s Magic Mouse","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"soundcore AeroClip","depth":3,"on_screen":true,"automation_id":"bluetooth-device-soundcore AeroClip","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"LakyLak bose qc35 II","depth":3,"on_screen":true,"automation_id":"bluetooth-device-LakyLak bose qc35 II","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"M720 Triathlon","depth":3,"on_screen":true,"automation_id":"bluetooth-device-M720 Triathlon","role_description":"toggle button","subrole":"AXToggle","is_enabled":false},{"role":"AXCheckBox","text":"Magic Keyboard","depth":3,"on_screen":true,"automation_id":"bluetooth-device-Magic Keyboard","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"Magic Keyboard","depth":3,"on_screen":true,"automation_id":"bluetooth-device-Magic Keyboard","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"Soundcore Life Dot 2 NC","depth":3,"on_screen":true,"automation_id":"bluetooth-device-Soundcore Life Dot 2 NC","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXButton","text":"Bluetooth Settings…","depth":2,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false}]...
|
9013788568056476015
|
-8929743010744432652
|
idle
|
hybrid
|
NULL
|
Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 8 Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 87%
soundcore AeroClip
LakyLak bose qc35 II
M720 Triathlon
Magic Keyboard
Magic Keyboard
Soundcore Life Dot 2 NC
Bluetooth Settings…
FV faVsco.js v?9 masterProjectMỀ CLAUDE.md& composer.json0 composer.lock0 dependency-checker.json0 dev.json= ids tytlE infection.json.distM-INSTALL.mdM+ INTERNAL_WEBHOOK_SETUP.mdEjiminny storageM+licenses.mom Makerileраскаqе-lock. sonE phpstan.neon.dist= phostan-baseline.neon<› phounit.xmliTe raw sal querv.saML README.mdso sonar-oroiect.oropertiesE test.py<> Untited Diadram.xmlI vetur.config.jsMJ WEBHOOK FILTERING IMPLEMENTATION.mo› ib External Librariesv = Scratches and Consolesv D Database ConsolesVASUA console (EU]A DEAL RISKS [EU]A DI [EU]A EU (EU]v A jiminny@localhostA console ljiminny@localhost]A DI [jiminny@localhost]A HS_local [jiminny@localhost]A SF [iiminny@localhostl& zoho dev liminny@localhostV A PRODA console (PROD]A console_1 [PROD]A DI (PROD]> ДOAA QAI> A QAI PRODSTAGINGA console [STAGiNGIA console 1 [STAGiNG)#uranus STAGINGI>• Extensions) M Scratches100% 10• rli zz May 10-20.3Propnetcllent.onpcetalActivity lypeviarropnetservice.onp© SyncRe© GenerateAiActivityTypewsnaredsyncrieldsIrait.onowsyncermrieldstrait.ongC) FieldRepository.phpActivityPlaybookTrait.php© ImportMetadata.php© CrmHelyclass GenerateAiActivityTypeServiceprivate function processAlActivityTypeResponse(arnay Scontent, $activityType = $this->playbookCategoryRepository->findByGrc$content['ai_activity_type'],sgroupif ($activityType === null) {$this->processingStateManager->setSkipped(sactivity->getldo,state: ActivityProcessingStateManager::STATE_AI_ACTI\sthns->loqger-sintorcinuD• ' Vetected Al ACtIvITY'activity' => Sactivity->getUuid(),sthis->loalolatadod Sactivity.isDetected: "No')return:Sthis->activityRepository->update($activity, ('playbook_category_id' = $activityType->getId(),151153$this->LogToDatadog(Sactivity,isDetected: IVec1)*$this->processingStateManager->setFinishedC$activity->getId(),state: ActivityProcessingStateManager::STATE_AI_ACTIVITY_);private function loaToDatadog(Activity Sactivity. string SisDet•• C0, Chat:= Cowork" Code+ New chat6 Projects8 Artifactse CustomizePinned• Bulgarian citizenship application proDawarich location tracking projectKecents• Screenpipe module not found error• Interactive language learning throus• Recent love experiences• Cities visited this year• Did I drive today• Last visit to Lovech• Monthlv spending breakdown and re• Swimming visits this vear• Screenpipe prune database vacuum e• Marking text locations in Screenpipe• Updating packages in Laravel• Screenpipe data sync and retention n• Screenpipe svnc script failing after reO Hubsnot BadRequest headers debug• Monthly expense tracking• Exporting transaction data from Notil• @ How much have I spent for groc.• April 2026 spending by category• Code diff review@ HubSoot rate limit imolementation stiScreenpipe module not found errorlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $npxscreenpipe@latest recordinternal/modules/cjs/loader.js:883inrow ertrError: Cannot find module 'node:child_process'Require stack:/cerc/lukac/nnm/nnyl47257/lih/node modulac/ccreonnine/ccrinte/moctinctaShow moreThought for 5s>Ihat's not a screenpipe bug — it's your Node.js version. Une node: child process syntax (thenode: prefix for built-in modules) requires Node 14.18+ / 16+, and your stack traceCanternal/modules/cis/loader.1s:880.0d nom ERR. format. nox cache daun_npx/47357/ ) is classic Node 12.x.Check what you've got:bashnode -vwhich nodeI'd bet on v12.x. Fix by upgrading. If you're on nvm:Reply +120.default 20nvm use 20itBomehrew.brew upgrade nodeIf neither, install nvm — it's the cleanest way to manage Node on the Mac, especially since youswitch between work projects.After upgrading, clear the stale npx cache before retrying so it doesn't reuse the broken install:Write a messageRelaunch to updatelK lukas. ProOous 4. Adaptive vCiaude ic Aland can make mictakas Plesce doublo-chork recnoncod...
|
68855
|
NULL
|
NULL
|
NULL
|
|
68860
|
2467
|
1
|
2026-05-22T07:25:31.822827+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434731822_m1.jpg...
|
Control Centre
|
Control Centre
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 8 Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 87%
soundcore AeroClip
LakyLak bose qc35 II
M720 Triathlon
Magic Keyboard
Magic Keyboard
Soundcore Life Dot 2 NC
Bluetooth Settings…...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Bluetooth","depth":2,"bounds":{"left":0.7916667,"top":0.04777778,"width":0.042708334,"height":0.017777778},"on_screen":true,"automation_id":"bluetooth-header","role_description":"text"},{"role":"AXCheckBox","text":"Bluetooth","depth":2,"bounds":{"left":0.9527778,"top":0.044444446,"width":0.02638889,"height":0.024444444},"on_screen":true,"automation_id":"bluetooth-header","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false},{"role":"AXHeading","text":"Devices","depth":3,"bounds":{"left":0.7916667,"top":0.090555556,"width":0.032291666,"height":0.016666668},"on_screen":true,"role_description":"heading"},{"role":"AXCheckBox","text":"Lukas’s Magic Mouse, 87%","depth":3,"bounds":{"left":0.78541666,"top":0.11111111,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-Lukas’s Magic Mouse","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"soundcore AeroClip","depth":3,"bounds":{"left":0.78541666,"top":0.14666666,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-soundcore AeroClip","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"LakyLak bose qc35 II","depth":3,"bounds":{"left":0.78541666,"top":0.18222222,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-LakyLak bose qc35 II","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"M720 Triathlon","depth":3,"bounds":{"left":0.78541666,"top":0.21777777,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-M720 Triathlon","role_description":"toggle button","subrole":"AXToggle","is_enabled":false},{"role":"AXCheckBox","text":"Magic Keyboard","depth":3,"bounds":{"left":0.78541666,"top":0.25333333,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-Magic Keyboard","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"Magic Keyboard","depth":3,"bounds":{"left":0.78541666,"top":0.2888889,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-Magic Keyboard","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXCheckBox","text":"Soundcore Life Dot 2 NC","depth":3,"bounds":{"left":0.78541666,"top":0.32444444,"width":0.2,"height":0.035555556},"on_screen":true,"automation_id":"bluetooth-device-Soundcore Life Dot 2 NC","role_description":"toggle button","subrole":"AXToggle","is_enabled":true},{"role":"AXButton","text":"Bluetooth Settings…","depth":2,"bounds":{"left":0.78541666,"top":0.37555555,"width":0.09791667,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false}]...
|
9013788568056476015
|
-8929743010744432652
|
idle
|
hybrid
|
NULL
|
Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 8 Bluetooth
Bluetooth
Devices
Lukas’s Magic Mouse, 87%
soundcore AeroClip
LakyLak bose qc35 II
M720 Triathlon
Magic Keyboard
Magic Keyboard
Soundcore Life Dot 2 NC
Bluetooth Settings…
iTerm2ShellEditViewSessionScriptsProfilesWindowHelplablA100% C8•Fri 22 May 10:25:31screenpipe"BluetoothDOCKERO 81DEV (-zsh)O $82APP (-zsh)83screenpipe*84-zshggml_metal_init:usegraph optimizetrueDeviceswhisper_backend_init:using BLASbackendwhisper_init_state: kv selfsize=3.15 MBLukas's Magic Mouse87%0whisper_init_state: kv crosssize=9.44 MBsoundcore AeroClipwhisper_init_state: kv padsize2.36 MBwhisper_init_state: compute buffer (conv)14.17 MBLakyLak bose qc35 llwhisper_init_state: compute buffer (encode)65.96 MBwhisper_init_state: compute buffer (cross)8.50 MBM720 Triathlonwhisper_init_state: computebuffer (decode)=96.83 MB2026-05-22T10:23:47.405690ZINFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)Magic Keyboard2026-05-22110:23:47.4063382INFOscreenpipe_audio: :meeting_streaming::controller: meeting streaming:coordinator listening (provider=selecte2026-05-22T10:23:47.433579ZINFOMagic Keyboardscreenpipe_audio::audio_manager::manager: seeded 60 speakers(named + unnamed) from DB intoembedding manag2026-05-22T10:23:47.433654ZINFOscreenpipe_audio::audio_manager::manager: audio managerstarted2026-05-22110:23:47.4336862INFOSoundcore Life Dot 2 NCscreenpipe_audio::audio_manager::manager: calendar-assistedspeaker diarization: listening for meetingever2026-05-22T10:23:47.980858ZINFOscreenpipe_audio::device::device_manager: starting recording for device: System Audio (output)Bluetooth Settings...2026-05-22110:23:48.1055872INFOscreenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)2026-05-22T10:23:48.105714ZINFOscreenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)2026-05-22T10:23:48.105713ZINFOscreenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown/ 30s segments)2026-05-22T10:23:54.819299ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)2026-05-22T10:23:55.766541ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame+events (events arrived first) frame_id-68851 paired-1 still_pending=02026-05-22110:23:57.603821ZINFOsck_rs::stream_manager:2026-05-22T10:23:58.024382ZINFOpersistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id-68852 paired-1 still_pending=02026-05-22T10:23:58.493391ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame+events (events arrived first) frame_id-68854 paired-1 still_pending=22026-05-22110:23:59.2098542INFOscreenpipe_engine::event_driven_capture: content dedup:skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)2026-05-22T10:23:59.268980ZINFOscreenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (eventsarrived first)frame_id=68853 paired-2 still_pending=02026-05-22110:23:59.301677ZINFO2026-05-22T10:24:00.312589ZINFOscreenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)screenpipe_engine::event_driven_capture: content dedup:2026-05-22T10:24:01.629957ZWARNskipping capture for monitor 1 (hash=5065144611963521308, trigger=click)screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.2026-05-22T10:24:01.913030ZINFOscreenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)2026-05-22T10:24:01.913814ZERRORscreenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)2026-05-22T10:24:02.190521ZWARN(input)screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone2026-05-22110:24:02.33557822026-05-22T10:24:02.335720Z2026-05-22T10:24:02.335834Z2026-05-22T10:24:07.635795Z2026-05-22T10:24:26.050807ZROM \nframes \nWHERE\nINFOscreenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)INFOscreenpipe_audio::audio_manager::device_monitor:[DEVICE_RECOVERY] input device restored,device=MacBook Pro Microphone (input)INFOscreenpipe_audio::core::run_record_and_transcribe: starting continuousrecording for MacBook Pro Microphone (input) (wired / 30ssegments)WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnectWARN sqlx::query:summary="SELECT id,snapshot_path, device_name,db.statement="\n\nSELECT\nid, \nsnapshot_path IS NOT NULL\nsnapshot_path,\ndevice_name, \ntimestamp\nFAND timestamp < ?1\nORDER BY\ndevice_name, \ntimestamp ASC\nLIMIT\n 5000\n" rows_affected-1 rows_returned-177 elapsed=3.2152587552026-05-22110:24:26.052106Z2026-05-22T10:24:30.114705Z2026-05-22T10:24:36.141906Z2026-05-22110:24:37.6878012INFOscreenpipe_engine::snapshot_compaction:snapshotcompaction: found 177 eligible framesINFOINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9X), 68 JPEGSscreenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deletedINFOscreenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9X), 9 JPEGS deleted...
|
68858
|
NULL
|
NULL
|
NULL
|
|
68861
|
2467
|
2
|
2026-05-22T07:26:01.546793+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434761546_m1.jpg...
|
Claude
|
Claude
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp<lahl100% <48•Fri 22 May 10:26:01DOCKERO 81DEV (-zsh)O $82whisper_init_state: kv padsize2.36 MBwhisper_init_state: compute buffer (conv)whisper_init_state: computebuffer (encode)whisper_init_state: compute buffer (cross)whisper_init_state:compute buffer (decode)14.17 MB65.96 MB8.50 MB96.83 MBggml_metal_free: deallocatingwhisper_backend_init_gpu: device 0: Metal (type:1)whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)whisper_backend_init_gpu: using Metal backendggml_metal_init: allocatingggml_metal_init: found device:Apple M1ggml_metal_init: picking default device: Apple M1ggml_metal_init: use fusiontrueggml_metal_init: use concurrencytrueggml_metal_init: use graph optimizetruewhisper_backend_init: using BLAS backendwhisper_init_state: kv selfsize3.15 MBwhisper_init_state: kv cross size =9.44 MBwhisper_init_state: kv padsize=2.36 MBwhisper_init_state: compute buffer (conv)=whisper_init_state: compute buffer (encode) =whisper_init_state: compute buffer (cross)=whisper_init_state: compute buffer (decode) =14.17 MB65.96 MB8.50 MB96.83 MBggml_metal_free: deallocatingwhisper_backend_init_gpu: device 0: Metal (type: 1)whisper_backend_init_gpu: found GPUdevice 0: Metal (type: 1, cnt: 0)whisper_backend_init_gpu: using Metal backendggml_metal_init: allocatingggml_metal_init: found device: Apple M1ggml_metal_init: picking default device: Apple M1ggml_metal_init: use fusion= trueggml_metal_init: use concurrencytrueggml_metal_init: use graph optimize =truewhisper_backend_init: using BLAS backendwhisper_init_state: kv self size3.15 MBwhisper_init_state: kv cross size =9.44 MBwhisper_init_state: kv padsize=2.36 MBwhisper_init_state: compute buffer (conv)=whisper_init_state: compute buffer (encode) =whisper_init_state: compute buffer (cross)=whisper_init_state: compute buffer (decode) =14.17 MB65.96 MB8.50 MB96.83 MBggml_metal_free: deallocating2026-05-22T10:25:50.391374Z2026-05-22110:25:51.0496782APP (-zsh)screenpipe"*3Bluetoothscreenpipe"*4-zshDevicesLukas's Magic Mouse87%©soundcore AeroClipLakyLak bose qc35 llM720 TriathlonMagic KeyboardMagic KeyboardSoundcore Life Dot 2 NCBluetooth Settings...INFO screenpipe_audio::audio_manager: :manager: reconciliation: transcribed 50 orphaned chunksINFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)...
|
NULL
|
-273174726946324819
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp<lahl100% <48•Fri 22 May 10:26:01DOCKERO 81DEV (-zsh)O $82whisper_init_state: kv padsize2.36 MBwhisper_init_state: compute buffer (conv)whisper_init_state: computebuffer (encode)whisper_init_state: compute buffer (cross)whisper_init_state:compute buffer (decode)14.17 MB65.96 MB8.50 MB96.83 MBggml_metal_free: deallocatingwhisper_backend_init_gpu: device 0: Metal (type:1)whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)whisper_backend_init_gpu: using Metal backendggml_metal_init: allocatingggml_metal_init: found device:Apple M1ggml_metal_init: picking default device: Apple M1ggml_metal_init: use fusiontrueggml_metal_init: use concurrencytrueggml_metal_init: use graph optimizetruewhisper_backend_init: using BLAS backendwhisper_init_state: kv selfsize3.15 MBwhisper_init_state: kv cross size =9.44 MBwhisper_init_state: kv padsize=2.36 MBwhisper_init_state: compute buffer (conv)=whisper_init_state: compute buffer (encode) =whisper_init_state: compute buffer (cross)=whisper_init_state: compute buffer (decode) =14.17 MB65.96 MB8.50 MB96.83 MBggml_metal_free: deallocatingwhisper_backend_init_gpu: device 0: Metal (type: 1)whisper_backend_init_gpu: found GPUdevice 0: Metal (type: 1, cnt: 0)whisper_backend_init_gpu: using Metal backendggml_metal_init: allocatingggml_metal_init: found device: Apple M1ggml_metal_init: picking default device: Apple M1ggml_metal_init: use fusion= trueggml_metal_init: use concurrencytrueggml_metal_init: use graph optimize =truewhisper_backend_init: using BLAS backendwhisper_init_state: kv self size3.15 MBwhisper_init_state: kv cross size =9.44 MBwhisper_init_state: kv padsize=2.36 MBwhisper_init_state: compute buffer (conv)=whisper_init_state: compute buffer (encode) =whisper_init_state: compute buffer (cross)=whisper_init_state: compute buffer (decode) =14.17 MB65.96 MB8.50 MB96.83 MBggml_metal_free: deallocating2026-05-22T10:25:50.391374Z2026-05-22110:25:51.0496782APP (-zsh)screenpipe"*3Bluetoothscreenpipe"*4-zshDevicesLukas's Magic Mouse87%©soundcore AeroClipLakyLak bose qc35 llM720 TriathlonMagic KeyboardMagic KeyboardSoundcore Life Dot 2 NCBluetooth Settings...INFO screenpipe_audio::audio_manager: :manager: reconciliation: transcribed 50 orphaned chunksINFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)...
|
68858
|
NULL
|
NULL
|
NULL
|
|
68862
|
2468
|
2
|
2026-05-22T07:26:01.438438+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434761438_m2.jpg...
|
Claude
|
Claude
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FV faVsco.js v?9 masterProjectMỀ CLAUDE.md& co FV faVsco.js v?9 masterProjectMỀ CLAUDE.md& composer.json0 composer.lock0 dependency-checker.json0 dev.json= ids tytlE infection.json.distM-INSTALL.mdM+ INTERNAL_WEBHOOK_SETUP.mdEjiminny storageM+licenses.mom Makerileраскаqе-lock. sonE phpstan.neon.dist= phostan-baseline.neon<› phounit.xmliTe raw sal querv.saML README.mdso sonar-oroiect.oropertiesE test.py<> Untited Diadram.xmlI vetur.config.jsMJ WEBHOOK FILTERING IMPLEMENTATION.mo› ib External Librariesv = Scratches and Consolesv D Database ConsolesVASUA console (EU]A DEAL RISKS [EU]A DI [EU]A EU (EU]v A jiminny@localhostA console ljiminny@localhost]A DI [jiminny@localhost]A HS_local [jiminny@localhost]A SF [iiminny@localhostl& zoho dev liminny@localhostV A PRODA console (PROD]A console_1 [PROD]A DI (PROD]> ДOAA QAI> A QAI PRODSTAGINGA console [STAGiNGIA console 1 [STAGiNG)#uranus STAGINGI>• Extensions) M Scratches100% 1• rli zz May 10-20:00Propnetcllent.onpcetalActivity lypeviarropnetservice.onp© SyncRe© GenerateAiActivityTypewsnaredsyncrieldsIrait.onowsyncermrieldstrait.ongC) FieldRepository.phpActivityPlaybookTrait.php© ImportMetadata.php© CrmHelyclass GenerateAiActivityTypeServiceprivate function processAlActivityTypeResponse(arnay Scontent, $activityType = $this->playbookCategoryRepository->findByGrc$content['ai_activity_type'],sgroupif ($activityType === null) {$this->processingStateManager->setSkipped(sactivity->getldo,state: ActivityProcessingStateManager::STATE_AI_ACTI\sthns->loqger-sintorcinuD• ' Vetected Al ACtIvITY'activity' => Sactivity->getUuid(),sthis->loalolatadod Sactivity.isDetected: "No')return:Sthis->activityRepository->update($activity, ('playbook_category_id' = $activityType->getId(),151153$this->LogToDatadog(Sactivity,isDetected: IVec1)*$this->processingStateManager->setFinishedC$activity->getId(),state: ActivityProcessingStateManager::STATE_AI_ACTIVITY_);private function loaToDatadog(Activity Sactivity. string SisDet•• C0, Chat:= Cowork" Code+ New chat6 Projects8 Artifactse CustomizePinned• Bulgarian citizenship application proDawarich location tracking projectKecents• Screenpipe module not found error• Interactive language learning throus• Recent love experiences• Cities visited this year• Did I drive today• Last visit to Lovech• Monthlv spending breakdown and re• Swimming visits this vear• Screenpipe prune database vacuum e• Marking text locations in Screenpipe• Updating packages in Laravel• Screenpipe data sync and retention n• Screenpipe svnc script failing after reO Hubsnot BadRequest headers debug• Monthly expense tracking• Exporting transaction data from Notil• @ How much have I spent for groc.• April 2026 spending by category• Code diff review@ HubSoot rate limit imolementation stiScreenpipe module not found errorlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $npxscreenpipe@latest recordinternal/modules/cjs/loader.js:883inrow ertrError: Cannot find module 'node:child_process'Require stack:/cerc/lukac/nnm/nnyl47257/lih/node modulac/ccreonnine/ccrinte/moctinctaShow moreThought for 5s>Ihat's not a screenpipe bug — it's your Node.js version. Une node: child process syntax (thenode: prefix for built-in modules) requires Node 14.18+ / 16+, and your stack traceCanternal/modules/cis/loader.1s:880.0d nom ERR. format. nox cache daun_npx/47357/ ) is classic Node 12.x.Check what you've got:bashnode -vwhich nodeI'd bet on v12.x. Fix by upgrading. If you're on nvm:Reply +120.default 20nvm use 20itBomehrew.brew upgrade nodeIf neither, install nvm — it's the cleanest way to manage Node on the Mac, especially since youswitch between work projects.After upgrading, clear the stale npx cache before retrying so it doesn't reuse the broken install:Write a messageRelaunch to updatelK lukas. ProOous 4. Adaptive vCiaude ic Aland can make mictakas Plesce doublo-chork recnoncod...
|
NULL
|
-7794432612878169664
|
NULL
|
click
|
ocr
|
NULL
|
FV faVsco.js v?9 masterProjectMỀ CLAUDE.md& co FV faVsco.js v?9 masterProjectMỀ CLAUDE.md& composer.json0 composer.lock0 dependency-checker.json0 dev.json= ids tytlE infection.json.distM-INSTALL.mdM+ INTERNAL_WEBHOOK_SETUP.mdEjiminny storageM+licenses.mom Makerileраскаqе-lock. sonE phpstan.neon.dist= phostan-baseline.neon<› phounit.xmliTe raw sal querv.saML README.mdso sonar-oroiect.oropertiesE test.py<> Untited Diadram.xmlI vetur.config.jsMJ WEBHOOK FILTERING IMPLEMENTATION.mo› ib External Librariesv = Scratches and Consolesv D Database ConsolesVASUA console (EU]A DEAL RISKS [EU]A DI [EU]A EU (EU]v A jiminny@localhostA console ljiminny@localhost]A DI [jiminny@localhost]A HS_local [jiminny@localhost]A SF [iiminny@localhostl& zoho dev liminny@localhostV A PRODA console (PROD]A console_1 [PROD]A DI (PROD]> ДOAA QAI> A QAI PRODSTAGINGA console [STAGiNGIA console 1 [STAGiNG)#uranus STAGINGI>• Extensions) M Scratches100% 1• rli zz May 10-20:00Propnetcllent.onpcetalActivity lypeviarropnetservice.onp© SyncRe© GenerateAiActivityTypewsnaredsyncrieldsIrait.onowsyncermrieldstrait.ongC) FieldRepository.phpActivityPlaybookTrait.php© ImportMetadata.php© CrmHelyclass GenerateAiActivityTypeServiceprivate function processAlActivityTypeResponse(arnay Scontent, $activityType = $this->playbookCategoryRepository->findByGrc$content['ai_activity_type'],sgroupif ($activityType === null) {$this->processingStateManager->setSkipped(sactivity->getldo,state: ActivityProcessingStateManager::STATE_AI_ACTI\sthns->loqger-sintorcinuD• ' Vetected Al ACtIvITY'activity' => Sactivity->getUuid(),sthis->loalolatadod Sactivity.isDetected: "No')return:Sthis->activityRepository->update($activity, ('playbook_category_id' = $activityType->getId(),151153$this->LogToDatadog(Sactivity,isDetected: IVec1)*$this->processingStateManager->setFinishedC$activity->getId(),state: ActivityProcessingStateManager::STATE_AI_ACTIVITY_);private function loaToDatadog(Activity Sactivity. string SisDet•• C0, Chat:= Cowork" Code+ New chat6 Projects8 Artifactse CustomizePinned• Bulgarian citizenship application proDawarich location tracking projectKecents• Screenpipe module not found error• Interactive language learning throus• Recent love experiences• Cities visited this year• Did I drive today• Last visit to Lovech• Monthlv spending breakdown and re• Swimming visits this vear• Screenpipe prune database vacuum e• Marking text locations in Screenpipe• Updating packages in Laravel• Screenpipe data sync and retention n• Screenpipe svnc script failing after reO Hubsnot BadRequest headers debug• Monthly expense tracking• Exporting transaction data from Notil• @ How much have I spent for groc.• April 2026 spending by category• Code diff review@ HubSoot rate limit imolementation stiScreenpipe module not found errorlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $npxscreenpipe@latest recordinternal/modules/cjs/loader.js:883inrow ertrError: Cannot find module 'node:child_process'Require stack:/cerc/lukac/nnm/nnyl47257/lih/node modulac/ccreonnine/ccrinte/moctinctaShow moreThought for 5s>Ihat's not a screenpipe bug — it's your Node.js version. Une node: child process syntax (thenode: prefix for built-in modules) requires Node 14.18+ / 16+, and your stack traceCanternal/modules/cis/loader.1s:880.0d nom ERR. format. nox cache daun_npx/47357/ ) is classic Node 12.x.Check what you've got:bashnode -vwhich nodeI'd bet on v12.x. Fix by upgrading. If you're on nvm:Reply +120.default 20nvm use 20itBomehrew.brew upgrade nodeIf neither, install nvm — it's the cleanest way to manage Node on the Mac, especially since youswitch between work projects.After upgrading, clear the stale npx cache before retrying so it doesn't reuse the broken install:Write a messageRelaunch to updatelK lukas. ProOous 4. Adaptive vCiaude ic Aland can make mictakas Plesce doublo-chork recnoncod...
|
68855
|
NULL
|
NULL
|
NULL
|
|
68863
|
2467
|
3
|
2026-05-22T07:26:03.355757+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434763355_m1.jpg...
|
Claude
|
Claude
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Skip to content
Skip to content
Collapse sidebar
S Skip to content
Skip to content
Collapse sidebar
Search
Chat
Cowork
Code
New chat
Projects
Artifacts
Customize
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
Screenpipe module not found error
More options for Screenpipe module not found error
Interactive language learning through movies
More options for Interactive language learning through movies
Recent love experiences
More options for Recent love experiences
Cities visited this year
More options for Cities visited this year
Did I drive today
More options for Did I drive today
Last visit to Lovech
More options for Last visit to Lovech
Monthly spending breakdown and regular expenses
More options for Monthly spending breakdown and regular expenses
Swimming visits this year
More options for Swimming visits this year
Screenpipe prune database vacuum error
More options for Screenpipe prune database vacuum error
Marking text locations in Screenpipe frames
More options for Marking text locations in Screenpipe frames
Updating packages in Laravel
More options for Updating packages in Laravel
Screenpipe data sync and retention management
More options for Screenpipe data sync and retention management
Screenpipe sync script failing after recent migrations
More options for Screenpipe sync script failing after recent migrations
Hubspot BadRequest headers debugging
More options for Hubspot BadRequest headers debugging
Monthly expense tracking
More options for Monthly expense tracking
Exporting transaction data from Notion to finance hub
More options for Exporting transaction data from Notion to finance hub
💬 How much have I spent for groc…
More options for 💬 How much have I spent for groc…
April 2026 spending by category
More options for April 2026 spending by category
Code diff review
More options for Code diff review
HubSpot rate limit implementation strategy
More options for HubSpot rate limit implementation strategy
Relaunch to update v1.8089.1
Relaunch to update
v1.8089.1
Lukas Pro
Get apps and extensions
Screenpipe module not found error, rename chat
Screenpipe module not found error
More options for Screenpipe module not found error
Share chat
Claude finished the response
You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall:
node scripts/postinstall.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1 why is there error in screenpipe
Show more
10:21
Retry
Edit
Copy
Claude responded: That's not a Screenpipe bug — it's your Node.
Claude responded: That's not a Screenpipe bug — it's your Node.
Thought for 5s
Thought for 5s
That's not a Screenpipe bug — it's your Node.js version. The
node:child_process
syntax (the
node:
prefix for built-in modules) requires Node 14.18+ / 16+, and your stack trace (
internal/modules/cjs/loader.js:880
, old
npm ERR!
format, npx cache path
_npx/47357/
) is classic Node 12.x.
Check what you've got:
Copy to clipboard
bash
node
-v
which
node
I'd bet on v12.x. Fix by upgrading. If you're on nvm:
Copy to clipboard
bash
nvm
install
20
nvm
alias
default
20
nvm use
20
If Homebrew:
Copy to clipboard
bash
brew upgrade
node
If neither, install nvm — it's the cleanest way to manage Node on the Mac, especially since you switch between work projects.
After upgrading, clear the stale npx cache before retrying so it doesn't reuse the broken install:
Copy to clipboard
bash
rm
-rf ~/.npm/_npx
npx screenpipe@latest record --disable-audio --ignored-windows
"Boosteroid"
--retention-days
7
One thing worth noting — your Jiminny Laravel work probably runs on a specific Node version via the project's
.nvmrc
or
package.json
engines field. Upgrading the system/default Node shouldn't break that as long as nvm respects the project pin, but worth a sanity check (
yarn install
/
npm install
in the app repo after upgrading).
Copy
Give positive feedback
Give negative feedback
Retry
Write a message…
Write a message…
Add files, connectors, and more
Model: Opus 4.7 Adaptive
Opus 4.7
Adaptive
Settings
Press and hold to record
Use voice mode
Claude is AI and can make mistakes. Please double-check responses.
Claude is AI and can make mistakes. Please double-check responses.
Reply...
|
[{"role":"AXLink","text":& [{"role":"AXLink","text":"Skip to content","depth":14,"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Skip to content","depth":15,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Collapse sidebar","depth":15,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search","depth":15,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cowork","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New chat","depth":15,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Projects","depth":15,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Artifacts","depth":15,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":15,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pinned","depth":16,"on_screen":true,"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":18,"on_screen":true,"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":19,"on_screen":true,"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":18,"on_screen":true,"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":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Recents","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXButton","text":"View all","depth":16,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe module not found error","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe module not found error","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Interactive language learning through movies","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Interactive language learning through movies","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Recent love experiences","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Recent love experiences","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cities visited this year","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Cities visited this year","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Did I drive today","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Did I drive today","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Last visit to Lovech","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Last visit to Lovech","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Monthly spending breakdown and regular expenses","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Monthly spending breakdown and regular expenses","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Swimming visits this year","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Swimming visits this year","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe prune database vacuum error","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe prune database vacuum error","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Marking text locations in Screenpipe frames","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Marking text locations in Screenpipe frames","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Updating packages in Laravel","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Updating packages in Laravel","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe data sync and retention management","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe data sync and retention management","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe sync script failing after recent migrations","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe sync script failing after recent migrations","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hubspot BadRequest headers debugging","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Hubspot BadRequest headers debugging","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Monthly expense tracking","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Monthly expense tracking","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Exporting transaction data from Notion to finance hub","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Exporting transaction data from Notion to finance hub","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"💬 How much have I spent for groc…","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for 💬 How much have I spent for groc…","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"April 2026 spending by category","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for April 2026 spending by category","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code diff review","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Code diff review","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HubSpot rate limit implementation strategy","depth":18,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for HubSpot rate limit implementation strategy","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Relaunch to update v1.8089.1","depth":15,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Relaunch to update","depth":16,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"v1.8089.1","depth":16,"bounds":{"left":0.18402778,"top":0.0,"width":0.03125,"height":0.015555556},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.18402778,"top":0.0,"width":0.004166667,"height":0.015555556}},{"char_start":1,"char_count":8,"bounds":{"left":0.18819444,"top":0.0,"width":0.027083334,"height":0.015555556}}],"role_description":"text"},{"role":"AXPopUpButton","text":"Lukas Pro","depth":15,"bounds":{"left":0.14583333,"top":0.0,"width":0.16458334,"height":0.026666667},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Get apps and extensions","depth":15,"bounds":{"left":0.3125,"top":0.0,"width":0.016666668,"height":0.026666667},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe module not found error, rename chat","depth":19,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe module not found error","depth":21,"on_screen":true,"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Screenpipe module not found error","depth":19,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share chat","depth":21,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Claude finished the response","depth":21,"on_screen":true,"role_description":"text"},{"role":"AXHeading","text":"You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record","depth":20,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record","depth":21,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall:","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"node scripts/postinstall.js","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"npm ERR! Exit status 1\nnpm ERR!\nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1 why is there error in screenpipe","depth":24,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Show more","depth":22,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:21","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":22,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":22,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Claude responded: That's not a Screenpipe bug — it's your Node.","depth":21,"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"Claude responded: That's not a Screenpipe bug — it's your Node.","depth":22,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Thought for 5s","depth":22,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thought for 5s","depth":23,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"That's not a Screenpipe bug — it's your Node.js version. The","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"node:child_process","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"syntax (the","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"node:","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"prefix for built-in modules) requires Node 14.18+ / 16+, and your stack trace (","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"internal/modules/cjs/loader.js:880","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":", old","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"npm ERR!","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"format, npx cache path","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"_npx/47357/","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":") is classic Node 12.x.","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Check what you've got:","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"node","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"-v","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"which","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"node","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I'd bet on v12.x. Fix by upgrading. If you're on nvm:","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"nvm","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"install","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"20","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"nvm","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alias","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"default","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"20","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"nvm use","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"20","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"If Homebrew:","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"brew upgrade","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"node","depth":27,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"If neither, install nvm — it's the cleanest way to manage Node on the Mac, especially since you switch between work projects.","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"After upgrading, clear the stale npx cache before retrying so it doesn't reuse the broken install:","depth":25,"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":27,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":26,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"rm","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"-rf ~/.npm/_npx","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"npx screenpipe@latest record --disable-audio --ignored-windows","depth":28,"bounds":{"left":0.68680555,"top":0.0,"width":0.31319445,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid\"","depth":28,"bounds":{"left":1.0,"top":0.0,"width":-0.054166675,"height":0.02},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"--retention-days","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"7","depth":28,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"One thing worth noting — your Jiminny Laravel work probably runs on a specific Node version via the project's","depth":25,"bounds":{"left":0.6826389,"top":0.0,"width":0.31736112,"height":0.033333335},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.6826389,"top":0.0,"width":0.009027778,"height":0.022222223}},{"char_start":1,"char_count":108,"bounds":{"left":0.6826389,"top":0.0,"width":0.31736112,"height":0.04888889}}],"role_description":"text"},{"role":"AXStaticText","text":".nvmrc","depth":26,"bounds":{"left":0.8090278,"top":0.0,"width":0.036111113,"height":0.0044444446},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"or","depth":25,"bounds":{"left":0.84791666,"top":0.0,"width":0.015277778,"height":0.006666667},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"package.json","depth":26,"bounds":{"left":0.8659722,"top":0.0,"width":0.072916664,"height":0.0044444446},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engines field. Upgrading the system/default Node shouldn't break that as long as nvm respects the project pin, but worth a sanity check (","depth":25,"bounds":{"left":0.6826389,"top":0.0,"width":0.31736112,"height":0.006666667},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"yarn install","depth":26,"bounds":{"left":0.75625,"top":0.0,"width":0.072916664,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"/","depth":25,"bounds":{"left":0.83194447,"top":0.0,"width":0.008333334,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"npm install","depth":26,"bounds":{"left":0.84305555,"top":0.0,"width":0.065972224,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"in the app repo after upgrading).","depth":25,"bounds":{"left":0.91180557,"top":0.0,"width":0.08819443,"height":0.0011111111},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.6770833,"top":0.0,"width":0.022222223,"height":0.0011111111},"on_screen":true,"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.69930553,"top":0.0,"width":0.022222223,"height":0.0011111111},"on_screen":true,"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.72152776,"top":0.0,"width":0.022222223,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":22,"bounds":{"left":0.74375,"top":0.0,"width":0.022222223,"height":0.0011111111},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Write a message…","depth":25,"on_screen":true,"value":"Write a message…","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Write a message…","depth":28,"on_screen":true,"role_description":"text"},{"role":"AXPopUpButton","text":"Add files, connectors, and more","depth":27,"bounds":{"left":0.67777777,"top":0.0,"width":0.022222223,"height":0.035555556},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Model: Opus 4.7 Adaptive","depth":26,"bounds":{"left":1.0,"top":0.0,"width":-0.024305582,"height":0.035555556},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Opus 4.7","depth":28,"bounds":{"left":1.0,"top":0.0,"width":-0.03125,"height":0.018888889},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Adaptive","depth":28,"bounds":{"left":1.0,"top":0.0,"width":-0.074305534,"height":0.018888889},"on_screen":true,"role_description":"text"},{"role":"AXPopUpButton","text":"Settings","depth":26,"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Press and hold to record","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Use voice mode","depth":25,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Claude is AI and can make mistakes. Please double-check responses.","depth":22,"bounds":{"left":0.7986111,"top":0.0,"width":0.2013889,"height":0.016666668},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Claude is AI and can make mistakes. Please double-check responses.","depth":23,"bounds":{"left":0.7986111,"top":0.0,"width":0.2013889,"height":0.016666668},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7986111,"top":0.0,"width":0.00625,"height":0.016666668}},{"char_start":1,"char_count":65,"bounds":{"left":0.8048611,"top":0.0,"width":0.19513887,"height":0.016666668}}],"role_description":"text"},{"role":"AXButton","text":"Reply","depth":11,"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-2856705854964656898
|
1385911679203593238
|
visual_change
|
accessibility
|
NULL
|
Skip to content
Skip to content
Collapse sidebar
S Skip to content
Skip to content
Collapse sidebar
Search
Chat
Cowork
Code
New chat
Projects
Artifacts
Customize
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
Screenpipe module not found error
More options for Screenpipe module not found error
Interactive language learning through movies
More options for Interactive language learning through movies
Recent love experiences
More options for Recent love experiences
Cities visited this year
More options for Cities visited this year
Did I drive today
More options for Did I drive today
Last visit to Lovech
More options for Last visit to Lovech
Monthly spending breakdown and regular expenses
More options for Monthly spending breakdown and regular expenses
Swimming visits this year
More options for Swimming visits this year
Screenpipe prune database vacuum error
More options for Screenpipe prune database vacuum error
Marking text locations in Screenpipe frames
More options for Marking text locations in Screenpipe frames
Updating packages in Laravel
More options for Updating packages in Laravel
Screenpipe data sync and retention management
More options for Screenpipe data sync and retention management
Screenpipe sync script failing after recent migrations
More options for Screenpipe sync script failing after recent migrations
Hubspot BadRequest headers debugging
More options for Hubspot BadRequest headers debugging
Monthly expense tracking
More options for Monthly expense tracking
Exporting transaction data from Notion to finance hub
More options for Exporting transaction data from Notion to finance hub
💬 How much have I spent for groc…
More options for 💬 How much have I spent for groc…
April 2026 spending by category
More options for April 2026 spending by category
Code diff review
More options for Code diff review
HubSpot rate limit implementation strategy
More options for HubSpot rate limit implementation strategy
Relaunch to update v1.8089.1
Relaunch to update
v1.8089.1
Lukas Pro
Get apps and extensions
Screenpipe module not found error, rename chat
Screenpipe module not found error
More options for Screenpipe module not found error
Share chat
Claude finished the response
You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall:
node scripts/postinstall.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1 why is there error in screenpipe
Show more
10:21
Retry
Edit
Copy
Claude responded: That's not a Screenpipe bug — it's your Node.
Claude responded: That's not a Screenpipe bug — it's your Node.
Thought for 5s
Thought for 5s
That's not a Screenpipe bug — it's your Node.js version. The
node:child_process
syntax (the
node:
prefix for built-in modules) requires Node 14.18+ / 16+, and your stack trace (
internal/modules/cjs/loader.js:880
, old
npm ERR!
format, npx cache path
_npx/47357/
) is classic Node 12.x.
Check what you've got:
Copy to clipboard
bash
node
-v
which
node
I'd bet on v12.x. Fix by upgrading. If you're on nvm:
Copy to clipboard
bash
nvm
install
20
nvm
alias
default
20
nvm use
20
If Homebrew:
Copy to clipboard
bash
brew upgrade
node
If neither, install nvm — it's the cleanest way to manage Node on the Mac, especially since you switch between work projects.
After upgrading, clear the stale npx cache before retrying so it doesn't reuse the broken install:
Copy to clipboard
bash
rm
-rf ~/.npm/_npx
npx screenpipe@latest record --disable-audio --ignored-windows
"Boosteroid"
--retention-days
7
One thing worth noting — your Jiminny Laravel work probably runs on a specific Node version via the project's
.nvmrc
or
package.json
engines field. Upgrading the system/default Node shouldn't break that as long as nvm respects the project pin, but worth a sanity check (
yarn install
/
npm install
in the app repo after upgrading).
Copy
Give positive feedback
Give negative feedback
Retry
Write a message…
Write a message…
Add files, connectors, and more
Model: Opus 4.7 Adaptive
Opus 4.7
Adaptive
Settings
Press and hold to record
Use voice mode
Claude is AI and can make mistakes. Please double-check responses.
Claude is AI and can make mistakes. Please double-check responses.
Reply...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
68864
|
2468
|
3
|
2026-05-22T07:26:15.121234+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434775121_m2.jpg...
|
Claude
|
Claude
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Skip to content
Skip to content
Collapse sidebar
S Skip to content
Skip to content
Collapse sidebar
Search
Chat
Cowork
Code
New chat
Projects
Artifacts
Customize
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
Screenpipe module not found error
More options for Screenpipe module not found error
Interactive language learning through movies
More options for Interactive language learning through movies
Recent love experiences
More options for Recent love experiences
Cities visited this year
More options for Cities visited this year
Did I drive today
More options for Did I drive today
Last visit to Lovech
More options for Last visit to Lovech
Monthly spending breakdown and regular expenses
More options for Monthly spending breakdown and regular expenses
Swimming visits this year
More options for Swimming visits this year
Screenpipe prune database vacuum error
More options for Screenpipe prune database vacuum error
Marking text locations in Screenpipe frames
More options for Marking text locations in Screenpipe frames
Updating packages in Laravel
More options for Updating packages in Laravel
Screenpipe data sync and retention management
More options for Screenpipe data sync and retention management
Screenpipe sync script failing after recent migrations
More options for Screenpipe sync script failing after recent migrations
Hubspot BadRequest headers debugging
More options for Hubspot BadRequest headers debugging
Monthly expense tracking
More options for Monthly expense tracking
Exporting transaction data from Notion to finance hub
More options for Exporting transaction data from Notion to finance hub
💬 How much have I spent for groc…
More options for 💬 How much have I spent for groc…
April 2026 spending by category
More options for April 2026 spending by category
Code diff review
More options for Code diff review
HubSpot rate limit implementation strategy
More options for HubSpot rate limit implementation strategy
Relaunch to update v1.8089.1
Relaunch to update
v1.8089.1
Lukas Pro
Get apps and extensions
Screenpipe module not found error, rename chat
Screenpipe module not found error
More options for Screenpipe module not found error
Share chat
Claude finished the response
You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall:
node scripts/postinstall.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1 why is there error in screenpipe
Show more
10:21
Retry
Edit
Copy
Claude responded: That's not a Screenpipe bug — it's your Node.
Claude responded: That's not a Screenpipe bug — it's your Node.
Thought for 5s
Thought for 5s
That's not a Screenpipe bug — it's your Node.js version. The
node:child_process
syntax (the
node:
prefix for built-in modules) requires Node 14.18+ / 16+, and your stack trace (
internal/modules/cjs/loader.js:880
, old
npm ERR!
format, npx cache path
_npx/47357/
) is classic Node 12.x.
Check what you've got:
Copy to clipboard
bash
node
-v
which
node
I'd bet on v12.x. Fix by upgrading. If you're on nvm:
Copy to clipboard
bash
nvm
install
20
nvm
alias
default
20
nvm use
20
If Homebrew:
Copy to clipboard
bash
brew upgrade
node
If neither, install nvm — it's the cleanest way to manage Node on the Mac, especially since you switch between work projects.
After upgrading, clear the stale npx cache before retrying so it doesn't reuse the broken install:
Copy to clipboard
bash
rm
-rf ~/.npm/_npx
npx screenpipe@latest record --disable-audio --ignored-windows
"Boosteroid"
--retention-days
7
One thing worth noting — your Jiminny Laravel work probably runs on a specific Node version via the project's
.nvmrc
or
package.json
engines field. Upgrading the system/default Node shouldn't break that as long as nvm respects the project pin, but worth a sanity check (
yarn install
/
npm install
in the app repo after upgrading).
Copy
Give positive feedback
Give negative feedback
Retry
Write a message…
Write a message…
Add files, connectors, and more
Model: Opus 4.7 Adaptive
Opus 4.7
Adaptive
Settings
Press and hold to record
Use voice mode
Claude is AI and can make mistakes. Please double-check responses.
Claude is AI and can make mistakes. Please double-check responses.
Reply...
|
[{"role":"AXLink","text":& [{"role":"AXLink","text":"Skip to content","depth":14,"bounds":{"left":0.33710107,"top":0.025538707,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"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.33710107,"top":0.026336791,"width":0.030917553,"height":0.013567438},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.33710107,"top":0.027134877,"width":0.0026595744,"height":0.012769354}},{"char_start":1,"char_count":14,"bounds":{"left":0.33976063,"top":0.027134877,"width":0.02825798,"height":0.012769354}}],"role_description":"text"},{"role":"AXButton","text":"Collapse sidebar","depth":15,"bounds":{"left":0.36535904,"top":0.02952913,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search","depth":15,"bounds":{"left":0.37333778,"top":0.02952913,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat","depth":16,"bounds":{"left":0.34075797,"top":0.06304868,"width":0.026263298,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cowork","depth":16,"bounds":{"left":0.36768618,"top":0.06304868,"width":0.031914894,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":16,"bounds":{"left":0.39993352,"top":0.06304868,"width":0.027260639,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New chat","depth":15,"bounds":{"left":0.34009308,"top":0.096568234,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Projects","depth":15,"bounds":{"left":0.34009308,"top":0.11731844,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Artifacts","depth":15,"bounds":{"left":0.34009308,"top":0.13806863,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":15,"bounds":{"left":0.34009308,"top":0.15881884,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pinned","depth":16,"bounds":{"left":0.34208778,"top":0.19872306,"width":0.08510638,"height":0.012769354},"on_screen":true,"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":18,"bounds":{"left":0.34009308,"top":0.21548285,"width":0.087765954,"height":0.0207502},"on_screen":true,"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":19,"bounds":{"left":0.42054522,"top":0.21867518,"width":0.005984043,"height":0.014365523},"on_screen":true,"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":18,"bounds":{"left":0.34009308,"top":0.23703113,"width":0.087765954,"height":0.0207502},"on_screen":true,"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":19,"bounds":{"left":0.42054522,"top":0.24022347,"width":0.005984043,"height":0.014365523},"on_screen":true,"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.34208778,"top":0.26735833,"width":0.06482713,"height":0.012769354},"on_screen":true,"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.40791222,"top":0.26735833,"width":0.019281914,"height":0.012769354},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe module not found error","depth":18,"bounds":{"left":0.34009308,"top":0.28411812,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe module not found error","depth":19,"bounds":{"left":0.42054522,"top":0.28731045,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Interactive language learning through movies","depth":18,"bounds":{"left":0.34009308,"top":0.3056664,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Interactive language learning through movies","depth":19,"bounds":{"left":0.42054522,"top":0.30885875,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Recent love experiences","depth":18,"bounds":{"left":0.34009308,"top":0.3272147,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Recent love experiences","depth":19,"bounds":{"left":0.42054522,"top":0.33040702,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cities visited this year","depth":18,"bounds":{"left":0.34009308,"top":0.34876296,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Cities visited this year","depth":19,"bounds":{"left":0.42054522,"top":0.3519553,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Did I drive today","depth":18,"bounds":{"left":0.34009308,"top":0.37031126,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Did I drive today","depth":19,"bounds":{"left":0.42054522,"top":0.3735036,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Last visit to Lovech","depth":18,"bounds":{"left":0.34009308,"top":0.39185953,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Last visit to Lovech","depth":19,"bounds":{"left":0.42054522,"top":0.39505187,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Monthly spending breakdown and regular expenses","depth":18,"bounds":{"left":0.34009308,"top":0.41340783,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Monthly spending breakdown and regular expenses","depth":19,"bounds":{"left":0.42054522,"top":0.41660017,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Swimming visits this year","depth":18,"bounds":{"left":0.34009308,"top":0.4349561,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Swimming visits this year","depth":19,"bounds":{"left":0.42054522,"top":0.43814844,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe prune database vacuum error","depth":18,"bounds":{"left":0.34009308,"top":0.45650437,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe prune database vacuum error","depth":19,"bounds":{"left":0.42054522,"top":0.45969674,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Marking text locations in Screenpipe frames","depth":18,"bounds":{"left":0.34009308,"top":0.47805268,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Marking text locations in Screenpipe frames","depth":19,"bounds":{"left":0.42054522,"top":0.481245,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Updating packages in Laravel","depth":18,"bounds":{"left":0.34009308,"top":0.49960095,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Updating packages in Laravel","depth":19,"bounds":{"left":0.42054522,"top":0.5027933,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe data sync and retention management","depth":18,"bounds":{"left":0.34009308,"top":0.5211492,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe data sync and retention management","depth":19,"bounds":{"left":0.42054522,"top":0.5243416,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe sync script failing after recent migrations","depth":18,"bounds":{"left":0.34009308,"top":0.54269755,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe sync script failing after recent migrations","depth":19,"bounds":{"left":0.42054522,"top":0.54588985,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hubspot BadRequest headers debugging","depth":18,"bounds":{"left":0.34009308,"top":0.5642458,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Hubspot BadRequest headers debugging","depth":19,"bounds":{"left":0.42054522,"top":0.5674381,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Monthly expense tracking","depth":18,"bounds":{"left":0.34009308,"top":0.5857941,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Monthly expense tracking","depth":19,"bounds":{"left":0.42054522,"top":0.58898646,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Exporting transaction data from Notion to finance hub","depth":18,"bounds":{"left":0.34009308,"top":0.60734236,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Exporting transaction data from Notion to finance hub","depth":19,"bounds":{"left":0.42054522,"top":0.6105347,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"💬 How much have I spent for groc…","depth":18,"bounds":{"left":0.34009308,"top":0.62889063,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for 💬 How much have I spent for groc…","depth":19,"bounds":{"left":0.42054522,"top":0.632083,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"April 2026 spending by category","depth":18,"bounds":{"left":0.34009308,"top":0.65043896,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for April 2026 spending by category","depth":19,"bounds":{"left":0.42054522,"top":0.65363127,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code diff review","depth":18,"bounds":{"left":0.34009308,"top":0.67198724,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Code diff review","depth":19,"bounds":{"left":0.42054522,"top":0.67517954,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HubSpot rate limit implementation strategy","depth":18,"bounds":{"left":0.34009308,"top":0.6935355,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for HubSpot rate limit implementation strategy","depth":19,"bounds":{"left":0.42054522,"top":0.6967279,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Relaunch to update v1.8089.1","depth":15,"bounds":{"left":0.34009308,"top":0.9169992,"width":0.087765954,"height":0.04309657},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Relaunch to update","depth":16,"bounds":{"left":0.35837767,"top":0.92498004,"width":0.04288564,"height":0.013567438},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.35837767,"top":0.92498004,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":17,"bounds":{"left":0.36136967,"top":0.92498004,"width":0.039893616,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"v1.8089.1","depth":16,"bounds":{"left":0.35837767,"top":0.94094175,"width":0.014960106,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.35837767,"top":0.94094175,"width":0.0019946808,"height":0.011173184}},{"char_start":1,"char_count":8,"bounds":{"left":0.36037233,"top":0.94094175,"width":0.012965426,"height":0.011173184}}],"role_description":"text"},{"role":"AXPopUpButton","text":"Lukas Pro","depth":15,"bounds":{"left":0.34009308,"top":0.9696728,"width":0.0787899,"height":0.01915403},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Get apps and extensions","depth":15,"bounds":{"left":0.41988033,"top":0.9696728,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe module not found error, rename chat","depth":19,"bounds":{"left":0.43716756,"top":0.02793296,"width":0.07978723,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe module not found error","depth":21,"bounds":{"left":0.43849733,"top":0.031923383,"width":0.07712766,"height":0.014365523},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.43849733,"top":0.031923383,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":32,"bounds":{"left":0.44148937,"top":0.031923383,"width":0.07413564,"height":0.014365523}}],"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Screenpipe module not found error","depth":19,"bounds":{"left":0.51728725,"top":0.02793296,"width":0.0066489363,"height":0.022346368},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share chat","depth":21,"bounds":{"left":0.98537236,"top":0.026336791,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Claude finished the response","depth":21,"bounds":{"left":0.5887633,"top":0.06464485,"width":0.0003324468,"height":0.014365523},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.5887633,"top":0.065442935,"width":0.0033244682,"height":0.013567438}},{"char_start":1,"char_count":27,"bounds":{"left":0.59208775,"top":0.065442935,"width":0.060837764,"height":0.013567438}}],"role_description":"text"},{"role":"AXHeading","text":"You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record","depth":20,"bounds":{"left":0.5940825,"top":0.08619314,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record","depth":21,"bounds":{"left":0.5940825,"top":0.08619314,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.5940825,"top":0.087789305,"width":0.0026595744,"height":0.013567438}},{"char_start":1,"char_count":103,"bounds":{"left":0.59674203,"top":0.087789305,"width":0.23670213,"height":0.013567438}}],"role_description":"text"},{"role":"AXStaticText","text":"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall:","depth":24,"bounds":{"left":0.6363032,"top":0.09736632,"width":0.19714096,"height":0.15722266},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.6363032,"top":0.09736632,"width":0.0013297872,"height":0.015961692}},{"char_start":1,"char_count":95,"bounds":{"left":0.6363032,"top":0.09736632,"width":0.18583776,"height":0.0518755}},{"char_start":96,"char_count":35,"bounds":{"left":0.6363032,"top":0.13328013,"width":0.08377659,"height":0.03431764}},{"char_start":131,"char_count":13,"bounds":{"left":0.6363032,"top":0.15083799,"width":0.026928192,"height":0.03431764}},{"char_start":144,"char_count":4,"bounds":{"left":0.6363032,"top":0.16919394,"width":0.0056515955,"height":0.033519555}},{"char_start":148,"char_count":47,"bounds":{"left":0.6363032,"top":0.1867518,"width":0.11668883,"height":0.03431764}},{"char_start":195,"char_count":15,"bounds":{"left":0.6363032,"top":0.20430966,"width":0.03557181,"height":0.03431764}},{"char_start":210,"char_count":82,"bounds":{"left":0.6363032,"top":0.22266561,"width":0.19714096,"height":0.06943336}},{"char_start":292,"char_count":80,"bounds":{"left":0.6363032,"top":0.27613726,"width":0.19348404,"height":0.03431764}},{"char_start":372,"char_count":69,"bounds":{"left":0.6363032,"top":0.29369512,"width":0.16356383,"height":0.03431764}},{"char_start":441,"char_count":62,"bounds":{"left":0.6363032,"top":0.3120511,"width":0.14461437,"height":0.03431764}},{"char_start":503,"char_count":55,"bounds":{"left":0.6363032,"top":0.32960895,"width":0.124667555,"height":0.03431764}},{"char_start":558,"char_count":113,"bounds":{"left":0.6363032,"top":0.34796488,"width":0.19514628,"height":0.06943336}},{"char_start":671,"char_count":64,"bounds":{"left":0.6363032,"top":0.40143654,"width":0.15192819,"height":0.03431764}},{"char_start":735,"char_count":78,"bounds":{"left":0.6363032,"top":0.41899443,"width":0.18384309,"height":0.03431764}},{"char_start":813,"char_count":59,"bounds":{"left":0.6363032,"top":0.43735036,"width":0.13796543,"height":0.033519555}},{"char_start":872,"char_count":69,"bounds":{"left":0.6363032,"top":0.45490822,"width":0.16256648,"height":0.03431764}},{"char_start":941,"char_count":90,"bounds":{"left":0.6363032,"top":0.47246608,"width":0.12666224,"height":0.052673582}},{"char_start":1031,"char_count":28,"bounds":{"left":0.6363032,"top":0.5083799,"width":0.080784574,"height":0.03431764}},{"char_start":1059,"char_count":18,"bounds":{"left":0.6363032,"top":0.52673584,"width":0.039228722,"height":0.033519555}},{"char_start":1077,"char_count":86,"bounds":{"left":0.6363032,"top":0.5442937,"width":0.19714096,"height":0.070231445}},{"char_start":1163,"char_count":4,"bounds":{"left":0.6363032,"top":0.5977654,"width":0.004654255,"height":0.03431764}},{"char_start":1167,"char_count":2,"bounds":{"left":0.6363032,"top":0.63367915,"width":0.0033244682,"height":0.015961692}},{"char_start":1169,"char_count":25,"bounds":{"left":0.6363032,"top":0.63367915,"width":0.07081117,"height":0.03431764}},{"char_start":1194,"char_count":17,"bounds":{"left":0.6363032,"top":0.651237,"width":0.042220745,"height":0.03431764}},{"char_start":1211,"char_count":39,"bounds":{"left":0.6392952,"top":0.669593,"width":0.100398935,"height":0.015961692}}],"role_description":"text"},{"role":"AXStaticText","text":"node scripts/postinstall.js","depth":25,"bounds":{"left":0.74235374,"top":0.25379092,"width":0.077792555,"height":0.0007980846},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"npm ERR! Exit status 1\nnpm ERR!\nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1 why is there error in screenpipe","depth":24,"bounds":{"left":0.6363032,"top":0.25379092,"width":0.18783244,"height":0.0007980846},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Show more","depth":22,"bounds":{"left":0.6363032,"top":0.254589,"width":0.14827128,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:21","depth":22,"bounds":{"left":0.79587764,"top":0.29768556,"width":0.008643617,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":22,"bounds":{"left":0.8071808,"top":0.29130086,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":22,"bounds":{"left":0.8178192,"top":0.29130086,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.8284575,"top":0.29130086,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Claude responded: That's not a Screenpipe bug — it's your Node.","depth":21,"bounds":{"left":0.5940825,"top":0.31923383,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"role_description":"heading"},{"role":"AXStaticText","text":"Claude responded: That's not a Screenpipe bug — it's your Node.","depth":22,"bounds":{"left":0.5940825,"top":0.3200319,"width":0.13996011,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Thought for 5s","depth":22,"bounds":{"left":0.59707445,"top":0.32482043,"width":0.24202128,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thought for 5s","depth":23,"bounds":{"left":0.59674203,"top":0.3463687,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"That's not a Screenpipe bug — it's your Node.js version. The","depth":25,"bounds":{"left":0.59707445,"top":0.3527534,"width":0.14694148,"height":0.016759777},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"node:child_process","depth":26,"bounds":{"left":0.7453458,"top":0.35434955,"width":0.05219415,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"syntax (the","depth":25,"bounds":{"left":0.79886967,"top":0.3527534,"width":0.028922873,"height":0.016759777},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"node:","depth":26,"bounds":{"left":0.5984042,"top":0.3735036,"width":0.01462766,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"prefix for built-in modules) requires Node 14.18+ / 16+, and your stack trace (","depth":25,"bounds":{"left":0.59707445,"top":0.3719074,"width":0.20146276,"height":0.035913806},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"internal/modules/cjs/loader.js:880","depth":26,"bounds":{"left":0.60039896,"top":0.3926576,"width":0.098071806,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":", old","depth":25,"bounds":{"left":0.69980055,"top":0.39106146,"width":0.011303191,"height":0.016759777},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"npm ERR!","depth":26,"bounds":{"left":0.7124335,"top":0.3926576,"width":0.022938829,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"format, npx cache path","depth":25,"bounds":{"left":0.73670214,"top":0.39106146,"width":0.05718085,"height":0.016759777},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"_npx/47357/","depth":26,"bounds":{"left":0.5984042,"top":0.41181165,"width":0.031914894,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":") is classic Node 12.x.","depth":25,"bounds":{"left":0.63164896,"top":0.4102155,"width":0.05086436,"height":0.016759777},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Check what you've got:","depth":25,"bounds":{"left":0.59707445,"top":0.43894652,"width":0.05718085,"height":0.016759777},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":27,"bounds":{"left":0.82546544,"top":0.47326416,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":26,"bounds":{"left":0.5990692,"top":0.47805268,"width":0.00930851,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"node","depth":27,"bounds":{"left":0.5990692,"top":0.50438946,"width":0.011303191,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"-v","depth":27,"bounds":{"left":0.61037236,"top":0.50438946,"width":0.00831117,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"which","depth":27,"bounds":{"left":0.5990692,"top":0.52274543,"width":0.013962766,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.6130319,"top":0.52274543,"width":0.0029920214,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"node","depth":27,"bounds":{"left":0.6156915,"top":0.52274543,"width":0.011635638,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"I'd bet on v12.x. Fix by upgrading. If you're on nvm:","depth":25,"bounds":{"left":0.59707445,"top":0.56105345,"width":0.12400266,"height":0.016759777},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":27,"bounds":{"left":0.82546544,"top":0.5953711,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":26,"bounds":{"left":0.5990692,"top":0.60015965,"width":0.00930851,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"nvm","depth":27,"bounds":{"left":0.5990692,"top":0.62649643,"width":0.011303191,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"install","depth":27,"bounds":{"left":0.61037236,"top":0.62649643,"width":0.019614361,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.6296542,"top":0.62649643,"width":0.0029920214,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"20","depth":27,"bounds":{"left":0.63264626,"top":0.62649643,"width":0.0056515955,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"nvm","depth":27,"bounds":{"left":0.5990692,"top":0.64485234,"width":0.011303191,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alias","depth":27,"bounds":{"left":0.61037236,"top":0.64485234,"width":0.013962766,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"default","depth":27,"bounds":{"left":0.6243351,"top":0.64485234,"width":0.025265958,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"20","depth":27,"bounds":{"left":0.6492686,"top":0.64485234,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"nvm use","depth":27,"bounds":{"left":0.5990692,"top":0.6632083,"width":0.022606382,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"20","depth":27,"bounds":{"left":0.6213431,"top":0.6632083,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"If Homebrew:","depth":25,"bounds":{"left":0.59707445,"top":0.7015164,"width":0.03357713,"height":0.016759777},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":27,"bounds":{"left":0.82546544,"top":0.735834,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":26,"bounds":{"left":0.5990692,"top":0.7406225,"width":0.00930851,"height":0.012769354},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"brew upgrade","depth":27,"bounds":{"left":0.5990692,"top":0.7669593,"width":0.03656915,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"node","depth":27,"bounds":{"left":0.6353058,"top":0.7669593,"width":0.011303191,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"If neither, install nvm — it's the cleanest way to manage Node on the Mac, especially since you switch between work projects.","depth":25,"bounds":{"left":0.59707445,"top":0.80606544,"width":0.22972074,"height":0.035115723},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"After upgrading, clear the stale npx cache before retrying so it doesn't reuse the broken install:","depth":25,"bounds":{"left":0.59707445,"top":0.8539505,"width":0.23005319,"height":0.015961692},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":27,"bounds":{"left":0.82546544,"top":0.88747007,"width":0.010638298,"height":0.026336791},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":26,"bounds":{"left":0.5990692,"top":0.8930567,"width":0.00930851,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"rm","depth":28,"bounds":{"left":0.5990692,"top":0.9193935,"width":0.0056515955,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"-rf ~/.npm/_npx","depth":28,"bounds":{"left":0.6047208,"top":0.9193935,"width":0.04488032,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"npx screenpipe@latest record --disable-audio --ignored-windows","depth":28,"bounds":{"left":0.5990692,"top":0.9377494,"width":0.17619681,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"\"Boosteroid\"","depth":28,"bounds":{"left":0.7749335,"top":0.9377494,"width":0.033909574,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"--retention-days","depth":28,"bounds":{"left":0.80851066,"top":0.9377494,"width":0.03025266,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"7","depth":28,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"One thing worth noting — your Jiminny Laravel work probably runs on a specific Node version via the project's","depth":25,"bounds":{"left":0.59707445,"top":0.97605747,"width":0.21276596,"height":0.02394253},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":".nvmrc","depth":26,"bounds":{"left":0.6575798,"top":0.99680763,"width":0.017287234,"height":0.0031923384},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"or","depth":25,"bounds":{"left":0.6761968,"top":0.9952115,"width":0.00731383,"height":0.0047885077},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"package.json","depth":26,"bounds":{"left":0.68484044,"top":0.99680763,"width":0.034906916,"height":0.0031923384},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"engines field. Upgrading the system/default Node shouldn't break that as long as nvm respects the project pin, but worth a sanity check (","depth":25,"bounds":{"left":0.59707445,"top":0.9952115,"width":0.22739361,"height":0.0047885077},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"yarn install","depth":26,"bounds":{"left":0.63231385,"top":0.9992019,"width":0.034906916,"height":0.0007980846},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"/","depth":25,"bounds":{"left":0.66855055,"top":0.9992019,"width":0.0039893617,"height":0.0007980846},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"npm install","depth":26,"bounds":{"left":0.67386967,"top":0.9992019,"width":0.03158245,"height":0.0007980846},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"in the app repo after upgrading).","depth":25,"bounds":{"left":0.7067819,"top":0.9992019,"width":0.080784574,"height":0.0007980846},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Copy","depth":22,"bounds":{"left":0.5944149,"top":0.9992019,"width":0.010638298,"height":0.0007980846},"on_screen":true,"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.6050532,"top":0.9992019,"width":0.010638298,"height":0.0007980846},"on_screen":true,"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.6156915,"top":0.9992019,"width":0.010638298,"height":0.0007980846},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Retry","depth":22,"bounds":{"left":0.6263298,"top":0.9992019,"width":0.010638298,"height":0.0007980846},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"Write a message…","depth":25,"bounds":{"left":0.59607714,"top":0.90901834,"width":0.24401596,"height":0.018355945},"on_screen":true,"value":"Write a message…","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Write a message…","depth":28,"bounds":{"left":0.59607714,"top":0.90981644,"width":0.04654255,"height":0.016759777},"on_screen":true,"role_description":"text"},{"role":"AXPopUpButton","text":"Add files, connectors, and more","depth":27,"bounds":{"left":0.59474736,"top":0.93695134,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"Model: Opus 4.7 Adaptive","depth":26,"bounds":{"left":0.7606383,"top":0.93695134,"width":0.05285904,"height":0.025538707},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Opus 4.7","depth":28,"bounds":{"left":0.76396275,"top":0.9425379,"width":0.019281914,"height":0.013567438},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"Adaptive","depth":28,"bounds":{"left":0.78457445,"top":0.9425379,"width":0.020944148,"height":0.013567438},"on_screen":true,"role_description":"text"},{"role":"AXPopUpButton","text":"Settings","depth":26,"bounds":{"left":0.81582445,"top":0.93695134,"width":0.0003324468,"height":0.025538707},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Press and hold to record","depth":25,"bounds":{"left":0.8161569,"top":0.93695134,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Use voice mode","depth":25,"bounds":{"left":0.8294548,"top":0.93695134,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Claude is AI and can make mistakes. Please double-check responses.","depth":22,"bounds":{"left":0.6525931,"top":0.980846,"width":0.12832446,"height":0.011971269},"on_screen":true,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Claude is AI and can make mistakes. Please double-check responses.","depth":23,"bounds":{"left":0.6525931,"top":0.980846,"width":0.12832446,"height":0.011971269},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Reply","depth":11,"bounds":{"left":0.60538566,"top":0.5937749,"width":0.026595745,"height":0.026336791},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-2856705854964656898
|
1385911679203593238
|
click
|
accessibility
|
NULL
|
Skip to content
Skip to content
Collapse sidebar
S Skip to content
Skip to content
Collapse sidebar
Search
Chat
Cowork
Code
New chat
Projects
Artifacts
Customize
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
Screenpipe module not found error
More options for Screenpipe module not found error
Interactive language learning through movies
More options for Interactive language learning through movies
Recent love experiences
More options for Recent love experiences
Cities visited this year
More options for Cities visited this year
Did I drive today
More options for Did I drive today
Last visit to Lovech
More options for Last visit to Lovech
Monthly spending breakdown and regular expenses
More options for Monthly spending breakdown and regular expenses
Swimming visits this year
More options for Swimming visits this year
Screenpipe prune database vacuum error
More options for Screenpipe prune database vacuum error
Marking text locations in Screenpipe frames
More options for Marking text locations in Screenpipe frames
Updating packages in Laravel
More options for Updating packages in Laravel
Screenpipe data sync and retention management
More options for Screenpipe data sync and retention management
Screenpipe sync script failing after recent migrations
More options for Screenpipe sync script failing after recent migrations
Hubspot BadRequest headers debugging
More options for Hubspot BadRequest headers debugging
Monthly expense tracking
More options for Monthly expense tracking
Exporting transaction data from Notion to finance hub
More options for Exporting transaction data from Notion to finance hub
💬 How much have I spent for groc…
More options for 💬 How much have I spent for groc…
April 2026 spending by category
More options for April 2026 spending by category
Code diff review
More options for Code diff review
HubSpot rate limit implementation strategy
More options for HubSpot rate limit implementation strategy
Relaunch to update v1.8089.1
Relaunch to update
v1.8089.1
Lukas Pro
Get apps and extensions
Screenpipe module not found error, rename chat
Screenpipe module not found error
More options for Screenpipe module not found error
Share chat
Claude finished the response
You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall:
node scripts/postinstall.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1 why is there error in screenpipe
Show more
10:21
Retry
Edit
Copy
Claude responded: That's not a Screenpipe bug — it's your Node.
Claude responded: That's not a Screenpipe bug — it's your Node.
Thought for 5s
Thought for 5s
That's not a Screenpipe bug — it's your Node.js version. The
node:child_process
syntax (the
node:
prefix for built-in modules) requires Node 14.18+ / 16+, and your stack trace (
internal/modules/cjs/loader.js:880
, old
npm ERR!
format, npx cache path
_npx/47357/
) is classic Node 12.x.
Check what you've got:
Copy to clipboard
bash
node
-v
which
node
I'd bet on v12.x. Fix by upgrading. If you're on nvm:
Copy to clipboard
bash
nvm
install
20
nvm
alias
default
20
nvm use
20
If Homebrew:
Copy to clipboard
bash
brew upgrade
node
If neither, install nvm — it's the cleanest way to manage Node on the Mac, especially since you switch between work projects.
After upgrading, clear the stale npx cache before retrying so it doesn't reuse the broken install:
Copy to clipboard
bash
rm
-rf ~/.npm/_npx
npx screenpipe@latest record --disable-audio --ignored-windows
"Boosteroid"
--retention-days
7
One thing worth noting — your Jiminny Laravel work probably runs on a specific Node version via the project's
.nvmrc
or
package.json
engines field. Upgrading the system/default Node shouldn't break that as long as nvm respects the project pin, but worth a sanity check (
yarn install
/
npm install
in the app repo after upgrading).
Copy
Give positive feedback
Give negative feedback
Retry
Write a message…
Write a message…
Add files, connectors, and more
Model: Opus 4.7 Adaptive
Opus 4.7
Adaptive
Settings
Press and hold to record
Use voice mode
Claude is AI and can make mistakes. Please double-check responses.
Claude is AI and can make mistakes. Please double-check responses.
Reply...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
68865
|
2467
|
4
|
2026-05-22T07:26:15.323117+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434775323_m1.jpg...
|
iTerm2
|
-zsh
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Wed May 20 09:14:49 on ttys009
Poetry Last login: Wed May 20 09:14:49 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe
4.8G /Users/lukas/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:34:48] ========================================
[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:34:48] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:35:01] ========================================
[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:35:01] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (6.6G)
Data dir: OK (168 files, 403M)
[+00m00s] ▶ Counting source rows for 2026-05-18
frames: 6300
elements: 758820
ui_events: 4662
ocr_text: 2983
meetings: 0
audio_chunks: 172
audio_transcriptions: 287
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m01s] ▶ Syncing vision data for 2026-05-18
video_chunks ✓ 0m03s
frames (6300 rows) ✓ 0m50s
ocr_text (2983 rows) ✓ 1m05s
ui_events (4662 rows) ✓ 0m00s
elements (758820 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m01s
[+02m39s] ▶ Syncing audio data for 2026-05-18
audio_chunks (172 rows) ✓ 0m00s
audio_transcriptions (287 rows) ✓ 0m00s
[+02m39s] ▶ Updating FTS indexes
elements_fts ✓ 1m16s
frames_fts ✓ 1m44s
ui_events_fts ✓ 0m02s
audio_transcriptions_fts ✓ 0m01s
[+05m42s] ▶ Verifying DB
frames: 6300 / 6300 ✓
elements: 758820 / 758820 ✓
ui_events: 4662 / 4662 ✓
ocr_text: 2983 / 2983 ✓
meetings: 0 / 0 ✓
audio_chunks: 172 / 172 ✓
audio_transcriptions: 287 / 287 ✓
[+06m48s] ▶ Copying data folder for 2026-05-18
rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)
[+07m12s] ▶ Copying audio files for 2026-05-18
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K
rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K
rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K
rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K
rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K
rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K
rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K
rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K
rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K
rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K
rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K
rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K
rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K
rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K
rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M
rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K
audio files total: 172 file(s), 42M
[+07m24s] ▶ Copying screenpipe logs for 2026-05-18
rsync logs → NAS ✓ 1 file(s), 308K
[2026-05-20 19:42:25] Archive DB size: 7.4G
[2026-05-20 19:42:25] Total time: 7m24s
[2026-05-20 19:42:25] Sync complete for 2026-05-18
[2026-05-20 19:42:25] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19
[2026-05-20 20:35:14] ========================================
[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19
[2026-05-20 20:35:14] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.4G)
Data dir: OK (201 files, 190M)
[+00m01s] ▶ Counting source rows for 2026-05-19
frames: 3796
elements: 544355
ui_events: 4277
ocr_text: 2040
meetings: 0
audio_chunks: 122
audio_transcriptions: 808
[+00m02s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m00s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m02s] ▶ Syncing vision data for 2026-05-19
video_chunks ✓ 0m03s
frames (3796 rows) ✓ 0m40s
ocr_text (2040 rows) ✓ 0m50s
ui_events (4277 rows) ✓ 0m01s
elements (544355 rows) ✓ 0m31s
meetings (0 rows) ✓ 0m00s
[+02m07s] ▶ Syncing audio data for 2026-05-19
audio_chunks (122 rows) ✓ 0m01s
audio_transcriptions (808 rows) ✓ 0m00s
[+02m08s] ▶ Updating FTS indexes
elements_fts ✓ 1m05s
frames_fts ✓ 1m30s
ui_events_fts ✓ 0m03s
audio_transcriptions_fts ✓ 0m01s
[+04m47s] ▶ Verifying DB
frames: 3796 / 3796 ✓
elements: 544355 / 544355 ✓
ui_events: 4277 / 4277 ✓
ocr_text: 2040 / 2040 ✓
meetings: 0 / 0 ✓
audio_chunks: 122 / 122 ✓
audio_transcriptions: 808 / 808 ✓
[+05m59s] ▶ Copying data folder for 2026-05-19
rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)
[+06m15s] ▶ Copying audio files for 2026-05-19
rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K
rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K
rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K
rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K
rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K
rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K
rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K
rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K
rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K
rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K
rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K
rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K
rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K
rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K
rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K
rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K
rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K
rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K
audio files total: 122 file(s), 26M
[+06m22s] ▶ Copying screenpipe logs for 2026-05-19
rsync logs → NAS ✓ 1 file(s), 328K
[2026-05-20 20:41:36] Archive DB size: 7.9G
[2026-05-20 20:41:36] Total time: 6m22s
[2026-05-20 20:41:36] Sync complete for 2026-05-19
[2026-05-20 20:41:36] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv
make: *** No rule to make target `checkEnv'. Stop.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv
docker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker="earth"
Before:
+---------+--------------------------------------------------------------------+
| Key | Value |
+---------+--------------------------------------------------------------------+
| qa | free |
| saturn | free |
| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |
| venus | JY-20543-AJ-report-tracking |
| mars | JY-20742-mcp-poc-OAuth-DCR |
| mercury | JY-20741-user-can-log-in-access-the-desktop-app |
| neptune | JY-20676-delete-report-related-objects |
| earth | free |
| jupiter | free |
| staging | JY-18091-upgrade-to-php-8-5 |
+---------+--------------------------------------------------------------------+
Bye.
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Wed May 20 09:14:49 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe \n4.8G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:34:48] ========================================\n[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:34:48] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:35:01] ========================================\n[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:35:01] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (6.6G)\n Data dir: OK (168 files, 403M)\n\n[+00m00s] ▶ Counting source rows for 2026-05-18\n frames: 6300\n elements: 758820\n ui_events: 4662\n ocr_text: 2983\n meetings: 0\n audio_chunks: 172\n audio_transcriptions: 287\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m01s] ▶ Syncing vision data for 2026-05-18\n video_chunks ✓ 0m03s\n frames (6300 rows) ✓ 0m50s\n ocr_text (2983 rows) ✓ 1m05s\n ui_events (4662 rows) ✓ 0m00s\n elements (758820 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m01s\n\n[+02m39s] ▶ Syncing audio data for 2026-05-18\n audio_chunks (172 rows) ✓ 0m00s\n audio_transcriptions (287 rows) ✓ 0m00s\n\n[+02m39s] ▶ Updating FTS indexes\n elements_fts ✓ 1m16s\n frames_fts ✓ 1m44s\n ui_events_fts ✓ 0m02s\n audio_transcriptions_fts ✓ 0m01s\n\n[+05m42s] ▶ Verifying DB\n frames: 6300 / 6300 ✓\n elements: 758820 / 758820 ✓\n ui_events: 4662 / 4662 ✓\n ocr_text: 2983 / 2983 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 172 / 172 ✓\n audio_transcriptions: 287 / 287 ✓\n\n[+06m48s] ▶ Copying data folder for 2026-05-18\n rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)\n\n[+07m12s] ▶ Copying audio files for 2026-05-18\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K\n rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K\n rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K\n rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K\n rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K\n rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K\n rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K\n rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K\n rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K\n rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K\n rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K\n rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K\n rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K\n rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K\n rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K\n audio files total: 172 file(s), 42M\n\n[+07m24s] ▶ Copying screenpipe logs for 2026-05-18\n rsync logs → NAS ✓ 1 file(s), 308K\n\n[2026-05-20 19:42:25] Archive DB size: 7.4G\n[2026-05-20 19:42:25] Total time: 7m24s\n[2026-05-20 19:42:25] Sync complete for 2026-05-18\n[2026-05-20 19:42:25] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19\n[2026-05-20 20:35:14] ========================================\n[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19\n[2026-05-20 20:35:14] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.4G)\n Data dir: OK (201 files, 190M)\n\n[+00m01s] ▶ Counting source rows for 2026-05-19\n frames: 3796\n elements: 544355\n ui_events: 4277\n ocr_text: 2040\n meetings: 0\n audio_chunks: 122\n audio_transcriptions: 808\n\n[+00m02s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m00s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m02s] ▶ Syncing vision data for 2026-05-19\n video_chunks ✓ 0m03s\n frames (3796 rows) ✓ 0m40s\n ocr_text (2040 rows) ✓ 0m50s\n ui_events (4277 rows) ✓ 0m01s\n elements (544355 rows) ✓ 0m31s\n meetings (0 rows) ✓ 0m00s\n\n[+02m07s] ▶ Syncing audio data for 2026-05-19\n audio_chunks (122 rows) ✓ 0m01s\n audio_transcriptions (808 rows) ✓ 0m00s\n\n[+02m08s] ▶ Updating FTS indexes\n elements_fts ✓ 1m05s\n frames_fts ✓ 1m30s\n ui_events_fts ✓ 0m03s\n audio_transcriptions_fts ✓ 0m01s\n\n[+04m47s] ▶ Verifying DB\n frames: 3796 / 3796 ✓\n elements: 544355 / 544355 ✓\n ui_events: 4277 / 4277 ✓\n ocr_text: 2040 / 2040 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 122 / 122 ✓\n audio_transcriptions: 808 / 808 ✓\n\n[+05m59s] ▶ Copying data folder for 2026-05-19\n rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)\n\n[+06m15s] ▶ Copying audio files for 2026-05-19\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K\n rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K\n rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K\n rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K\n rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K\n rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K\n rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K\n rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K\n rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K\n rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K\n rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K\n rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K\n rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K\n audio files total: 122 file(s), 26M\n\n[+06m22s] ▶ Copying screenpipe logs for 2026-05-19\n rsync logs → NAS ✓ 1 file(s), 328K\n\n[2026-05-20 20:41:36] Archive DB size: 7.9G\n[2026-05-20 20:41:36] Total time: 6m22s\n[2026-05-20 20:41:36] Sync complete for 2026-05-19\n[2026-05-20 20:41:36] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv\nmake: *** No rule to make target `checkEnv'. Stop.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv\ndocker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker=\"earth\"\nBefore:\n+---------+--------------------------------------------------------------------+\n| Key | Value |\n+---------+--------------------------------------------------------------------+\n| qa | free |\n| saturn | free |\n| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |\n| venus | JY-20543-AJ-report-tracking |\n| mars | JY-20742-mcp-poc-OAuth-DCR |\n| mercury | JY-20741-user-can-log-in-access-the-desktop-app |\n| neptune | JY-20676-delete-report-related-objects |\n| earth | free |\n| jupiter | free |\n| staging | JY-18091-upgrade-to-php-8-5 |\n+---------+--------------------------------------------------------------------+\nBye.\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sp-stop\nscreenpipe stopped\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $","depth":4,"on_screen":true,"value":"Last login: Wed May 20 09:14:49 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe \n4.8G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:34:48] ========================================\n[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:34:48] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:35:01] ========================================\n[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:35:01] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (6.6G)\n Data dir: OK (168 files, 403M)\n\n[+00m00s] ▶ Counting source rows for 2026-05-18\n frames: 6300\n elements: 758820\n ui_events: 4662\n ocr_text: 2983\n meetings: 0\n audio_chunks: 172\n audio_transcriptions: 287\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m01s] ▶ Syncing vision data for 2026-05-18\n video_chunks ✓ 0m03s\n frames (6300 rows) ✓ 0m50s\n ocr_text (2983 rows) ✓ 1m05s\n ui_events (4662 rows) ✓ 0m00s\n elements (758820 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m01s\n\n[+02m39s] ▶ Syncing audio data for 2026-05-18\n audio_chunks (172 rows) ✓ 0m00s\n audio_transcriptions (287 rows) ✓ 0m00s\n\n[+02m39s] ▶ Updating FTS indexes\n elements_fts ✓ 1m16s\n frames_fts ✓ 1m44s\n ui_events_fts ✓ 0m02s\n audio_transcriptions_fts ✓ 0m01s\n\n[+05m42s] ▶ Verifying DB\n frames: 6300 / 6300 ✓\n elements: 758820 / 758820 ✓\n ui_events: 4662 / 4662 ✓\n ocr_text: 2983 / 2983 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 172 / 172 ✓\n audio_transcriptions: 287 / 287 ✓\n\n[+06m48s] ▶ Copying data folder for 2026-05-18\n rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)\n\n[+07m12s] ▶ Copying audio files for 2026-05-18\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K\n rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K\n rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K\n rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K\n rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K\n rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K\n rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K\n rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K\n rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K\n rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K\n rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K\n rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K\n rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K\n rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K\n rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K\n audio files total: 172 file(s), 42M\n\n[+07m24s] ▶ Copying screenpipe logs for 2026-05-18\n rsync logs → NAS ✓ 1 file(s), 308K\n\n[2026-05-20 19:42:25] Archive DB size: 7.4G\n[2026-05-20 19:42:25] Total time: 7m24s\n[2026-05-20 19:42:25] Sync complete for 2026-05-18\n[2026-05-20 19:42:25] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19\n[2026-05-20 20:35:14] ========================================\n[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19\n[2026-05-20 20:35:14] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.4G)\n Data dir: OK (201 files, 190M)\n\n[+00m01s] ▶ Counting source rows for 2026-05-19\n frames: 3796\n elements: 544355\n ui_events: 4277\n ocr_text: 2040\n meetings: 0\n audio_chunks: 122\n audio_transcriptions: 808\n\n[+00m02s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m00s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m02s] ▶ Syncing vision data for 2026-05-19\n video_chunks ✓ 0m03s\n frames (3796 rows) ✓ 0m40s\n ocr_text (2040 rows) ✓ 0m50s\n ui_events (4277 rows) ✓ 0m01s\n elements (544355 rows) ✓ 0m31s\n meetings (0 rows) ✓ 0m00s\n\n[+02m07s] ▶ Syncing audio data for 2026-05-19\n audio_chunks (122 rows) ✓ 0m01s\n audio_transcriptions (808 rows) ✓ 0m00s\n\n[+02m08s] ▶ Updating FTS indexes\n elements_fts ✓ 1m05s\n frames_fts ✓ 1m30s\n ui_events_fts ✓ 0m03s\n audio_transcriptions_fts ✓ 0m01s\n\n[+04m47s] ▶ Verifying DB\n frames: 3796 / 3796 ✓\n elements: 544355 / 544355 ✓\n ui_events: 4277 / 4277 ✓\n ocr_text: 2040 / 2040 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 122 / 122 ✓\n audio_transcriptions: 808 / 808 ✓\n\n[+05m59s] ▶ Copying data folder for 2026-05-19\n rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)\n\n[+06m15s] ▶ Copying audio files for 2026-05-19\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K\n rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K\n rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K\n rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K\n rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K\n rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K\n rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K\n rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K\n rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K\n rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K\n rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K\n rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K\n rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K\n audio files total: 122 file(s), 26M\n\n[+06m22s] ▶ Copying screenpipe logs for 2026-05-19\n rsync logs → NAS ✓ 1 file(s), 328K\n\n[2026-05-20 20:41:36] Archive DB size: 7.9G\n[2026-05-20 20:41:36] Total time: 6m22s\n[2026-05-20 20:41:36] Sync complete for 2026-05-19\n[2026-05-20 20:41:36] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv\nmake: *** No rule to make target `checkEnv'. Stop.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv\ndocker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker=\"earth\"\nBefore:\n+---------+--------------------------------------------------------------------+\n| Key | Value |\n+---------+--------------------------------------------------------------------+\n| qa | free |\n| saturn | free |\n| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |\n| venus | JY-20543-AJ-report-tracking |\n| mars | JY-20742-mcp-poc-OAuth-DCR |\n| mercury | JY-20741-user-can-log-in-access-the-desktop-app |\n| neptune | JY-20676-delete-report-related-objects |\n| earth | free |\n| jupiter | free |\n| staging | JY-18091-upgrade-to-php-8-5 |\n+---------+--------------------------------------------------------------------+\nBye.\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sp-stop\nscreenpipe stopped\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48680556,"top":0.033333335,"width":0.022916667,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-6572287919365258477
|
4355694469229718887
|
click
|
accessibility
|
NULL
|
Last login: Wed May 20 09:14:49 on ttys009
Poetry Last login: Wed May 20 09:14:49 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe
4.8G /Users/lukas/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:34:48] ========================================
[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:34:48] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:35:01] ========================================
[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:35:01] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (6.6G)
Data dir: OK (168 files, 403M)
[+00m00s] ▶ Counting source rows for 2026-05-18
frames: 6300
elements: 758820
ui_events: 4662
ocr_text: 2983
meetings: 0
audio_chunks: 172
audio_transcriptions: 287
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m01s] ▶ Syncing vision data for 2026-05-18
video_chunks ✓ 0m03s
frames (6300 rows) ✓ 0m50s
ocr_text (2983 rows) ✓ 1m05s
ui_events (4662 rows) ✓ 0m00s
elements (758820 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m01s
[+02m39s] ▶ Syncing audio data for 2026-05-18
audio_chunks (172 rows) ✓ 0m00s
audio_transcriptions (287 rows) ✓ 0m00s
[+02m39s] ▶ Updating FTS indexes
elements_fts ✓ 1m16s
frames_fts ✓ 1m44s
ui_events_fts ✓ 0m02s
audio_transcriptions_fts ✓ 0m01s
[+05m42s] ▶ Verifying DB
frames: 6300 / 6300 ✓
elements: 758820 / 758820 ✓
ui_events: 4662 / 4662 ✓
ocr_text: 2983 / 2983 ✓
meetings: 0 / 0 ✓
audio_chunks: 172 / 172 ✓
audio_transcriptions: 287 / 287 ✓
[+06m48s] ▶ Copying data folder for 2026-05-18
rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)
[+07m12s] ▶ Copying audio files for 2026-05-18
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K
rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K
rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K
rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K
rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K
rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K
rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K
rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K
rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K
rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K
rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K
rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K
rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K
rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K
rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M
rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K
audio files total: 172 file(s), 42M
[+07m24s] ▶ Copying screenpipe logs for 2026-05-18
rsync logs → NAS ✓ 1 file(s), 308K
[2026-05-20 19:42:25] Archive DB size: 7.4G
[2026-05-20 19:42:25] Total time: 7m24s
[2026-05-20 19:42:25] Sync complete for 2026-05-18
[2026-05-20 19:42:25] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19
[2026-05-20 20:35:14] ========================================
[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19
[2026-05-20 20:35:14] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.4G)
Data dir: OK (201 files, 190M)
[+00m01s] ▶ Counting source rows for 2026-05-19
frames: 3796
elements: 544355
ui_events: 4277
ocr_text: 2040
meetings: 0
audio_chunks: 122
audio_transcriptions: 808
[+00m02s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m00s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m02s] ▶ Syncing vision data for 2026-05-19
video_chunks ✓ 0m03s
frames (3796 rows) ✓ 0m40s
ocr_text (2040 rows) ✓ 0m50s
ui_events (4277 rows) ✓ 0m01s
elements (544355 rows) ✓ 0m31s
meetings (0 rows) ✓ 0m00s
[+02m07s] ▶ Syncing audio data for 2026-05-19
audio_chunks (122 rows) ✓ 0m01s
audio_transcriptions (808 rows) ✓ 0m00s
[+02m08s] ▶ Updating FTS indexes
elements_fts ✓ 1m05s
frames_fts ✓ 1m30s
ui_events_fts ✓ 0m03s
audio_transcriptions_fts ✓ 0m01s
[+04m47s] ▶ Verifying DB
frames: 3796 / 3796 ✓
elements: 544355 / 544355 ✓
ui_events: 4277 / 4277 ✓
ocr_text: 2040 / 2040 ✓
meetings: 0 / 0 ✓
audio_chunks: 122 / 122 ✓
audio_transcriptions: 808 / 808 ✓
[+05m59s] ▶ Copying data folder for 2026-05-19
rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)
[+06m15s] ▶ Copying audio files for 2026-05-19
rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K
rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K
rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K
rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K
rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K
rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K
rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K
rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K
rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K
rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K
rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K
rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K
rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K
rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K
rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K
rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K
rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K
rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K
audio files total: 122 file(s), 26M
[+06m22s] ▶ Copying screenpipe logs for 2026-05-19
rsync logs → NAS ✓ 1 file(s), 328K
[2026-05-20 20:41:36] Archive DB size: 7.9G
[2026-05-20 20:41:36] Total time: 6m22s
[2026-05-20 20:41:36] Sync complete for 2026-05-19
[2026-05-20 20:41:36] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv
make: *** No rule to make target `checkEnv'. Stop.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv
docker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker="earth"
Before:
+---------+--------------------------------------------------------------------+
| Key | Value |
+---------+--------------------------------------------------------------------+
| qa | free |
| saturn | free |
| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |
| venus | JY-20543-AJ-report-tracking |
| mars | JY-20742-mcp-poc-OAuth-DCR |
| mercury | JY-20741-user-can-log-in-access-the-desktop-app |
| neptune | JY-20676-delete-report-related-objects |
| earth | free |
| jupiter | free |
| staging | JY-18091-upgrade-to-php-8-5 |
+---------+--------------------------------------------------------------------+
Bye.
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
68863
|
NULL
|
NULL
|
NULL
|
|
68866
|
2468
|
4
|
2026-05-22T07:26:16.270777+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434776270_m2.jpg...
|
iTerm2
|
-zsh
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Wed May 20 19:33:03 on ttys010
Poetry Last login: Wed May 20 19:33:03 on ttys010
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
nas
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nas
Adm1n@DXP4800PLUS-B5F8:~$ cd /volume2/docker/
Adm1n@DXP4800PLUS-B5F8:/volume2/docker$ ll
total 56K
drwxrwxrwx+ 1 root root 1.2K May 20 21:47 .
drwxr-xr-x 1 root root 260 May 9 17:55 ..
drwxrwxrwx+ 1 Adm1n admin 20 Jul 28 2025 adguard
drwxrwxrwx+ 1 Adm1n admin 66 Apr 5 13:14 ai-stack
drwxrwxrwx+ 1 Adm1n admin 12 Aug 1 2025 app-db
drwxrwxr-x 1 appflowy users 138 Dec 14 18:21 appflowy
drwxrwxrwx+ 1 Adm1n admin 72 May 20 07:53 audiobookshelf
drwxrwxrwx+ 1 Adm1n admin 128 Mar 30 19:52 auth
drwxrwxrwx+ 1 Adm1n admin 166 May 21 19:46 beszel
drwxrwxrwx+ 1 Adm1n admin 38 Jun 16 2025 bitwarden
drwxrwxrwx+ 1 Adm1n admin 36 Aug 25 2025 dawarich
drwxrwxrwx+ 1 Adm1n admin 322 Aug 15 2025 dsk-uploader
drwxrwxrwx+ 1 Adm1n admin 22 May 10 15:21 finance
drwxrwxrwx+ 1 Adm1n admin 92 Aug 19 2025 flask-app
drwxrwxrwx+ 1 Adm1n admin 308 Oct 7 2025 garmin-connector
drwxrwxrwx+ 1 Adm1n admin 12 Jul 18 2025 gitea
drwxrwxrwx+ 1 Adm1n admin 0 Feb 16 19:30 health
drwxrwxrwx+ 1 Adm1n admin 220 Feb 16 21:09 health-tracker
drwxrwxrwx+ 1 Adm1n admin 0 Oct 31 2025 homarr
drwxrwxrwx+ 1 Adm1n admin 146 Mar 7 20:46 hst
drwxrwxrwx+ 1 Adm1n admin 66 Aug 31 2025 immich
drwxrwx--- 1 Adm1n Media 30 Jun 15 2025 jellyfinht
drwxrwxrwx+ 1 Adm1n admin 20 Aug 31 2025 kavita
drwxrwxrwx+ 1 Adm1n admin 0 Oct 12 2025 libreoffice
drwxrwxrwx+ 1 Adm1n admin 12 Dec 13 21:12 linkwarden
drwxrwxrwx+ 1 Adm1n admin 274 May 18 21:56 location-logger
drwxrwxrwx+ 1 dnsmasq systemd-journal 432 Aug 27 2025 mariadb
drwxrwxrwx+ 1 Adm1n admin 122 Apr 26 19:03 meeting-detector
drwxrwxrwx+ 1 Adm1n admin 0 Aug 15 2025 mindfulmama
drwxrwxrwx+ 1 Adm1n admin 22 Jul 16 2025 n8n
drwxrwxrwx+ 1 Adm1n admin 176 Feb 20 17:33 notifier-app
drwxrwxrwx+ 1 Adm1n admin 52 Jun 15 2025 npm
drwxrwxrwx+ 1 Adm1n admin 306 Mar 29 17:34 oauth
drwxrwxrwx+ 1 Adm1n admin 92 Jun 15 2025 obsidian
drwxr-xr-x 1 root root 60 Mar 7 20:56 ollama
drwxr-xr-x 1 911 911 128 Jul 28 2025 openttd
drwxrwxrwx+ 1 Adm1n admin 234 Mar 7 16:30 openvpn-client
drwxr-xr-x 1 root root 58 May 21 19:48 open-webui
drwxrwxrwx+ 1 Adm1n admin 134 Dec 31 13:13 orchestrator
drwxrwxrwx+ 1 Adm1n admin 406 Mar 25 20:39 outfit-app
drwxrwxrwx+ 1 Adm1n admin 90 Aug 28 2025 owntracks-stack
drwxrwxrwx+ 1 Adm1n admin 156 Mar 10 20:51 paperlessngx
drwxrwxrwx+ 1 Adm1n admin 162 May 8 20:36 payments-logger
drwxrwxrwx+ 1 Adm1n admin 0 Sep 28 2025 personal-log
drwxrwxrwx+ 1 Adm1n admin 616 Mar 7 20:46 personal-log-system
drwxrwxrwx+ 1 Adm1n admin 26 Feb 19 19:41 player
drwxrwxrwx+ 1 Adm1n admin 202 Feb 23 21:35 portainer
drwxrwxrwx+ 1 dnsmasq admin 484 Dec 4 19:31 portnotedb
drwxrwxrwx+ 1 Adm1n admin 140 Apr 4 15:49 reminders-app
drwxrwxrwx+ 1 Adm1n admin 60 Oct 29 2025 romm
drwxrwxrwx+ 1 Adm1n admin 108 Feb 23 20:15 second-brain
drwxrwxrwx+ 1 Adm1n admin 10 Dec 30 17:16 static
drwxrwxrwx+ 1 Adm1n admin 28 Jun 19 2025 stirling
drwxrwxrwx+ 1 Adm1n admin 86 Oct 25 2025 syncthing
drwxrwxrwx+ 1 root root 56 Jun 5 2025 tailscale
drwxrwxrwx+ 1 Adm1n admin 186 Sep 23 2025 temp-logger
drwxrwxrwx+ 1 Adm1n admin 122 Jul 19 2025 test-app
drwxrwxrwx+ 1 Adm1n admin 52 Jun 14 2025 tmp
drwxrwxrwx+ 1 Adm1n admin 36 Jul 13 2025 torrent-stack
drwxrwxrwx+ 1 Adm1n admin 48 Dec 19 10:58 tree
drwxrwxrwx+ 1 Adm1n admin 0 Oct 31 2025 trilium
drwxrwxrwx+ 1 Adm1n admin 34 Dec 3 21:18 tubearchivist
drwxrwxrwx+ 1 Adm1n admin 22 Jul 25 2025 twenty
drwxrwxrwx+ 1 Adm1n admin 0 Nov 2 2025 uptimekuma
drwxrwxrwx+ 1 Adm1n admin 30 Dec 7 17:30 ytptube
-rwxrwxrwx+ 1 Adm1n admin 11K Oct 29 2025 .DS_Store
-rwxrwxrwx 1 Adm1n admin 13K May 20 21:47 SERVICES.md
Adm1n@DXP4800PLUS-B5F8:/volume2/docker$ mkdir polygloth
Adm1n@DXP4800PLUS-B5F8:/volume2/docker$ ll
total 56K
drwxrwxrwx+ 1 root root 1.2K May 21 19:49 .
drwxr-xr-x 1 root root 260 May 9 17:55 ..
drwxrwxrwx+ 1 Adm1n admin 20 Jul 28 2025 adguard
drwxrwxrwx+ 1 Adm1n admin 66 Apr 5 13:14 ai-stack
drwxrwxrwx+ 1 Adm1n admin 12 Aug 1 2025 app-db
drwxrwxr-x 1 appflowy users 138 Dec 14 18:21 appflowy
drwxrwxrwx+ 1 Adm1n admin 72 May 20 07:53 audiobookshelf
drwxrwxrwx+ 1 Adm1n admin 128 Mar 30 19:52 auth
drwxrwxrwx+ 1 Adm1n admin 166 May 21 19:46 beszel
drwxrwxrwx+ 1 Adm1n admin 38 Jun 16 2025 bitwarden
drwxrwxrwx+ 1 Adm1n admin 36 Aug 25 2025 dawarich
drwxrwxrwx+ 1 Adm1n admin 322 Aug 15 2025 dsk-uploader
drwxrwxrwx+ 1 Adm1n admin 22 May 10 15:21 finance
drwxrwxrwx+ 1 Adm1n admin 92 Aug 19 2025 flask-app
drwxrwxrwx+ 1 Adm1n admin 308 Oct 7 2025 garmin-connector
drwxrwxrwx+ 1 Adm1n admin 12 Jul 18 2025 gitea
drwxrwxrwx+ 1 Adm1n admin 0 Feb 16 19:30 health
drwxrwxrwx+ 1 Adm1n admin 220 Feb 16 21:09 health-tracker
drwxrwxrwx+ 1 Adm1n admin 0 Oct 31 2025 homarr
drwxrwxrwx+ 1 Adm1n admin 146 Mar 7 20:46 hst
drwxrwxrwx+ 1 Adm1n admin 66 Aug 31 2025 immich
drwxrwx--- 1 Adm1n Media 30 Jun 15 2025 jellyfinht
drwxrwxrwx+ 1 Adm1n admin 20 Aug 31 2025 kavita
drwxrwxrwx+ 1 Adm1n admin 0 Oct 12 2025 libreoffice
drwxrwxrwx+ 1 Adm1n admin 12 Dec 13 21:12 linkwarden
drwxrwxrwx+ 1 Adm1n admin 274 May 18 21:56 location-logger
drwxrwxrwx+ 1 dnsmasq systemd-journal 432 Aug 27 2025 mariadb
drwxrwxrwx+ 1 Adm1n admin 122 Apr 26 19:03 meeting-detector
drwxrwxrwx+ 1 Adm1n admin 0 Aug 15 2025 mindfulmama
drwxrwxrwx+ 1 Adm1n admin 22 Jul 16 2025 n8n
drwxrwxrwx+ 1 Adm1n admin 176 Feb 20 17:33 notifier-app
drwxrwxrwx+ 1 Adm1n admin 52 Jun 15 2025 npm
drwxrwxrwx+ 1 Adm1n admin 306 Mar 29 17:34 oauth
drwxrwxrwx+ 1 Adm1n admin 92 Jun 15 2025 obsidian
drwxr-xr-x 1 root root 60 Mar 7 20:56 ollama
drwxr-xr-x 1 911 911 128 Jul 28 2025 openttd
drwxrwxrwx+ 1 Adm1n admin 234 Mar 7 16:30 openvpn-client
drwxr-xr-x 1 root root 58 May 21 19:49 open-webui
drwxrwxrwx+ 1 Adm1n admin 134 Dec 31 13:13 orchestrator
drwxrwxrwx+ 1 Adm1n admin 406 Mar 25 20:39 outfit-app
drwxrwxrwx+ 1 Adm1n admin 90 Aug 28 2025 owntracks-stack
drwxrwxrwx+ 1 Adm1n admin 156 Mar 10 20:51 paperlessngx
drwxrwxrwx+ 1 Adm1n admin 162 May 8 20:36 payments-logger
drwxrwxrwx+ 1 Adm1n admin 0 Sep 28 2025 personal-log
drwxrwxrwx+ 1 Adm1n admin 616 Mar 7 20:46 personal-log-system
drwxrwxrwx+ 1 Adm1n admin 26 Feb 19 19:41 player
drwxrwxrwx+ 1 Adm1n admin 0 May 21 19:49 polygloth
drwxrwxrwx+ 1 Adm1n admin 202 Feb 23 21:35 portainer
drwxrwxrwx+ 1 dnsmasq admin 484 Dec 4 19:31 portnotedb
drwxrwxrwx+ 1 Adm1n admin 140 Apr 4 15:49 reminders-app
drwxrwxrwx+ 1 Adm1n admin 60 Oct 29 2025 romm
drwxrwxrwx+ 1 Adm1n admin 108 Feb 23 20:15 second-brain
drwxrwxrwx+ 1 Adm1n admin 10 Dec 30 17:16 static
drwxrwxrwx+ 1 Adm1n admin 28 Jun 19 2025 stirling
drwxrwxrwx+ 1 Adm1n admin 86 Oct 25 2025 syncthing
drwxrwxrwx+ 1 root root 56 Jun 5 2025 tailscale
drwxrwxrwx+ 1 Adm1n admin 186 Sep 23 2025 temp-logger
drwxrwxrwx+ 1 Adm1n admin 122 Jul 19 2025 test-app
drwxrwxrwx+ 1 Adm1n admin 52 Jun 14 2025 tmp
drwxrwxrwx+ 1 Adm1n admin 36 Jul 13 2025 torrent-stack
drwxrwxrwx+ 1 Adm1n admin 48 Dec 19 10:58 tree
drwxrwxrwx+ 1 Adm1n admin 0 Oct 31 2025 trilium
drwxrwxrwx+ 1 Adm1n admin 34 Dec 3 21:18 tubearchivist
drwxrwxrwx+ 1 Adm1n admin 22 Jul 25 2025 twenty
drwxrwxrwx+ 1 Adm1n admin 0 Nov 2 2025 uptimekuma
drwxrwxrwx+ 1 Adm1n admin 30 Dec 7 17:30 ytptube
-rwxrwxrwx+ 1 Adm1n admin 11K Oct 29 2025 .DS_Store
-rwxrwxrwx 1 Adm1n admin 13K May 20 21:47 SERVICES.md
Adm1n@DXP4800PLUS-B5F8:/volume2/docker$ cd polygloth/
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ ll
total 0
drwxrwxrwx+ 1 Adm1n admin 0 May 21 19:49 .
drwxrwxrwx+ 1 root root 1.2K May 21 19:49 ..
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ cd /volume2/docker/polygloth
echo "[ENV_SECRET] > .env
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ mkdir -p media
cp /path/to/your/episode.mkv media/
cp: cannot stat '/path/to/your/episode.mkv': No such file or directory
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ cd /volume2/docker/polygloth
docker compose build
./run.sh Sto.Para.5.S01E01.mkv
permission denied while trying to connect to the Docker daemon socket at [URL_WITH_CREDENTIALS] sudo docker compose build
[sudo] password for Adm1n:
[+] Building 84.3s (11/11) FINISHED docker:default
=> [lang-subs internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 419B 0.0s
=> [lang-subs internal] load metadata for docker.io/library/python:3.12-slim 1.5s
=> [lang-subs internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [lang-subs 1/6] FROM docker.io/library/python:3.12-slim@sha256:9d3abd9fc11d06998ccdbdd93b4dd49b5ad7d67fcbbc11c016eb0eb2c2194891 4.4s
=> => resolve docker.io/library/python:3.12-slim@sha256:9d3abd9fc11d06998ccdbdd93b4dd49b5ad7d67fcbbc11c016eb0eb2c2194891 0.1s
=> => sha256:9d3abd9fc11d06998ccdbdd93b4dd49b5ad7d67fcbbc11c016eb0eb2c2194891 10.37kB / 10.37kB 0.0s
=> => sha256:866411c135b507754efdf2fda51484be4d3d7d5173ed53cd083106132e710904 1.75kB / 1.75kB 0.0s
=> => sha256:e1054bc5a9f2ddbdd6d0247997c45f2201a4e9b4c6f824b247064a558e877070 5.65kB / 5.65kB 0.0s
=> => sha256:5b4d6ff92fc4e14e911b7753c954fac965d48c40fe1075758d284148ccace970 29.78MB / 29.78MB 1.4s
=> => sha256:e113665b194b20ba7e9093ef6a1a38edbaebbfb983c00e379a45a142a95a86ef 12.11MB / 12.11MB 0.6s
=> => sha256:4a9dde5cdde190bfa0a3ab17863a083e66ea9636b157638c315357dfa476ba76 1.29MB / 1.29MB 0.6s
=> => sha256:07342fe545e640a2c4960e97ffe33a301cd8e61e0c4d4307d7ac66b6b8a9eb2d 250B / 250B 0.8s
=> => extracting sha256:5b4d6ff92fc4e14e911b7753c954fac965d48c40fe1075758d284148ccace970 1.3s
=> => extracting sha256:4a9dde5cdde190bfa0a3ab17863a083e66ea9636b157638c315357dfa476ba76 0.1s
=> => extracting sha256:e113665b194b20ba7e9093ef6a1a38edbaebbfb983c00e379a45a142a95a86ef 0.7s
=> => extracting sha256:07342fe545e640a2c4960e97ffe33a301cd8e61e0c4d4307d7ac66b6b8a9eb2d 0.0s
=> [lang-subs internal] load build context 0.2s
=> => transferring context: 14.80kB 0.0s
=> [lang-subs 2/6] RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg && rm -rf /var/lib/apt/lists/* 56.3s
=> [lang-subs 3/6] WORKDIR /app 0.2s
=> [lang-subs 4/6] COPY requirements.txt . 0.2s
=> [lang-subs 5/6] RUN pip install --no-cache-dir -r requirements.txt 19.1s
=> [lang-subs 6/6] COPY lang_subs.py . 0.2s
=> [lang-subs] exporting to image 1.8s
=> => exporting layers 1.8s
=> => writing image sha256:cf829e2bf1e1cab1cd63c33a3ed814cf8c0013659cf47d90270b913a8b89009d 0.0s
=> => naming to docker.io/library/polygloth-lang-subs 0.0s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ ./run.sh Sto.Para.5.S01E01.mkv
permission denied while trying to connect to the Docker daemon socket at [URL_WITH_CREDENTIALS] sudo ./run.sh Sto.Para.5.S01E01.mkv
[+] Creating 1/1
✔ Network polygloth_default Created 0.2s
Video: Sto.Para.5.S01E01.mkv
Cache: /media/.lang_subs_cache/Sto.Para.5.S01E01
[1/4] Extracting audio...
Extracting audio...
[2/4] Transcribing...
Transcribing with large-v3...
Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.
^C^C^C^CTraceback (most recent call last):
File "/app/lang_subs.py", line 353, in <module>
main()
File "/app/lang_subs.py", line 337, in main
segments = transcribe(audio_path, cache_dir, args.whisper_model, args.source_lang)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/lang_subs.py", line 98, in transcribe
for i, seg in enumerate(raw_segs)
^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/faster_whisper/transcribe.py", line 1851, in restore_speech_timestamps
for segment in segments:
^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/faster_whisper/transcribe.py", line 1213, in generate_segments
) = self.generate_with_fallback(encoder_output, prompt, tokenizer, options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/faster_whisper/transcribe.py", line 1446, in generate_with_fallback
result = self.model.generate(
^^^^^^^^^^^^^^^^^^^^
KeyboardInterrupt
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ sudo ./run.sh Sto.Para.5.S01E01.mkv
[sudo] password for Adm1n:
Video: Sto.Para.5.S01E01.mkv
Cache: /media/.lang_subs_cache/Sto.Para.5.S01E01
[1/4] Extracting audio...
[cache] audio.wav
[2/4] Transcribing...
Transcribing with large-v3...
Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.
Connection to [IP_ADDRESS] closed by remote host.
Connection to [IP_ADDRESS] closed.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nas
Adm1n@DXP4800PLUS-B5F8:~$ cd /volume2/docker/polygloth
sudo docker compose build
[sudo] password for Adm1n:
[+] Building 1.7s (11/11) FINISHED docker:default
=> [lang-subs internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 419B 0.0s
=> [lang-subs internal] load metadata for docker.io/library/python:3.12-slim 0.9s
=> [lang-subs internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [lang-subs 1/6] FROM docker.io/library/python:3.12-slim@sha256:9d3abd9fc11d06998ccdbdd93b4dd49b5ad7d67fcbbc11c016eb0eb2c2194891 0.0s
=> [lang-subs internal] load build context 0.0s
=> => transferring context: 17.29kB 0.0s
=> CACHED [lang-subs 2/6] RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg && rm -rf /var/lib/apt/lists/* 0.0s
=> CACHED [lang-subs 3/6] WORKDIR /app 0.0s
=> CACHED [lang-subs 4/6] COPY requirements.txt . 0.0s
=> CACHED [lang-subs 5/6] RUN pip install --no-cache-dir -r requirements.txt 0.0s
=> [lang-subs 6/6] COPY lang_subs.py . 0.2s
=> [lang-subs] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:e7b015a420bc2f4a949476ff04d4341276aa701947f508eee59469530f65ee83 0.0s
=> => naming to docker.io/library/polygloth-lang-subs 0.0s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ sudo rm -rf media/.lang_subs_cache/Sto.Para.5.S01E01
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ sudo ./run.sh Sto.Para.5.S01E01.mkv --duration 300
Video: Sto.Para.5.S01E01.mkv
Cache: /media/.lang_subs_cache/Sto.Para.5.S01E01
[1/4] Extracting audio...
Extracting audio (first 300s)...
[2/4] Transcribing...
Transcribing with large-v3...
Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.
6 segments
[3/4] Annotating with Claude...
Segments 0–5...
[4/4] Rendering outputs...
Written: /media/Sto.Para.5.S01E01.ass
Written: /media/Sto.Para.5.S01E01.study.md
Done.
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ Connection to [IP_ADDRESS] closed by remote host.
Connection to [IP_ADDRESS] closed.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Wed May 20 19:33:03 on ttys010\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nnas\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume2/docker/\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker$ ll\ntotal 56K\ndrwxrwxrwx+ 1 root root 1.2K May 20 21:47 .\ndrwxr-xr-x 1 root root 260 May 9 17:55 ..\ndrwxrwxrwx+ 1 Adm1n admin 20 Jul 28 2025 adguard\ndrwxrwxrwx+ 1 Adm1n admin 66 Apr 5 13:14 ai-stack\ndrwxrwxrwx+ 1 Adm1n admin 12 Aug 1 2025 app-db\ndrwxrwxr-x 1 appflowy users 138 Dec 14 18:21 appflowy\ndrwxrwxrwx+ 1 Adm1n admin 72 May 20 07:53 audiobookshelf\ndrwxrwxrwx+ 1 Adm1n admin 128 Mar 30 19:52 auth\ndrwxrwxrwx+ 1 Adm1n admin 166 May 21 19:46 beszel\ndrwxrwxrwx+ 1 Adm1n admin 38 Jun 16 2025 bitwarden\ndrwxrwxrwx+ 1 Adm1n admin 36 Aug 25 2025 dawarich\ndrwxrwxrwx+ 1 Adm1n admin 322 Aug 15 2025 dsk-uploader\ndrwxrwxrwx+ 1 Adm1n admin 22 May 10 15:21 finance\ndrwxrwxrwx+ 1 Adm1n admin 92 Aug 19 2025 flask-app\ndrwxrwxrwx+ 1 Adm1n admin 308 Oct 7 2025 garmin-connector\ndrwxrwxrwx+ 1 Adm1n admin 12 Jul 18 2025 gitea\ndrwxrwxrwx+ 1 Adm1n admin 0 Feb 16 19:30 health\ndrwxrwxrwx+ 1 Adm1n admin 220 Feb 16 21:09 health-tracker\ndrwxrwxrwx+ 1 Adm1n admin 0 Oct 31 2025 homarr\ndrwxrwxrwx+ 1 Adm1n admin 146 Mar 7 20:46 hst\ndrwxrwxrwx+ 1 Adm1n admin 66 Aug 31 2025 immich\ndrwxrwx--- 1 Adm1n Media 30 Jun 15 2025 jellyfinht\ndrwxrwxrwx+ 1 Adm1n admin 20 Aug 31 2025 kavita\ndrwxrwxrwx+ 1 Adm1n admin 0 Oct 12 2025 libreoffice\ndrwxrwxrwx+ 1 Adm1n admin 12 Dec 13 21:12 linkwarden\ndrwxrwxrwx+ 1 Adm1n admin 274 May 18 21:56 location-logger\ndrwxrwxrwx+ 1 dnsmasq systemd-journal 432 Aug 27 2025 mariadb\ndrwxrwxrwx+ 1 Adm1n admin 122 Apr 26 19:03 meeting-detector\ndrwxrwxrwx+ 1 Adm1n admin 0 Aug 15 2025 mindfulmama\ndrwxrwxrwx+ 1 Adm1n admin 22 Jul 16 2025 n8n\ndrwxrwxrwx+ 1 Adm1n admin 176 Feb 20 17:33 notifier-app\ndrwxrwxrwx+ 1 Adm1n admin 52 Jun 15 2025 npm\ndrwxrwxrwx+ 1 Adm1n admin 306 Mar 29 17:34 oauth\ndrwxrwxrwx+ 1 Adm1n admin 92 Jun 15 2025 obsidian\ndrwxr-xr-x 1 root root 60 Mar 7 20:56 ollama\ndrwxr-xr-x 1 911 911 128 Jul 28 2025 openttd\ndrwxrwxrwx+ 1 Adm1n admin 234 Mar 7 16:30 openvpn-client\ndrwxr-xr-x 1 root root 58 May 21 19:48 open-webui\ndrwxrwxrwx+ 1 Adm1n admin 134 Dec 31 13:13 orchestrator\ndrwxrwxrwx+ 1 Adm1n admin 406 Mar 25 20:39 outfit-app\ndrwxrwxrwx+ 1 Adm1n admin 90 Aug 28 2025 owntracks-stack\ndrwxrwxrwx+ 1 Adm1n admin 156 Mar 10 20:51 paperlessngx\ndrwxrwxrwx+ 1 Adm1n admin 162 May 8 20:36 payments-logger\ndrwxrwxrwx+ 1 Adm1n admin 0 Sep 28 2025 personal-log\ndrwxrwxrwx+ 1 Adm1n admin 616 Mar 7 20:46 personal-log-system\ndrwxrwxrwx+ 1 Adm1n admin 26 Feb 19 19:41 player\ndrwxrwxrwx+ 1 Adm1n admin 202 Feb 23 21:35 portainer\ndrwxrwxrwx+ 1 dnsmasq admin 484 Dec 4 19:31 portnotedb\ndrwxrwxrwx+ 1 Adm1n admin 140 Apr 4 15:49 reminders-app\ndrwxrwxrwx+ 1 Adm1n admin 60 Oct 29 2025 romm\ndrwxrwxrwx+ 1 Adm1n admin 108 Feb 23 20:15 second-brain\ndrwxrwxrwx+ 1 Adm1n admin 10 Dec 30 17:16 static\ndrwxrwxrwx+ 1 Adm1n admin 28 Jun 19 2025 stirling\ndrwxrwxrwx+ 1 Adm1n admin 86 Oct 25 2025 syncthing\ndrwxrwxrwx+ 1 root root 56 Jun 5 2025 tailscale\ndrwxrwxrwx+ 1 Adm1n admin 186 Sep 23 2025 temp-logger\ndrwxrwxrwx+ 1 Adm1n admin 122 Jul 19 2025 test-app\ndrwxrwxrwx+ 1 Adm1n admin 52 Jun 14 2025 tmp\ndrwxrwxrwx+ 1 Adm1n admin 36 Jul 13 2025 torrent-stack\ndrwxrwxrwx+ 1 Adm1n admin 48 Dec 19 10:58 tree\ndrwxrwxrwx+ 1 Adm1n admin 0 Oct 31 2025 trilium\ndrwxrwxrwx+ 1 Adm1n admin 34 Dec 3 21:18 tubearchivist\ndrwxrwxrwx+ 1 Adm1n admin 22 Jul 25 2025 twenty\ndrwxrwxrwx+ 1 Adm1n admin 0 Nov 2 2025 uptimekuma\ndrwxrwxrwx+ 1 Adm1n admin 30 Dec 7 17:30 ytptube\n-rwxrwxrwx+ 1 Adm1n admin 11K Oct 29 2025 .DS_Store\n-rwxrwxrwx 1 Adm1n admin 13K May 20 21:47 SERVICES.md\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker$ mkdir polygloth\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker$ ll\ntotal 56K\ndrwxrwxrwx+ 1 root root 1.2K May 21 19:49 .\ndrwxr-xr-x 1 root root 260 May 9 17:55 ..\ndrwxrwxrwx+ 1 Adm1n admin 20 Jul 28 2025 adguard\ndrwxrwxrwx+ 1 Adm1n admin 66 Apr 5 13:14 ai-stack\ndrwxrwxrwx+ 1 Adm1n admin 12 Aug 1 2025 app-db\ndrwxrwxr-x 1 appflowy users 138 Dec 14 18:21 appflowy\ndrwxrwxrwx+ 1 Adm1n admin 72 May 20 07:53 audiobookshelf\ndrwxrwxrwx+ 1 Adm1n admin 128 Mar 30 19:52 auth\ndrwxrwxrwx+ 1 Adm1n admin 166 May 21 19:46 beszel\ndrwxrwxrwx+ 1 Adm1n admin 38 Jun 16 2025 bitwarden\ndrwxrwxrwx+ 1 Adm1n admin 36 Aug 25 2025 dawarich\ndrwxrwxrwx+ 1 Adm1n admin 322 Aug 15 2025 dsk-uploader\ndrwxrwxrwx+ 1 Adm1n admin 22 May 10 15:21 finance\ndrwxrwxrwx+ 1 Adm1n admin 92 Aug 19 2025 flask-app\ndrwxrwxrwx+ 1 Adm1n admin 308 Oct 7 2025 garmin-connector\ndrwxrwxrwx+ 1 Adm1n admin 12 Jul 18 2025 gitea\ndrwxrwxrwx+ 1 Adm1n admin 0 Feb 16 19:30 health\ndrwxrwxrwx+ 1 Adm1n admin 220 Feb 16 21:09 health-tracker\ndrwxrwxrwx+ 1 Adm1n admin 0 Oct 31 2025 homarr\ndrwxrwxrwx+ 1 Adm1n admin 146 Mar 7 20:46 hst\ndrwxrwxrwx+ 1 Adm1n admin 66 Aug 31 2025 immich\ndrwxrwx--- 1 Adm1n Media 30 Jun 15 2025 jellyfinht\ndrwxrwxrwx+ 1 Adm1n admin 20 Aug 31 2025 kavita\ndrwxrwxrwx+ 1 Adm1n admin 0 Oct 12 2025 libreoffice\ndrwxrwxrwx+ 1 Adm1n admin 12 Dec 13 21:12 linkwarden\ndrwxrwxrwx+ 1 Adm1n admin 274 May 18 21:56 location-logger\ndrwxrwxrwx+ 1 dnsmasq systemd-journal 432 Aug 27 2025 mariadb\ndrwxrwxrwx+ 1 Adm1n admin 122 Apr 26 19:03 meeting-detector\ndrwxrwxrwx+ 1 Adm1n admin 0 Aug 15 2025 mindfulmama\ndrwxrwxrwx+ 1 Adm1n admin 22 Jul 16 2025 n8n\ndrwxrwxrwx+ 1 Adm1n admin 176 Feb 20 17:33 notifier-app\ndrwxrwxrwx+ 1 Adm1n admin 52 Jun 15 2025 npm\ndrwxrwxrwx+ 1 Adm1n admin 306 Mar 29 17:34 oauth\ndrwxrwxrwx+ 1 Adm1n admin 92 Jun 15 2025 obsidian\ndrwxr-xr-x 1 root root 60 Mar 7 20:56 ollama\ndrwxr-xr-x 1 911 911 128 Jul 28 2025 openttd\ndrwxrwxrwx+ 1 Adm1n admin 234 Mar 7 16:30 openvpn-client\ndrwxr-xr-x 1 root root 58 May 21 19:49 open-webui\ndrwxrwxrwx+ 1 Adm1n admin 134 Dec 31 13:13 orchestrator\ndrwxrwxrwx+ 1 Adm1n admin 406 Mar 25 20:39 outfit-app\ndrwxrwxrwx+ 1 Adm1n admin 90 Aug 28 2025 owntracks-stack\ndrwxrwxrwx+ 1 Adm1n admin 156 Mar 10 20:51 paperlessngx\ndrwxrwxrwx+ 1 Adm1n admin 162 May 8 20:36 payments-logger\ndrwxrwxrwx+ 1 Adm1n admin 0 Sep 28 2025 personal-log\ndrwxrwxrwx+ 1 Adm1n admin 616 Mar 7 20:46 personal-log-system\ndrwxrwxrwx+ 1 Adm1n admin 26 Feb 19 19:41 player\ndrwxrwxrwx+ 1 Adm1n admin 0 May 21 19:49 polygloth\ndrwxrwxrwx+ 1 Adm1n admin 202 Feb 23 21:35 portainer\ndrwxrwxrwx+ 1 dnsmasq admin 484 Dec 4 19:31 portnotedb\ndrwxrwxrwx+ 1 Adm1n admin 140 Apr 4 15:49 reminders-app\ndrwxrwxrwx+ 1 Adm1n admin 60 Oct 29 2025 romm\ndrwxrwxrwx+ 1 Adm1n admin 108 Feb 23 20:15 second-brain\ndrwxrwxrwx+ 1 Adm1n admin 10 Dec 30 17:16 static\ndrwxrwxrwx+ 1 Adm1n admin 28 Jun 19 2025 stirling\ndrwxrwxrwx+ 1 Adm1n admin 86 Oct 25 2025 syncthing\ndrwxrwxrwx+ 1 root root 56 Jun 5 2025 tailscale\ndrwxrwxrwx+ 1 Adm1n admin 186 Sep 23 2025 temp-logger\ndrwxrwxrwx+ 1 Adm1n admin 122 Jul 19 2025 test-app\ndrwxrwxrwx+ 1 Adm1n admin 52 Jun 14 2025 tmp\ndrwxrwxrwx+ 1 Adm1n admin 36 Jul 13 2025 torrent-stack\ndrwxrwxrwx+ 1 Adm1n admin 48 Dec 19 10:58 tree\ndrwxrwxrwx+ 1 Adm1n admin 0 Oct 31 2025 trilium\ndrwxrwxrwx+ 1 Adm1n admin 34 Dec 3 21:18 tubearchivist\ndrwxrwxrwx+ 1 Adm1n admin 22 Jul 25 2025 twenty\ndrwxrwxrwx+ 1 Adm1n admin 0 Nov 2 2025 uptimekuma\ndrwxrwxrwx+ 1 Adm1n admin 30 Dec 7 17:30 ytptube\n-rwxrwxrwx+ 1 Adm1n admin 11K Oct 29 2025 .DS_Store\n-rwxrwxrwx 1 Adm1n admin 13K May 20 21:47 SERVICES.md\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker$ cd polygloth/\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ ll\ntotal 0\ndrwxrwxrwx+ 1 Adm1n admin 0 May 21 19:49 .\ndrwxrwxrwx+ 1 root root 1.2K May 21 19:49 ..\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ cd /volume2/docker/polygloth\necho \"ANTHROPIC_API_KEY=sk-ant-YOUR_KEY_HERE\" > .env\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ mkdir -p media\ncp /path/to/your/episode.mkv media/\ncp: cannot stat '/path/to/your/episode.mkv': No such file or directory\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ cd /volume2/docker/polygloth\ndocker compose build\n./run.sh Sto.Para.5.S01E01.mkv\npermission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head \"http://%2Fvar%2Frun%2Fdocker.sock/_ping\": dial unix /var/run/docker.sock: connect: permission denied\npermission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get \"http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Dpolygloth%22%3Atrue%7D%7D\": dial unix /var/run/docker.sock: connect: permission denied\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ sudo docker compose build\n[sudo] password for Adm1n: \n[+] Building 84.3s (11/11) FINISHED docker:default\n => [lang-subs internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 419B 0.0s\n => [lang-subs internal] load metadata for docker.io/library/python:3.12-slim 1.5s\n => [lang-subs internal] load .dockerignore 0.1s\n => => transferring context: 2B 0.0s\n => [lang-subs 1/6] FROM docker.io/library/python:3.12-slim@sha256:9d3abd9fc11d06998ccdbdd93b4dd49b5ad7d67fcbbc11c016eb0eb2c2194891 4.4s\n => => resolve docker.io/library/python:3.12-slim@sha256:9d3abd9fc11d06998ccdbdd93b4dd49b5ad7d67fcbbc11c016eb0eb2c2194891 0.1s\n => => sha256:9d3abd9fc11d06998ccdbdd93b4dd49b5ad7d67fcbbc11c016eb0eb2c2194891 10.37kB / 10.37kB 0.0s\n => => sha256:866411c135b507754efdf2fda51484be4d3d7d5173ed53cd083106132e710904 1.75kB / 1.75kB 0.0s\n => => sha256:e1054bc5a9f2ddbdd6d0247997c45f2201a4e9b4c6f824b247064a558e877070 5.65kB / 5.65kB 0.0s\n => => sha256:5b4d6ff92fc4e14e911b7753c954fac965d48c40fe1075758d284148ccace970 29.78MB / 29.78MB 1.4s\n => => sha256:e113665b194b20ba7e9093ef6a1a38edbaebbfb983c00e379a45a142a95a86ef 12.11MB / 12.11MB 0.6s\n => => sha256:4a9dde5cdde190bfa0a3ab17863a083e66ea9636b157638c315357dfa476ba76 1.29MB / 1.29MB 0.6s\n => => sha256:07342fe545e640a2c4960e97ffe33a301cd8e61e0c4d4307d7ac66b6b8a9eb2d 250B / 250B 0.8s\n => => extracting sha256:5b4d6ff92fc4e14e911b7753c954fac965d48c40fe1075758d284148ccace970 1.3s\n => => extracting sha256:4a9dde5cdde190bfa0a3ab17863a083e66ea9636b157638c315357dfa476ba76 0.1s\n => => extracting sha256:e113665b194b20ba7e9093ef6a1a38edbaebbfb983c00e379a45a142a95a86ef 0.7s\n => => extracting sha256:07342fe545e640a2c4960e97ffe33a301cd8e61e0c4d4307d7ac66b6b8a9eb2d 0.0s\n => [lang-subs internal] load build context 0.2s\n => => transferring context: 14.80kB 0.0s\n => [lang-subs 2/6] RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg && rm -rf /var/lib/apt/lists/* 56.3s\n => [lang-subs 3/6] WORKDIR /app 0.2s \n => [lang-subs 4/6] COPY requirements.txt . 0.2s \n => [lang-subs 5/6] RUN pip install --no-cache-dir -r requirements.txt 19.1s \n => [lang-subs 6/6] COPY lang_subs.py . 0.2s \n => [lang-subs] exporting to image 1.8s \n => => exporting layers 1.8s \n => => writing image sha256:cf829e2bf1e1cab1cd63c33a3ed814cf8c0013659cf47d90270b913a8b89009d 0.0s \n => => naming to docker.io/library/polygloth-lang-subs 0.0s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ ./run.sh Sto.Para.5.S01E01.mkv \npermission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get \"http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Dpolygloth%22%3Atrue%7D%7D\": dial unix /var/run/docker.sock: connect: permission denied\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ sudo ./run.sh Sto.Para.5.S01E01.mkv\n[+] Creating 1/1\n ✔ Network polygloth_default Created 0.2s \nVideo: Sto.Para.5.S01E01.mkv\nCache: /media/.lang_subs_cache/Sto.Para.5.S01E01\n\n[1/4] Extracting audio...\n Extracting audio...\n\n[2/4] Transcribing...\n Transcribing with large-v3...\nWarning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.\n^C^C^C^CTraceback (most recent call last):\n File \"/app/lang_subs.py\", line 353, in <module>\n main()\n File \"/app/lang_subs.py\", line 337, in main\n segments = transcribe(audio_path, cache_dir, args.whisper_model, args.source_lang)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/app/lang_subs.py\", line 98, in transcribe\n for i, seg in enumerate(raw_segs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.12/site-packages/faster_whisper/transcribe.py\", line 1851, in restore_speech_timestamps\n for segment in segments:\n ^^^^^^^^\n File \"/usr/local/lib/python3.12/site-packages/faster_whisper/transcribe.py\", line 1213, in generate_segments\n ) = self.generate_with_fallback(encoder_output, prompt, tokenizer, options)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.12/site-packages/faster_whisper/transcribe.py\", line 1446, in generate_with_fallback\n result = self.model.generate(\n ^^^^^^^^^^^^^^^^^^^^\nKeyboardInterrupt\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ sudo ./run.sh Sto.Para.5.S01E01.mkv\n[sudo] password for Adm1n: \nVideo: Sto.Para.5.S01E01.mkv\nCache: /media/.lang_subs_cache/Sto.Para.5.S01E01\n\n[1/4] Extracting audio...\n [cache] audio.wav\n\n[2/4] Transcribing...\n Transcribing with large-v3...\nWarning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.\nConnection to 192.168.0.242 closed by remote host.\nConnection to 192.168.0.242 closed.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume2/docker/polygloth\nsudo docker compose build\n[sudo] password for Adm1n: \n[+] Building 1.7s (11/11) FINISHED docker:default\n => [lang-subs internal] load build definition from Dockerfile 0.0s\n => => transferring dockerfile: 419B 0.0s\n => [lang-subs internal] load metadata for docker.io/library/python:3.12-slim 0.9s\n => [lang-subs internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [lang-subs 1/6] FROM docker.io/library/python:3.12-slim@sha256:9d3abd9fc11d06998ccdbdd93b4dd49b5ad7d67fcbbc11c016eb0eb2c2194891 0.0s\n => [lang-subs internal] load build context 0.0s\n => => transferring context: 17.29kB 0.0s\n => CACHED [lang-subs 2/6] RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg && rm -rf /var/lib/apt/lists/* 0.0s\n => CACHED [lang-subs 3/6] WORKDIR /app 0.0s\n => CACHED [lang-subs 4/6] COPY requirements.txt . 0.0s\n => CACHED [lang-subs 5/6] RUN pip install --no-cache-dir -r requirements.txt 0.0s\n => [lang-subs 6/6] COPY lang_subs.py . 0.2s\n => [lang-subs] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:e7b015a420bc2f4a949476ff04d4341276aa701947f508eee59469530f65ee83 0.0s\n => => naming to docker.io/library/polygloth-lang-subs 0.0s\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ sudo rm -rf media/.lang_subs_cache/Sto.Para.5.S01E01\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ sudo ./run.sh Sto.Para.5.S01E01.mkv --duration 300\nVideo: Sto.Para.5.S01E01.mkv\nCache: /media/.lang_subs_cache/Sto.Para.5.S01E01\n\n[1/4] Extracting audio...\n Extracting audio (first 300s)...\n\n[2/4] Transcribing...\n Transcribing with large-v3...\nWarning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.\n 6 segments\n\n[3/4] Annotating with Claude...\n Segments 0–5...\n\n[4/4] Rendering outputs...\n Written: /media/Sto.Para.5.S01E01.ass\n Written: /media/Sto.Para.5.S01E01.study.md\n\nDone.\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ Connection to 192.168.0.242 closed by remote host.\nConnection to 192.168.0.242 closed.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $","depth":4,"on_screen":true,"value":"Last login: Wed May 20 19:33:03 on ttys010\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nnas\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume2/docker/\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker$ ll\ntotal 56K\ndrwxrwxrwx+ 1 root root 1.2K May 20 21:47 .\ndrwxr-xr-x 1 root root 260 May 9 17:55 ..\ndrwxrwxrwx+ 1 Adm1n admin 20 Jul 28 2025 adguard\ndrwxrwxrwx+ 1 Adm1n admin 66 Apr 5 13:14 ai-stack\ndrwxrwxrwx+ 1 Adm1n admin 12 Aug 1 2025 app-db\ndrwxrwxr-x 1 appflowy users 138 Dec 14 18:21 appflowy\ndrwxrwxrwx+ 1 Adm1n admin 72 May 20 07:53 audiobookshelf\ndrwxrwxrwx+ 1 Adm1n admin 128 Mar 30 19:52 auth\ndrwxrwxrwx+ 1 Adm1n admin 166 May 21 19:46 beszel\ndrwxrwxrwx+ 1 Adm1n admin 38 Jun 16 2025 bitwarden\ndrwxrwxrwx+ 1 Adm1n admin 36 Aug 25 2025 dawarich\ndrwxrwxrwx+ 1 Adm1n admin 322 Aug 15 2025 dsk-uploader\ndrwxrwxrwx+ 1 Adm1n admin 22 May 10 15:21 finance\ndrwxrwxrwx+ 1 Adm1n admin 92 Aug 19 2025 flask-app\ndrwxrwxrwx+ 1 Adm1n admin 308 Oct 7 2025 garmin-connector\ndrwxrwxrwx+ 1 Adm1n admin 12 Jul 18 2025 gitea\ndrwxrwxrwx+ 1 Adm1n admin 0 Feb 16 19:30 health\ndrwxrwxrwx+ 1 Adm1n admin 220 Feb 16 21:09 health-tracker\ndrwxrwxrwx+ 1 Adm1n admin 0 Oct 31 2025 homarr\ndrwxrwxrwx+ 1 Adm1n admin 146 Mar 7 20:46 hst\ndrwxrwxrwx+ 1 Adm1n admin 66 Aug 31 2025 immich\ndrwxrwx--- 1 Adm1n Media 30 Jun 15 2025 jellyfinht\ndrwxrwxrwx+ 1 Adm1n admin 20 Aug 31 2025 kavita\ndrwxrwxrwx+ 1 Adm1n admin 0 Oct 12 2025 libreoffice\ndrwxrwxrwx+ 1 Adm1n admin 12 Dec 13 21:12 linkwarden\ndrwxrwxrwx+ 1 Adm1n admin 274 May 18 21:56 location-logger\ndrwxrwxrwx+ 1 dnsmasq systemd-journal 432 Aug 27 2025 mariadb\ndrwxrwxrwx+ 1 Adm1n admin 122 Apr 26 19:03 meeting-detector\ndrwxrwxrwx+ 1 Adm1n admin 0 Aug 15 2025 mindfulmama\ndrwxrwxrwx+ 1 Adm1n admin 22 Jul 16 2025 n8n\ndrwxrwxrwx+ 1 Adm1n admin 176 Feb 20 17:33 notifier-app\ndrwxrwxrwx+ 1 Adm1n admin 52 Jun 15 2025 npm\ndrwxrwxrwx+ 1 Adm1n admin 306 Mar 29 17:34 oauth\ndrwxrwxrwx+ 1 Adm1n admin 92 Jun 15 2025 obsidian\ndrwxr-xr-x 1 root root 60 Mar 7 20:56 ollama\ndrwxr-xr-x 1 911 911 128 Jul 28 2025 openttd\ndrwxrwxrwx+ 1 Adm1n admin 234 Mar 7 16:30 openvpn-client\ndrwxr-xr-x 1 root root 58 May 21 19:48 open-webui\ndrwxrwxrwx+ 1 Adm1n admin 134 Dec 31 13:13 orchestrator\ndrwxrwxrwx+ 1 Adm1n admin 406 Mar 25 20:39 outfit-app\ndrwxrwxrwx+ 1 Adm1n admin 90 Aug 28 2025 owntracks-stack\ndrwxrwxrwx+ 1 Adm1n admin 156 Mar 10 20:51 paperlessngx\ndrwxrwxrwx+ 1 Adm1n admin 162 May 8 20:36 payments-logger\ndrwxrwxrwx+ 1 Adm1n admin 0 Sep 28 2025 personal-log\ndrwxrwxrwx+ 1 Adm1n admin 616 Mar 7 20:46 personal-log-system\ndrwxrwxrwx+ 1 Adm1n admin 26 Feb 19 19:41 player\ndrwxrwxrwx+ 1 Adm1n admin 202 Feb 23 21:35 portainer\ndrwxrwxrwx+ 1 dnsmasq admin 484 Dec 4 19:31 portnotedb\ndrwxrwxrwx+ 1 Adm1n admin 140 Apr 4 15:49 reminders-app\ndrwxrwxrwx+ 1 Adm1n admin 60 Oct 29 2025 romm\ndrwxrwxrwx+ 1 Adm1n admin 108 Feb 23 20:15 second-brain\ndrwxrwxrwx+ 1 Adm1n admin 10 Dec 30 17:16 static\ndrwxrwxrwx+ 1 Adm1n admin 28 Jun 19 2025 stirling\ndrwxrwxrwx+ 1 Adm1n admin 86 Oct 25 2025 syncthing\ndrwxrwxrwx+ 1 root root 56 Jun 5 2025 tailscale\ndrwxrwxrwx+ 1 Adm1n admin 186 Sep 23 2025 temp-logger\ndrwxrwxrwx+ 1 Adm1n admin 122 Jul 19 2025 test-app\ndrwxrwxrwx+ 1 Adm1n admin 52 Jun 14 2025 tmp\ndrwxrwxrwx+ 1 Adm1n admin 36 Jul 13 2025 torrent-stack\ndrwxrwxrwx+ 1 Adm1n admin 48 Dec 19 10:58 tree\ndrwxrwxrwx+ 1 Adm1n admin 0 Oct 31 2025 trilium\ndrwxrwxrwx+ 1 Adm1n admin 34 Dec 3 21:18 tubearchivist\ndrwxrwxrwx+ 1 Adm1n admin 22 Jul 25 2025 twenty\ndrwxrwxrwx+ 1 Adm1n admin 0 Nov 2 2025 uptimekuma\ndrwxrwxrwx+ 1 Adm1n admin 30 Dec 7 17:30 ytptube\n-rwxrwxrwx+ 1 Adm1n admin 11K Oct 29 2025 .DS_Store\n-rwxrwxrwx 1 Adm1n admin 13K May 20 21:47 SERVICES.md\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker$ mkdir polygloth\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker$ ll\ntotal 56K\ndrwxrwxrwx+ 1 root root 1.2K May 21 19:49 .\ndrwxr-xr-x 1 root root 260 May 9 17:55 ..\ndrwxrwxrwx+ 1 Adm1n admin 20 Jul 28 2025 adguard\ndrwxrwxrwx+ 1 Adm1n admin 66 Apr 5 13:14 ai-stack\ndrwxrwxrwx+ 1 Adm1n admin 12 Aug 1 2025 app-db\ndrwxrwxr-x 1 appflowy users 138 Dec 14 18:21 appflowy\ndrwxrwxrwx+ 1 Adm1n admin 72 May 20 07:53 audiobookshelf\ndrwxrwxrwx+ 1 Adm1n admin 128 Mar 30 19:52 auth\ndrwxrwxrwx+ 1 Adm1n admin 166 May 21 19:46 beszel\ndrwxrwxrwx+ 1 Adm1n admin 38 Jun 16 2025 bitwarden\ndrwxrwxrwx+ 1 Adm1n admin 36 Aug 25 2025 dawarich\ndrwxrwxrwx+ 1 Adm1n admin 322 Aug 15 2025 dsk-uploader\ndrwxrwxrwx+ 1 Adm1n admin 22 May 10 15:21 finance\ndrwxrwxrwx+ 1 Adm1n admin 92 Aug 19 2025 flask-app\ndrwxrwxrwx+ 1 Adm1n admin 308 Oct 7 2025 garmin-connector\ndrwxrwxrwx+ 1 Adm1n admin 12 Jul 18 2025 gitea\ndrwxrwxrwx+ 1 Adm1n admin 0 Feb 16 19:30 health\ndrwxrwxrwx+ 1 Adm1n admin 220 Feb 16 21:09 health-tracker\ndrwxrwxrwx+ 1 Adm1n admin 0 Oct 31 2025 homarr\ndrwxrwxrwx+ 1 Adm1n admin 146 Mar 7 20:46 hst\ndrwxrwxrwx+ 1 Adm1n admin 66 Aug 31 2025 immich\ndrwxrwx--- 1 Adm1n Media 30 Jun 15 2025 jellyfinht\ndrwxrwxrwx+ 1 Adm1n admin 20 Aug 31 2025 kavita\ndrwxrwxrwx+ 1 Adm1n admin 0 Oct 12 2025 libreoffice\ndrwxrwxrwx+ 1 Adm1n admin 12 Dec 13 21:12 linkwarden\ndrwxrwxrwx+ 1 Adm1n admin 274 May 18 21:56 location-logger\ndrwxrwxrwx+ 1 dnsmasq systemd-journal 432 Aug 27 2025 mariadb\ndrwxrwxrwx+ 1 Adm1n admin 122 Apr 26 19:03 meeting-detector\ndrwxrwxrwx+ 1 Adm1n admin 0 Aug 15 2025 mindfulmama\ndrwxrwxrwx+ 1 Adm1n admin 22 Jul 16 2025 n8n\ndrwxrwxrwx+ 1 Adm1n admin 176 Feb 20 17:33 notifier-app\ndrwxrwxrwx+ 1 Adm1n admin 52 Jun 15 2025 npm\ndrwxrwxrwx+ 1 Adm1n admin 306 Mar 29 17:34 oauth\ndrwxrwxrwx+ 1 Adm1n admin 92 Jun 15 2025 obsidian\ndrwxr-xr-x 1 root root 60 Mar 7 20:56 ollama\ndrwxr-xr-x 1 911 911 128 Jul 28 2025 openttd\ndrwxrwxrwx+ 1 Adm1n admin 234 Mar 7 16:30 openvpn-client\ndrwxr-xr-x 1 root root 58 May 21 19:49 open-webui\ndrwxrwxrwx+ 1 Adm1n admin 134 Dec 31 13:13 orchestrator\ndrwxrwxrwx+ 1 Adm1n admin 406 Mar 25 20:39 outfit-app\ndrwxrwxrwx+ 1 Adm1n admin 90 Aug 28 2025 owntracks-stack\ndrwxrwxrwx+ 1 Adm1n admin 156 Mar 10 20:51 paperlessngx\ndrwxrwxrwx+ 1 Adm1n admin 162 May 8 20:36 payments-logger\ndrwxrwxrwx+ 1 Adm1n admin 0 Sep 28 2025 personal-log\ndrwxrwxrwx+ 1 Adm1n admin 616 Mar 7 20:46 personal-log-system\ndrwxrwxrwx+ 1 Adm1n admin 26 Feb 19 19:41 player\ndrwxrwxrwx+ 1 Adm1n admin 0 May 21 19:49 polygloth\ndrwxrwxrwx+ 1 Adm1n admin 202 Feb 23 21:35 portainer\ndrwxrwxrwx+ 1 dnsmasq admin 484 Dec 4 19:31 portnotedb\ndrwxrwxrwx+ 1 Adm1n admin 140 Apr 4 15:49 reminders-app\ndrwxrwxrwx+ 1 Adm1n admin 60 Oct 29 2025 romm\ndrwxrwxrwx+ 1 Adm1n admin 108 Feb 23 20:15 second-brain\ndrwxrwxrwx+ 1 Adm1n admin 10 Dec 30 17:16 static\ndrwxrwxrwx+ 1 Adm1n admin 28 Jun 19 2025 stirling\ndrwxrwxrwx+ 1 Adm1n admin 86 Oct 25 2025 syncthing\ndrwxrwxrwx+ 1 root root 56 Jun 5 2025 tailscale\ndrwxrwxrwx+ 1 Adm1n admin 186 Sep 23 2025 temp-logger\ndrwxrwxrwx+ 1 Adm1n admin 122 Jul 19 2025 test-app\ndrwxrwxrwx+ 1 Adm1n admin 52 Jun 14 2025 tmp\ndrwxrwxrwx+ 1 Adm1n admin 36 Jul 13 2025 torrent-stack\ndrwxrwxrwx+ 1 Adm1n admin 48 Dec 19 10:58 tree\ndrwxrwxrwx+ 1 Adm1n admin 0 Oct 31 2025 trilium\ndrwxrwxrwx+ 1 Adm1n admin 34 Dec 3 21:18 tubearchivist\ndrwxrwxrwx+ 1 Adm1n admin 22 Jul 25 2025 twenty\ndrwxrwxrwx+ 1 Adm1n admin 0 Nov 2 2025 uptimekuma\ndrwxrwxrwx+ 1 Adm1n admin 30 Dec 7 17:30 ytptube\n-rwxrwxrwx+ 1 Adm1n admin 11K Oct 29 2025 .DS_Store\n-rwxrwxrwx 1 Adm1n admin 13K May 20 21:47 SERVICES.md\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker$ cd polygloth/\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ ll\ntotal 0\ndrwxrwxrwx+ 1 Adm1n admin 0 May 21 19:49 .\ndrwxrwxrwx+ 1 root root 1.2K May 21 19:49 ..\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ cd /volume2/docker/polygloth\necho \"ANTHROPIC_API_KEY=sk-ant-YOUR_KEY_HERE\" > .env\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ mkdir -p media\ncp /path/to/your/episode.mkv media/\ncp: cannot stat '/path/to/your/episode.mkv': No such file or directory\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ cd /volume2/docker/polygloth\ndocker compose build\n./run.sh Sto.Para.5.S01E01.mkv\npermission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head \"http://%2Fvar%2Frun%2Fdocker.sock/_ping\": dial unix /var/run/docker.sock: connect: permission denied\npermission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get \"http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Dpolygloth%22%3Atrue%7D%7D\": dial unix /var/run/docker.sock: connect: permission denied\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ sudo docker compose build\n[sudo] password for Adm1n: \n[+] Building 84.3s (11/11) FINISHED docker:default\n => [lang-subs internal] load build definition from Dockerfile 0.1s\n => => transferring dockerfile: 419B 0.0s\n => [lang-subs internal] load metadata for docker.io/library/python:3.12-slim 1.5s\n => [lang-subs internal] load .dockerignore 0.1s\n => => transferring context: 2B 0.0s\n => [lang-subs 1/6] FROM docker.io/library/python:3.12-slim@sha256:9d3abd9fc11d06998ccdbdd93b4dd49b5ad7d67fcbbc11c016eb0eb2c2194891 4.4s\n => => resolve docker.io/library/python:3.12-slim@sha256:9d3abd9fc11d06998ccdbdd93b4dd49b5ad7d67fcbbc11c016eb0eb2c2194891 0.1s\n => => sha256:9d3abd9fc11d06998ccdbdd93b4dd49b5ad7d67fcbbc11c016eb0eb2c2194891 10.37kB / 10.37kB 0.0s\n => => sha256:866411c135b507754efdf2fda51484be4d3d7d5173ed53cd083106132e710904 1.75kB / 1.75kB 0.0s\n => => sha256:e1054bc5a9f2ddbdd6d0247997c45f2201a4e9b4c6f824b247064a558e877070 5.65kB / 5.65kB 0.0s\n => => sha256:5b4d6ff92fc4e14e911b7753c954fac965d48c40fe1075758d284148ccace970 29.78MB / 29.78MB 1.4s\n => => sha256:e113665b194b20ba7e9093ef6a1a38edbaebbfb983c00e379a45a142a95a86ef 12.11MB / 12.11MB 0.6s\n => => sha256:4a9dde5cdde190bfa0a3ab17863a083e66ea9636b157638c315357dfa476ba76 1.29MB / 1.29MB 0.6s\n => => sha256:07342fe545e640a2c4960e97ffe33a301cd8e61e0c4d4307d7ac66b6b8a9eb2d 250B / 250B 0.8s\n => => extracting sha256:5b4d6ff92fc4e14e911b7753c954fac965d48c40fe1075758d284148ccace970 1.3s\n => => extracting sha256:4a9dde5cdde190bfa0a3ab17863a083e66ea9636b157638c315357dfa476ba76 0.1s\n => => extracting sha256:e113665b194b20ba7e9093ef6a1a38edbaebbfb983c00e379a45a142a95a86ef 0.7s\n => => extracting sha256:07342fe545e640a2c4960e97ffe33a301cd8e61e0c4d4307d7ac66b6b8a9eb2d 0.0s\n => [lang-subs internal] load build context 0.2s\n => => transferring context: 14.80kB 0.0s\n => [lang-subs 2/6] RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg && rm -rf /var/lib/apt/lists/* 56.3s\n => [lang-subs 3/6] WORKDIR /app 0.2s \n => [lang-subs 4/6] COPY requirements.txt . 0.2s \n => [lang-subs 5/6] RUN pip install --no-cache-dir -r requirements.txt 19.1s \n => [lang-subs 6/6] COPY lang_subs.py . 0.2s \n => [lang-subs] exporting to image 1.8s \n => => exporting layers 1.8s \n => => writing image sha256:cf829e2bf1e1cab1cd63c33a3ed814cf8c0013659cf47d90270b913a8b89009d 0.0s \n => => naming to docker.io/library/polygloth-lang-subs 0.0s \nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ ./run.sh Sto.Para.5.S01E01.mkv \npermission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get \"http://%2Fvar%2Frun%2Fdocker.sock/v1.45/containers/json?all=1&filters=%7B%22label%22%3A%7B%22com.docker.compose.config-hash%22%3Atrue%2C%22com.docker.compose.project%3Dpolygloth%22%3Atrue%7D%7D\": dial unix /var/run/docker.sock: connect: permission denied\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ sudo ./run.sh Sto.Para.5.S01E01.mkv\n[+] Creating 1/1\n ✔ Network polygloth_default Created 0.2s \nVideo: Sto.Para.5.S01E01.mkv\nCache: /media/.lang_subs_cache/Sto.Para.5.S01E01\n\n[1/4] Extracting audio...\n Extracting audio...\n\n[2/4] Transcribing...\n Transcribing with large-v3...\nWarning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.\n^C^C^C^CTraceback (most recent call last):\n File \"/app/lang_subs.py\", line 353, in <module>\n main()\n File \"/app/lang_subs.py\", line 337, in main\n segments = transcribe(audio_path, cache_dir, args.whisper_model, args.source_lang)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/app/lang_subs.py\", line 98, in transcribe\n for i, seg in enumerate(raw_segs)\n ^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.12/site-packages/faster_whisper/transcribe.py\", line 1851, in restore_speech_timestamps\n for segment in segments:\n ^^^^^^^^\n File \"/usr/local/lib/python3.12/site-packages/faster_whisper/transcribe.py\", line 1213, in generate_segments\n ) = self.generate_with_fallback(encoder_output, prompt, tokenizer, options)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.12/site-packages/faster_whisper/transcribe.py\", line 1446, in generate_with_fallback\n result = self.model.generate(\n ^^^^^^^^^^^^^^^^^^^^\nKeyboardInterrupt\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ sudo ./run.sh Sto.Para.5.S01E01.mkv\n[sudo] password for Adm1n: \nVideo: Sto.Para.5.S01E01.mkv\nCache: /media/.lang_subs_cache/Sto.Para.5.S01E01\n\n[1/4] Extracting audio...\n [cache] audio.wav\n\n[2/4] Transcribing...\n Transcribing with large-v3...\nWarning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.\nConnection to 192.168.0.242 closed by remote host.\nConnection to 192.168.0.242 closed.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nas\nAdm1n@DXP4800PLUS-B5F8:~$ cd /volume2/docker/polygloth\nsudo docker compose build\n[sudo] password for Adm1n: \n[+] Building 1.7s (11/11) FINISHED docker:default\n => [lang-subs internal] load build definition from Dockerfile 0.0s\n => => transferring dockerfile: 419B 0.0s\n => [lang-subs internal] load metadata for docker.io/library/python:3.12-slim 0.9s\n => [lang-subs internal] load .dockerignore 0.0s\n => => transferring context: 2B 0.0s\n => [lang-subs 1/6] FROM docker.io/library/python:3.12-slim@sha256:9d3abd9fc11d06998ccdbdd93b4dd49b5ad7d67fcbbc11c016eb0eb2c2194891 0.0s\n => [lang-subs internal] load build context 0.0s\n => => transferring context: 17.29kB 0.0s\n => CACHED [lang-subs 2/6] RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg && rm -rf /var/lib/apt/lists/* 0.0s\n => CACHED [lang-subs 3/6] WORKDIR /app 0.0s\n => CACHED [lang-subs 4/6] COPY requirements.txt . 0.0s\n => CACHED [lang-subs 5/6] RUN pip install --no-cache-dir -r requirements.txt 0.0s\n => [lang-subs 6/6] COPY lang_subs.py . 0.2s\n => [lang-subs] exporting to image 0.2s\n => => exporting layers 0.1s\n => => writing image sha256:e7b015a420bc2f4a949476ff04d4341276aa701947f508eee59469530f65ee83 0.0s\n => => naming to docker.io/library/polygloth-lang-subs 0.0s\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ sudo rm -rf media/.lang_subs_cache/Sto.Para.5.S01E01\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ sudo ./run.sh Sto.Para.5.S01E01.mkv --duration 300\nVideo: Sto.Para.5.S01E01.mkv\nCache: /media/.lang_subs_cache/Sto.Para.5.S01E01\n\n[1/4] Extracting audio...\n Extracting audio (first 300s)...\n\n[2/4] Transcribing...\n Transcribing with large-v3...\nWarning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.\n 6 segments\n\n[3/4] Annotating with Claude...\n Segments 0–5...\n\n[4/4] Rendering outputs...\n Written: /media/Sto.Para.5.S01E01.ass\n Written: /media/Sto.Para.5.S01E01.study.md\n\nDone.\nAdm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ Connection to 192.168.0.242 closed by remote host.\nConnection to 192.168.0.242 closed.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.26894948,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.27094415,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.34773937,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.34973404,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.42652926,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.42852393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.50515294,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.5071476,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5837766,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.58577126,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.66240025,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.664395,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.50332445,"top":1.0,"width":0.010970744,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
-877557384647667347
|
-4826995791155145436
|
click
|
accessibility
|
NULL
|
Last login: Wed May 20 19:33:03 on ttys010
Poetry Last login: Wed May 20 19:33:03 on ttys010
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
nas
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nas
Adm1n@DXP4800PLUS-B5F8:~$ cd /volume2/docker/
Adm1n@DXP4800PLUS-B5F8:/volume2/docker$ ll
total 56K
drwxrwxrwx+ 1 root root 1.2K May 20 21:47 .
drwxr-xr-x 1 root root 260 May 9 17:55 ..
drwxrwxrwx+ 1 Adm1n admin 20 Jul 28 2025 adguard
drwxrwxrwx+ 1 Adm1n admin 66 Apr 5 13:14 ai-stack
drwxrwxrwx+ 1 Adm1n admin 12 Aug 1 2025 app-db
drwxrwxr-x 1 appflowy users 138 Dec 14 18:21 appflowy
drwxrwxrwx+ 1 Adm1n admin 72 May 20 07:53 audiobookshelf
drwxrwxrwx+ 1 Adm1n admin 128 Mar 30 19:52 auth
drwxrwxrwx+ 1 Adm1n admin 166 May 21 19:46 beszel
drwxrwxrwx+ 1 Adm1n admin 38 Jun 16 2025 bitwarden
drwxrwxrwx+ 1 Adm1n admin 36 Aug 25 2025 dawarich
drwxrwxrwx+ 1 Adm1n admin 322 Aug 15 2025 dsk-uploader
drwxrwxrwx+ 1 Adm1n admin 22 May 10 15:21 finance
drwxrwxrwx+ 1 Adm1n admin 92 Aug 19 2025 flask-app
drwxrwxrwx+ 1 Adm1n admin 308 Oct 7 2025 garmin-connector
drwxrwxrwx+ 1 Adm1n admin 12 Jul 18 2025 gitea
drwxrwxrwx+ 1 Adm1n admin 0 Feb 16 19:30 health
drwxrwxrwx+ 1 Adm1n admin 220 Feb 16 21:09 health-tracker
drwxrwxrwx+ 1 Adm1n admin 0 Oct 31 2025 homarr
drwxrwxrwx+ 1 Adm1n admin 146 Mar 7 20:46 hst
drwxrwxrwx+ 1 Adm1n admin 66 Aug 31 2025 immich
drwxrwx--- 1 Adm1n Media 30 Jun 15 2025 jellyfinht
drwxrwxrwx+ 1 Adm1n admin 20 Aug 31 2025 kavita
drwxrwxrwx+ 1 Adm1n admin 0 Oct 12 2025 libreoffice
drwxrwxrwx+ 1 Adm1n admin 12 Dec 13 21:12 linkwarden
drwxrwxrwx+ 1 Adm1n admin 274 May 18 21:56 location-logger
drwxrwxrwx+ 1 dnsmasq systemd-journal 432 Aug 27 2025 mariadb
drwxrwxrwx+ 1 Adm1n admin 122 Apr 26 19:03 meeting-detector
drwxrwxrwx+ 1 Adm1n admin 0 Aug 15 2025 mindfulmama
drwxrwxrwx+ 1 Adm1n admin 22 Jul 16 2025 n8n
drwxrwxrwx+ 1 Adm1n admin 176 Feb 20 17:33 notifier-app
drwxrwxrwx+ 1 Adm1n admin 52 Jun 15 2025 npm
drwxrwxrwx+ 1 Adm1n admin 306 Mar 29 17:34 oauth
drwxrwxrwx+ 1 Adm1n admin 92 Jun 15 2025 obsidian
drwxr-xr-x 1 root root 60 Mar 7 20:56 ollama
drwxr-xr-x 1 911 911 128 Jul 28 2025 openttd
drwxrwxrwx+ 1 Adm1n admin 234 Mar 7 16:30 openvpn-client
drwxr-xr-x 1 root root 58 May 21 19:48 open-webui
drwxrwxrwx+ 1 Adm1n admin 134 Dec 31 13:13 orchestrator
drwxrwxrwx+ 1 Adm1n admin 406 Mar 25 20:39 outfit-app
drwxrwxrwx+ 1 Adm1n admin 90 Aug 28 2025 owntracks-stack
drwxrwxrwx+ 1 Adm1n admin 156 Mar 10 20:51 paperlessngx
drwxrwxrwx+ 1 Adm1n admin 162 May 8 20:36 payments-logger
drwxrwxrwx+ 1 Adm1n admin 0 Sep 28 2025 personal-log
drwxrwxrwx+ 1 Adm1n admin 616 Mar 7 20:46 personal-log-system
drwxrwxrwx+ 1 Adm1n admin 26 Feb 19 19:41 player
drwxrwxrwx+ 1 Adm1n admin 202 Feb 23 21:35 portainer
drwxrwxrwx+ 1 dnsmasq admin 484 Dec 4 19:31 portnotedb
drwxrwxrwx+ 1 Adm1n admin 140 Apr 4 15:49 reminders-app
drwxrwxrwx+ 1 Adm1n admin 60 Oct 29 2025 romm
drwxrwxrwx+ 1 Adm1n admin 108 Feb 23 20:15 second-brain
drwxrwxrwx+ 1 Adm1n admin 10 Dec 30 17:16 static
drwxrwxrwx+ 1 Adm1n admin 28 Jun 19 2025 stirling
drwxrwxrwx+ 1 Adm1n admin 86 Oct 25 2025 syncthing
drwxrwxrwx+ 1 root root 56 Jun 5 2025 tailscale
drwxrwxrwx+ 1 Adm1n admin 186 Sep 23 2025 temp-logger
drwxrwxrwx+ 1 Adm1n admin 122 Jul 19 2025 test-app
drwxrwxrwx+ 1 Adm1n admin 52 Jun 14 2025 tmp
drwxrwxrwx+ 1 Adm1n admin 36 Jul 13 2025 torrent-stack
drwxrwxrwx+ 1 Adm1n admin 48 Dec 19 10:58 tree
drwxrwxrwx+ 1 Adm1n admin 0 Oct 31 2025 trilium
drwxrwxrwx+ 1 Adm1n admin 34 Dec 3 21:18 tubearchivist
drwxrwxrwx+ 1 Adm1n admin 22 Jul 25 2025 twenty
drwxrwxrwx+ 1 Adm1n admin 0 Nov 2 2025 uptimekuma
drwxrwxrwx+ 1 Adm1n admin 30 Dec 7 17:30 ytptube
-rwxrwxrwx+ 1 Adm1n admin 11K Oct 29 2025 .DS_Store
-rwxrwxrwx 1 Adm1n admin 13K May 20 21:47 SERVICES.md
Adm1n@DXP4800PLUS-B5F8:/volume2/docker$ mkdir polygloth
Adm1n@DXP4800PLUS-B5F8:/volume2/docker$ ll
total 56K
drwxrwxrwx+ 1 root root 1.2K May 21 19:49 .
drwxr-xr-x 1 root root 260 May 9 17:55 ..
drwxrwxrwx+ 1 Adm1n admin 20 Jul 28 2025 adguard
drwxrwxrwx+ 1 Adm1n admin 66 Apr 5 13:14 ai-stack
drwxrwxrwx+ 1 Adm1n admin 12 Aug 1 2025 app-db
drwxrwxr-x 1 appflowy users 138 Dec 14 18:21 appflowy
drwxrwxrwx+ 1 Adm1n admin 72 May 20 07:53 audiobookshelf
drwxrwxrwx+ 1 Adm1n admin 128 Mar 30 19:52 auth
drwxrwxrwx+ 1 Adm1n admin 166 May 21 19:46 beszel
drwxrwxrwx+ 1 Adm1n admin 38 Jun 16 2025 bitwarden
drwxrwxrwx+ 1 Adm1n admin 36 Aug 25 2025 dawarich
drwxrwxrwx+ 1 Adm1n admin 322 Aug 15 2025 dsk-uploader
drwxrwxrwx+ 1 Adm1n admin 22 May 10 15:21 finance
drwxrwxrwx+ 1 Adm1n admin 92 Aug 19 2025 flask-app
drwxrwxrwx+ 1 Adm1n admin 308 Oct 7 2025 garmin-connector
drwxrwxrwx+ 1 Adm1n admin 12 Jul 18 2025 gitea
drwxrwxrwx+ 1 Adm1n admin 0 Feb 16 19:30 health
drwxrwxrwx+ 1 Adm1n admin 220 Feb 16 21:09 health-tracker
drwxrwxrwx+ 1 Adm1n admin 0 Oct 31 2025 homarr
drwxrwxrwx+ 1 Adm1n admin 146 Mar 7 20:46 hst
drwxrwxrwx+ 1 Adm1n admin 66 Aug 31 2025 immich
drwxrwx--- 1 Adm1n Media 30 Jun 15 2025 jellyfinht
drwxrwxrwx+ 1 Adm1n admin 20 Aug 31 2025 kavita
drwxrwxrwx+ 1 Adm1n admin 0 Oct 12 2025 libreoffice
drwxrwxrwx+ 1 Adm1n admin 12 Dec 13 21:12 linkwarden
drwxrwxrwx+ 1 Adm1n admin 274 May 18 21:56 location-logger
drwxrwxrwx+ 1 dnsmasq systemd-journal 432 Aug 27 2025 mariadb
drwxrwxrwx+ 1 Adm1n admin 122 Apr 26 19:03 meeting-detector
drwxrwxrwx+ 1 Adm1n admin 0 Aug 15 2025 mindfulmama
drwxrwxrwx+ 1 Adm1n admin 22 Jul 16 2025 n8n
drwxrwxrwx+ 1 Adm1n admin 176 Feb 20 17:33 notifier-app
drwxrwxrwx+ 1 Adm1n admin 52 Jun 15 2025 npm
drwxrwxrwx+ 1 Adm1n admin 306 Mar 29 17:34 oauth
drwxrwxrwx+ 1 Adm1n admin 92 Jun 15 2025 obsidian
drwxr-xr-x 1 root root 60 Mar 7 20:56 ollama
drwxr-xr-x 1 911 911 128 Jul 28 2025 openttd
drwxrwxrwx+ 1 Adm1n admin 234 Mar 7 16:30 openvpn-client
drwxr-xr-x 1 root root 58 May 21 19:49 open-webui
drwxrwxrwx+ 1 Adm1n admin 134 Dec 31 13:13 orchestrator
drwxrwxrwx+ 1 Adm1n admin 406 Mar 25 20:39 outfit-app
drwxrwxrwx+ 1 Adm1n admin 90 Aug 28 2025 owntracks-stack
drwxrwxrwx+ 1 Adm1n admin 156 Mar 10 20:51 paperlessngx
drwxrwxrwx+ 1 Adm1n admin 162 May 8 20:36 payments-logger
drwxrwxrwx+ 1 Adm1n admin 0 Sep 28 2025 personal-log
drwxrwxrwx+ 1 Adm1n admin 616 Mar 7 20:46 personal-log-system
drwxrwxrwx+ 1 Adm1n admin 26 Feb 19 19:41 player
drwxrwxrwx+ 1 Adm1n admin 0 May 21 19:49 polygloth
drwxrwxrwx+ 1 Adm1n admin 202 Feb 23 21:35 portainer
drwxrwxrwx+ 1 dnsmasq admin 484 Dec 4 19:31 portnotedb
drwxrwxrwx+ 1 Adm1n admin 140 Apr 4 15:49 reminders-app
drwxrwxrwx+ 1 Adm1n admin 60 Oct 29 2025 romm
drwxrwxrwx+ 1 Adm1n admin 108 Feb 23 20:15 second-brain
drwxrwxrwx+ 1 Adm1n admin 10 Dec 30 17:16 static
drwxrwxrwx+ 1 Adm1n admin 28 Jun 19 2025 stirling
drwxrwxrwx+ 1 Adm1n admin 86 Oct 25 2025 syncthing
drwxrwxrwx+ 1 root root 56 Jun 5 2025 tailscale
drwxrwxrwx+ 1 Adm1n admin 186 Sep 23 2025 temp-logger
drwxrwxrwx+ 1 Adm1n admin 122 Jul 19 2025 test-app
drwxrwxrwx+ 1 Adm1n admin 52 Jun 14 2025 tmp
drwxrwxrwx+ 1 Adm1n admin 36 Jul 13 2025 torrent-stack
drwxrwxrwx+ 1 Adm1n admin 48 Dec 19 10:58 tree
drwxrwxrwx+ 1 Adm1n admin 0 Oct 31 2025 trilium
drwxrwxrwx+ 1 Adm1n admin 34 Dec 3 21:18 tubearchivist
drwxrwxrwx+ 1 Adm1n admin 22 Jul 25 2025 twenty
drwxrwxrwx+ 1 Adm1n admin 0 Nov 2 2025 uptimekuma
drwxrwxrwx+ 1 Adm1n admin 30 Dec 7 17:30 ytptube
-rwxrwxrwx+ 1 Adm1n admin 11K Oct 29 2025 .DS_Store
-rwxrwxrwx 1 Adm1n admin 13K May 20 21:47 SERVICES.md
Adm1n@DXP4800PLUS-B5F8:/volume2/docker$ cd polygloth/
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ ll
total 0
drwxrwxrwx+ 1 Adm1n admin 0 May 21 19:49 .
drwxrwxrwx+ 1 root root 1.2K May 21 19:49 ..
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ cd /volume2/docker/polygloth
echo "[ENV_SECRET] > .env
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ mkdir -p media
cp /path/to/your/episode.mkv media/
cp: cannot stat '/path/to/your/episode.mkv': No such file or directory
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ cd /volume2/docker/polygloth
docker compose build
./run.sh Sto.Para.5.S01E01.mkv
permission denied while trying to connect to the Docker daemon socket at [URL_WITH_CREDENTIALS] sudo docker compose build
[sudo] password for Adm1n:
[+] Building 84.3s (11/11) FINISHED docker:default
=> [lang-subs internal] load build definition from Dockerfile 0.1s
=> => transferring dockerfile: 419B 0.0s
=> [lang-subs internal] load metadata for docker.io/library/python:3.12-slim 1.5s
=> [lang-subs internal] load .dockerignore 0.1s
=> => transferring context: 2B 0.0s
=> [lang-subs 1/6] FROM docker.io/library/python:3.12-slim@sha256:9d3abd9fc11d06998ccdbdd93b4dd49b5ad7d67fcbbc11c016eb0eb2c2194891 4.4s
=> => resolve docker.io/library/python:3.12-slim@sha256:9d3abd9fc11d06998ccdbdd93b4dd49b5ad7d67fcbbc11c016eb0eb2c2194891 0.1s
=> => sha256:9d3abd9fc11d06998ccdbdd93b4dd49b5ad7d67fcbbc11c016eb0eb2c2194891 10.37kB / 10.37kB 0.0s
=> => sha256:866411c135b507754efdf2fda51484be4d3d7d5173ed53cd083106132e710904 1.75kB / 1.75kB 0.0s
=> => sha256:e1054bc5a9f2ddbdd6d0247997c45f2201a4e9b4c6f824b247064a558e877070 5.65kB / 5.65kB 0.0s
=> => sha256:5b4d6ff92fc4e14e911b7753c954fac965d48c40fe1075758d284148ccace970 29.78MB / 29.78MB 1.4s
=> => sha256:e113665b194b20ba7e9093ef6a1a38edbaebbfb983c00e379a45a142a95a86ef 12.11MB / 12.11MB 0.6s
=> => sha256:4a9dde5cdde190bfa0a3ab17863a083e66ea9636b157638c315357dfa476ba76 1.29MB / 1.29MB 0.6s
=> => sha256:07342fe545e640a2c4960e97ffe33a301cd8e61e0c4d4307d7ac66b6b8a9eb2d 250B / 250B 0.8s
=> => extracting sha256:5b4d6ff92fc4e14e911b7753c954fac965d48c40fe1075758d284148ccace970 1.3s
=> => extracting sha256:4a9dde5cdde190bfa0a3ab17863a083e66ea9636b157638c315357dfa476ba76 0.1s
=> => extracting sha256:e113665b194b20ba7e9093ef6a1a38edbaebbfb983c00e379a45a142a95a86ef 0.7s
=> => extracting sha256:07342fe545e640a2c4960e97ffe33a301cd8e61e0c4d4307d7ac66b6b8a9eb2d 0.0s
=> [lang-subs internal] load build context 0.2s
=> => transferring context: 14.80kB 0.0s
=> [lang-subs 2/6] RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg && rm -rf /var/lib/apt/lists/* 56.3s
=> [lang-subs 3/6] WORKDIR /app 0.2s
=> [lang-subs 4/6] COPY requirements.txt . 0.2s
=> [lang-subs 5/6] RUN pip install --no-cache-dir -r requirements.txt 19.1s
=> [lang-subs 6/6] COPY lang_subs.py . 0.2s
=> [lang-subs] exporting to image 1.8s
=> => exporting layers 1.8s
=> => writing image sha256:cf829e2bf1e1cab1cd63c33a3ed814cf8c0013659cf47d90270b913a8b89009d 0.0s
=> => naming to docker.io/library/polygloth-lang-subs 0.0s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ ./run.sh Sto.Para.5.S01E01.mkv
permission denied while trying to connect to the Docker daemon socket at [URL_WITH_CREDENTIALS] sudo ./run.sh Sto.Para.5.S01E01.mkv
[+] Creating 1/1
✔ Network polygloth_default Created 0.2s
Video: Sto.Para.5.S01E01.mkv
Cache: /media/.lang_subs_cache/Sto.Para.5.S01E01
[1/4] Extracting audio...
Extracting audio...
[2/4] Transcribing...
Transcribing with large-v3...
Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.
^C^C^C^CTraceback (most recent call last):
File "/app/lang_subs.py", line 353, in <module>
main()
File "/app/lang_subs.py", line 337, in main
segments = transcribe(audio_path, cache_dir, args.whisper_model, args.source_lang)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/app/lang_subs.py", line 98, in transcribe
for i, seg in enumerate(raw_segs)
^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/faster_whisper/transcribe.py", line 1851, in restore_speech_timestamps
for segment in segments:
^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/faster_whisper/transcribe.py", line 1213, in generate_segments
) = self.generate_with_fallback(encoder_output, prompt, tokenizer, options)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.12/site-packages/faster_whisper/transcribe.py", line 1446, in generate_with_fallback
result = self.model.generate(
^^^^^^^^^^^^^^^^^^^^
KeyboardInterrupt
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ sudo ./run.sh Sto.Para.5.S01E01.mkv
[sudo] password for Adm1n:
Video: Sto.Para.5.S01E01.mkv
Cache: /media/.lang_subs_cache/Sto.Para.5.S01E01
[1/4] Extracting audio...
[cache] audio.wav
[2/4] Transcribing...
Transcribing with large-v3...
Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.
Connection to [IP_ADDRESS] closed by remote host.
Connection to [IP_ADDRESS] closed.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ nas
Adm1n@DXP4800PLUS-B5F8:~$ cd /volume2/docker/polygloth
sudo docker compose build
[sudo] password for Adm1n:
[+] Building 1.7s (11/11) FINISHED docker:default
=> [lang-subs internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 419B 0.0s
=> [lang-subs internal] load metadata for docker.io/library/python:3.12-slim 0.9s
=> [lang-subs internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [lang-subs 1/6] FROM docker.io/library/python:3.12-slim@sha256:9d3abd9fc11d06998ccdbdd93b4dd49b5ad7d67fcbbc11c016eb0eb2c2194891 0.0s
=> [lang-subs internal] load build context 0.0s
=> => transferring context: 17.29kB 0.0s
=> CACHED [lang-subs 2/6] RUN apt-get update && apt-get install -y --no-install-recommends ffmpeg && rm -rf /var/lib/apt/lists/* 0.0s
=> CACHED [lang-subs 3/6] WORKDIR /app 0.0s
=> CACHED [lang-subs 4/6] COPY requirements.txt . 0.0s
=> CACHED [lang-subs 5/6] RUN pip install --no-cache-dir -r requirements.txt 0.0s
=> [lang-subs 6/6] COPY lang_subs.py . 0.2s
=> [lang-subs] exporting to image 0.2s
=> => exporting layers 0.1s
=> => writing image sha256:e7b015a420bc2f4a949476ff04d4341276aa701947f508eee59469530f65ee83 0.0s
=> => naming to docker.io/library/polygloth-lang-subs 0.0s
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ sudo rm -rf media/.lang_subs_cache/Sto.Para.5.S01E01
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ sudo ./run.sh Sto.Para.5.S01E01.mkv --duration 300
Video: Sto.Para.5.S01E01.mkv
Cache: /media/.lang_subs_cache/Sto.Para.5.S01E01
[1/4] Extracting audio...
Extracting audio (first 300s)...
[2/4] Transcribing...
Transcribing with large-v3...
Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.
6 segments
[3/4] Annotating with Claude...
Segments 0–5...
[4/4] Rendering outputs...
Written: /media/Sto.Para.5.S01E01.ass
Written: /media/Sto.Para.5.S01E01.study.md
Done.
Adm1n@DXP4800PLUS-B5F8:/volume2/docker/polygloth$ Connection to [IP_ADDRESS] closed by remote host.
Connection to [IP_ADDRESS] closed.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
68864
|
NULL
|
NULL
|
NULL
|
|
68867
|
2467
|
5
|
2026-05-22T07:26:36.304022+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434796304_m1.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
2026-05-21T16:49:48.249082Z INFO screenpipe_audio 2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
[URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1","depth":4,"on_screen":true,"value":"2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.46944445,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-2818441660375198252
|
-4888301395353209375
|
click
|
accessibility
|
NULL
|
2026-05-21T16:49:48.249082Z INFO screenpipe_audio 2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
[URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
68868
|
2468
|
5
|
2026-05-22T07:26:36.476754+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434796476_m2.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
2026-05-21T16:49:48.249082Z INFO screenpipe_audio 2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
[URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1","depth":4,"on_screen":true,"value":"2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.26894948,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.27094415,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.34773937,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.34973404,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.42652926,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.42852393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.50515294,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.5071476,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5837766,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.58577126,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.66240025,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.664395,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.4950133,"top":1.0,"width":0.027925532,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
-2818441660375198252
|
-4888301395353209375
|
click
|
accessibility
|
NULL
|
2026-05-21T16:49:48.249082Z INFO screenpipe_audio 2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
[URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
68869
|
2467
|
6
|
2026-05-22T07:27:06.496146+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434826496_m1.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
2026-05-21T16:49:48.249082Z INFO screenpipe_audio 2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
[URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1","depth":4,"on_screen":true,"value":"2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.46944445,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-2818441660375198252
|
-4888301395353209375
|
idle
|
accessibility
|
NULL
|
2026-05-21T16:49:48.249082Z INFO screenpipe_audio 2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
[URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ...
|
68867
|
NULL
|
NULL
|
NULL
|
|
68870
|
2468
|
6
|
2026-05-22T07:27:06.685755+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434826685_m2.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
2026-05-21T16:49:48.249082Z INFO screenpipe_audio 2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
[URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1","depth":4,"on_screen":true,"value":"2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.26894948,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.27094415,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.34773937,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.34973404,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.42652926,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.42852393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.50515294,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.5071476,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5837766,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.58577126,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.66240025,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.664395,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.4950133,"top":1.0,"width":0.027925532,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
-2818441660375198252
|
-4888301395353209375
|
idle
|
accessibility
|
NULL
|
2026-05-21T16:49:48.249082Z INFO screenpipe_audio 2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
[URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ...
|
68868
|
NULL
|
NULL
|
NULL
|
|
68871
|
2467
|
7
|
2026-05-22T07:27:36.637070+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434856637_m1.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
2026-05-21T16:49:48.249082Z INFO screenpipe_audio 2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
[URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1","depth":4,"on_screen":true,"value":"2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.46944445,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-2818441660375198252
|
-4888301395353209375
|
idle
|
accessibility
|
NULL
|
2026-05-21T16:49:48.249082Z INFO screenpipe_audio 2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
[URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ...
|
68867
|
NULL
|
NULL
|
NULL
|
|
68872
|
2468
|
7
|
2026-05-22T07:27:36.975644+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434856975_m2.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
2026-05-21T16:49:48.249082Z INFO screenpipe_audio 2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
[URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1","depth":4,"on_screen":true,"value":"2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames\n2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted\n2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted\n2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)\n2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)\n2026-05-21T16:50:22.372032Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=105 elapsed=1.62355425s\n2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T16:51:48.316918Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T16:51:48.318150Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T16:52:55.822155Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.341594Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:05.369068Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:53:30.770621Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=6031225160398720772, trigger=click)\n2026-05-21T16:54:58.885113Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.561857292s\n2026-05-21T16:54:58.886878Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T16:54:59.942449Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (10.6x), 14 JPEGs deleted\n2026-05-21T16:55:02.414432Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 13 frames, 2.6MB → 0.8MB (3.3x), 13 JPEGs deleted\n2026-05-21T16:55:16.793607Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=12 rows_returned=0 elapsed=1.050168334s\n2026-05-21T16:56:17.913622Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 80.6ms elapsed (expected 5.3ms) → inserting 75.2ms silence (7222 samples)\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.26894948,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.27094415,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.34773937,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.34973404,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.42652926,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.42852393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.50515294,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.5071476,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5837766,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.58577126,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.66240025,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.664395,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.4950133,"top":1.0,"width":0.027925532,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
-2818441660375198252
|
-4888301395353209375
|
idle
|
accessibility
|
NULL
|
2026-05-21T16:49:48.249082Z INFO screenpipe_audio 2026-05-21T16:49:48.249082Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T16:49:48.949110Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:49:50.217079Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 51 eligible frames
2026-05-21T16:49:51.732876Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 18 frames, 2.6MB → 0.2MB (13.6x), 18 JPEGs deleted
2026-05-21T16:49:55.297444Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 7.8MB → 4.0MB (2.0x), 31 JPEGs deleted
2026-05-21T16:50:12.857502Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 113.1ms elapsed (expected 5.3ms) → inserting 107.8ms silence (10347 samples)
2026-05-21T16:50:20.060128Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 103.0ms elapsed (expected 5.3ms) → inserting 97.6ms silence (9373 samples)
2026-05-21T16:50:22.372032Z WARN sqlx::query: summary="SELECT DISTINCT app_name, window_name, …" db.statement="\n\nSELECT\n DISTINCT app_name,\n window_name,\n browser_url\nFROM\n frames\nWHERE\n timestamp > datetime('now', '-30 seconds')\n AND app_name IS NOT NULL\n AND window_name IS NOT NULL\n" rows_affected=1 rows_returned=105 elapsed=1.62355425s
2026-05-21T16:50:39.721605Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:40.678520Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
2026-05-21T16:50:43.714715Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3209406847545754408, trigger=visual_change)
survey: tell us what you think of screenpipe:
npx screenpipe survey
[URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ...
|
68868
|
NULL
|
NULL
|
NULL
|
|
68873
|
2467
|
8
|
2026-05-22T07:28:06.738143+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434886738_m1.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
[URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├──────...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks","depth":4,"on_screen":true,"value":"https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.46944445,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
570440608608350260
|
-4887175495454755359
|
idle
|
accessibility
|
NULL
|
[URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├──────...
|
68867
|
NULL
|
NULL
|
NULL
|
|
68874
|
2468
|
8
|
2026-05-22T07:28:07.241467+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434887241_m2.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
[URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├──────...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks","depth":4,"on_screen":true,"value":"https://screenpi.pe\n\n2026-05-21T16:57:30.071222Z INFO screenpipe_db::db: created new speaker id=55 (no existing match within threshold)\n2026-05-21T16:59:53.805550Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=3788147985019772595, trigger=visual_change)\n2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.26894948,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.27094415,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.34773937,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.34973404,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.42652926,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.42852393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.50515294,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.5071476,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5837766,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.58577126,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.66240025,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.664395,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.4950133,"top":1.0,"width":0.027925532,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
570440608608350260
|
-4887175495454755359
|
idle
|
accessibility
|
NULL
|
[URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├──────...
|
68868
|
NULL
|
NULL
|
NULL
|
|
68875
|
2467
|
9
|
2026-05-22T07:28:36.871138+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434916871_m1.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
2026-05-21T17:00:05.822127Z WARN sqlx::query: sum 2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe","depth":4,"on_screen":true,"value":"2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.46944445,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
6956146861833191268
|
-4887175495454755359
|
idle
|
accessibility
|
NULL
|
2026-05-21T17:00:05.822127Z WARN sqlx::query: sum 2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
68876
|
2468
|
9
|
2026-05-22T07:28:37.547871+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434917547_m2.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
2026-05-21T17:00:05.822127Z WARN sqlx::query: sum 2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe","depth":4,"on_screen":true,"value":"2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.26894948,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.27094415,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.34773937,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.34973404,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.42652926,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.42852393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.50515294,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.5071476,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5837766,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.58577126,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.66240025,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.664395,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.4950133,"top":1.0,"width":0.027925532,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
6956146861833191268
|
-4887175495454755359
|
idle
|
accessibility
|
NULL
|
2026-05-21T17:00:05.822127Z WARN sqlx::query: sum 2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
68877
|
2467
|
10
|
2026-05-22T07:29:07.022117+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434947022_m1.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
2026-05-21T17:00:05.822127Z WARN sqlx::query: sum 2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe","depth":4,"on_screen":true,"value":"2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.46944445,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
6956146861833191268
|
-4887175495454755359
|
idle
|
accessibility
|
NULL
|
2026-05-21T17:00:05.822127Z WARN sqlx::query: sum 2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
...
|
68875
|
NULL
|
NULL
|
NULL
|
|
68878
|
2468
|
10
|
2026-05-22T07:29:07.821407+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434947821_m2.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
2026-05-21T17:00:05.822127Z WARN sqlx::query: sum 2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe","depth":4,"on_screen":true,"value":"2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.26894948,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.27094415,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.34773937,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.34973404,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.42652926,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.42852393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.50515294,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.5071476,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5837766,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.58577126,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.66240025,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.664395,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.4950133,"top":1.0,"width":0.027925532,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
6956146861833191268
|
-4887175495454755359
|
idle
|
accessibility
|
NULL
|
2026-05-21T17:00:05.822127Z WARN sqlx::query: sum 2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
...
|
68876
|
NULL
|
NULL
|
NULL
|
|
68879
|
NULL
|
0
|
2026-05-22T07:29:37.189223+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434977189_m1.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
2026-05-21T17:00:05.822127Z WARN sqlx::query: sum 2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe","depth":4,"on_screen":true,"value":"2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.46944445,"top":0.033333335,"width":0.058333334,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
6956146861833191268
|
-4887175495454755359
|
idle
|
accessibility
|
NULL
|
2026-05-21T17:00:05.822127Z WARN sqlx::query: sum 2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
...
|
68875
|
NULL
|
NULL
|
NULL
|
|
68880
|
NULL
|
0
|
2026-05-22T07:29:38.099983+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779434978099_m2.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
2026-05-21T17:00:05.822127Z WARN sqlx::query: sum 2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe","depth":4,"on_screen":true,"value":"2026-05-21T17:00:05.822127Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=28 elapsed=3.394524s\n2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames\n2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted\n2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted\n2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)\n2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)\n2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.26894948,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.27094415,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.34773937,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.34973404,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.42652926,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.42852393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.50515294,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.5071476,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5837766,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.58577126,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.66240025,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.664395,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.4950133,"top":1.0,"width":0.027925532,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
6956146861833191268
|
-4887175495454755359
|
idle
|
accessibility
|
NULL
|
2026-05-21T17:00:05.822127Z WARN sqlx::query: sum 2026-05-21T17:00:05.822127Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=28 elapsed=3.394524s
2026-05-21T17:00:05.823817Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 28 eligible frames
2026-05-21T17:00:07.057683Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 2.0MB → 0.2MB (8.4x), 14 JPEGs deleted
2026-05-21T17:00:08.778619Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 2.5MB → 0.7MB (3.7x), 12 JPEGs deleted
2026-05-21T17:00:18.148401Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3036694099884914488, trigger=visual_change)
tip: wire screenpipe into claude with one command:
claude mcp add screenpipe -- npx -y screenpipe-mcp
then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity
2026-05-21T17:02:24.191794Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:02:24.192174Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
ggml_metal_free: deallocating
2026-05-21T17:02:25.150377Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks
2026-05-21T17:03:26.932191Z WARN screenpipe_audio::core::source_buffer: [MacBook Pro Microphone (input)] large gap on wired device: 87.0ms elapsed (expected 5.3ms) → inserting 81.7ms silence (7840 samples)
2026-05-21T17:03:41.958030Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=6031225160398720772, trigger=visual_change)
2026-05-21T17:04:25.179783Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back
2026-05-21T17:04:25.180817Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription
whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
...
|
68876
|
NULL
|
NULL
|
NULL
|
|
68881
|
2470
|
0
|
2026-05-22T07:30:08.382450+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779435008382_m2.jpg...
|
iTerm2
|
screenpipe"
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
whisper_backend_init_gpu: device 0: Metal (type: 1 whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
│ │ System Audio (output) │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: https://github.com/screenpipe/screenpipe/releases
2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture
2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh
2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))
2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture
2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.
2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.
2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915
2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)
2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)
2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)
2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on [IP_ADDRESS]:3030
2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030
2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)
2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)
2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)
2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)
2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)
2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)
2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)
2026-05-22T10:23:26.122171Z WARN sqlx::query: summary="SELECT f.id, f.timestamp, f.offset_index, …" db.statement="\n\nSELECT\n f.id,\n f.timestamp,\n f.offset_index,\n COALESCE(\n SUBSTR(f.full_text, 1, 200),\n SUBSTR(f.accessibility_text, 1, 200),\n (\n SELECT\n SUBSTR(ot.text, 1, 200)\n FROM\n ocr_text ot\n WHERE\n ot.frame_id = f.id\n LIMIT\n 1\n )\n ) as text,\n COALESCE(\n f.app_name,\n (\n SELECT\n ot.app_name\n FROM\n ocr_text ot\n WHERE\n ot.frame_id = f.id\n LIMIT\n 1\n )\n ) as app_name,\n COALESCE(\n f.window_name,\n (\n ...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"whisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-22T10:29:40.397423Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=3 elapsed=2.628815834s\n2026-05-22T10:29:40.397685Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 3 eligible frames\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:29:53.287616Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks","depth":4,"on_screen":true,"value":"whisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:05:12.081489Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=89 elapsed=3.288185s\n2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames\n2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted\n2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:10:22.001302Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=72 elapsed=1.959353916s\n2026-05-21T17:10:22.002390Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 72 eligible frames\n2026-05-21T17:10:23.864649Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 26 frames, 3.7MB → 0.2MB (15.1x), 26 JPEGs deleted\n2026-05-21T17:10:28.015174Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.7MB → 4.0MB (2.2x), 44 JPEGs deleted\n2026-05-21T17:10:45.723602Z INFO screenpipe_db::db: created new speaker id=56 (no existing match within threshold)\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:12:27.898576Z INFO screenpipe_db::db: created new speaker id=57 (no existing match within threshold)\n2026-05-21T17:14:36.747428Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:14:36.747682Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:14:37.684951Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:15:29.064324Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=75 elapsed=1.019501s\n2026-05-21T17:15:29.065287Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 75 eligible frames\n2026-05-21T17:15:31.446131Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.0MB → 0.5MB (9.8x), 35 JPEGs deleted\n2026-05-21T17:15:35.563764Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 38 frames, 6.6MB → 2.6MB (2.5x), 38 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:16:37.707014Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:16:37.707222Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:20:39.216934Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=78 elapsed=3.565377292s\n2026-05-21T17:20:39.218036Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 78 eligible frames\n2026-05-21T17:20:42.579607Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 41 frames, 5.9MB → 0.5MB (12.4x), 41 JPEGs deleted\n2026-05-21T17:20:46.135882Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 35 frames, 5.9MB → 2.1MB (2.8x), 35 JPEGs deleted\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:22:11.222000Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.388703Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.555697Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.723646Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:11.901229Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.101699Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.266383Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:12.707460Z INFO screenpipe_db::db: created new speaker id=58 (no existing match within threshold)\n2026-05-21T17:22:13.493344Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.230695Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:22:42.408004Z INFO screenpipe_audio::transcription::handle_new_transcript: device MacBook Pro Microphone (input) skipping duplicate transcript (entire content overlaps with previous)\n2026-05-21T17:24:53.971490Z INFO screenpipe_db::db: created new speaker id=59 (no existing match within threshold)\n2026-05-21T17:25:22.605664Z INFO screenpipe_db::db: created new speaker id=60 (no existing match within threshold)\n2026-05-21T17:25:46.284506Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 45 eligible frames\n2026-05-21T17:25:47.852315Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 21 frames, 3.0MB → 0.3MB (11.3x), 21 JPEGs deleted\n2026-05-21T17:25:49.554578Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 22 frames, 3.6MB → 0.7MB (4.9x), 22 JPEGs deleted\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:26:48.300248Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:26:48.300818Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:26:49.309631Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:28:35.550060Z INFO screenpipe_engine::sleep_monitor: Screen locked (CGSession safety-net poll)\n2026-05-21T17:28:36.484768Z INFO screenpipe_audio::core::run_record_and_transcribe: screen locked, pausing audio recording for MacBook Pro Microphone (input)\n2026-05-21T17:28:49.368075Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:28:49.368275Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:30:52.674618Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=29 elapsed=3.106591542s\n2026-05-21T17:30:52.676211Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 29 eligible frames\n2026-05-21T17:30:53.586799Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 12 frames, 1.7MB → 0.2MB (7.7x), 12 JPEGs deleted\n2026-05-21T17:30:54.687943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 1.9MB → 0.4MB (4.9x), 15 JPEGs deleted\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:35:54.911256Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 22 eligible frames\n2026-05-21T17:35:55.691015Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.4MB → 0.2MB (7.7x), 10 JPEGs deleted\n2026-05-21T17:35:56.422280Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 10 frames, 1.1MB → 0.1MB (9.3x), 10 JPEGs deleted\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T17:38:04.620424Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:38:04.621096Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:38:05.512515Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T17:40:05.535025Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:40:05.535757Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:40:56.993450Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 13 eligible frames\n2026-05-21T17:40:57.603492Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 6 frames, 0.9MB → 0.2MB (4.6x), 6 JPEGs deleted\n2026-05-21T17:40:58.095098Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 5 frames, 0.5MB → 0.1MB (4.7x), 5 JPEGs deleted\n\n survey: tell us what you think of screenpipe:\n npx screenpipe survey\n https://screenpi.pe/survey\n\n2026-05-21T17:46:01.255420Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=2 elapsed=3.148277875s\n2026-05-21T17:46:01.256769Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 2 eligible frames\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-21T17:50:01.814102Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:50:01.814648Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T17:50:02.723336Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n\n tip: wire screenpipe into claude with one command:\n claude mcp add screenpipe -- npx -y screenpipe-mcp\n then ask claude to build a pipe that tracks who you are, your todos, and how you spend your time from your screen activity\n\n2026-05-21T17:52:02.757957Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T17:52:02.758099Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-21T17:56:04.139385Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.610081541s\n\n tip: install a starter bundle of pipes:\n npx screenpipe install https://screenpi.pe/start.json\n\n2026-05-21T17:56:33.254267Z INFO sck_rs::stream_manager: invalidated persistent stream for display 1\n2026-05-21T17:56:38.446337Z INFO screenpipe_engine::sleep_monitor: Screen unlocked (CGSession safety-net poll)\n2026-05-21T17:56:38.489870Z INFO screenpipe_engine::event_driven_capture: invalidating persistent streams after unlock/wake for monitor 2\n2026-05-21T17:56:38.495344Z INFO sck_rs::stream_manager: stopped 1 persistent stream(s)\n2026-05-21T17:56:38.786329Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-21T17:56:39.099083Z INFO screenpipe_audio::core::run_record_and_transcribe: screen unlocked — rebuilding stream for MacBook Pro Microphone (input) (avoids zombie-callback state observed after sleep/wake on macOS, Windows, and Linux)\n2026-05-21T17:56:39.106161Z WARN screenpipe_audio::audio_manager::manager: recording for device MacBook Pro Microphone (input) exited with error: stream rebuild required after screen unlock for MacBook Pro Microphone (input) (recovery is automatic via device_monitor)\n2026-05-21T17:56:54.133969Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=108 elapsed=9.299682667s\n2026-05-21T17:57:03.783781Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-21T17:57:46.799160Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.611723958s\n2026-05-21T17:58:16.568417Z WARN sqlx::query: summary=\"SELECT DISTINCT app_name, window_name, …\" db.statement=\"\\n\\nSELECT\\n DISTINCT app_name,\\n window_name,\\n browser_url\\nFROM\\n frames\\nWHERE\\n timestamp > datetime('now', '-30 seconds')\\n AND app_name IS NOT NULL\\n AND window_name IS NOT NULL\\n\" rows_affected=1 rows_returned=111 elapsed=1.722299583s\n2026-05-21T17:58:37.239498Z WARN sqlx::query: summary=\"SELECT id, name, metadata …\" db.statement=\"\\n\\nSELECT\\n id,\\n name,\\n metadata\\nFROM\\n speakers\\nWHERE\\n id = (\\n SELECT\\n speaker_id\\n FROM\\n speaker_embeddings\\n WHERE\\n vec_distance_cosine(embedding, vec_f32(?1)) < ?2\\n ORDER BY\\n vec_distance_cosine(embedding, vec_f32(?1))\\n LIMIT\\n 1\\n )\\n\" rows_affected=1 rows_returned=1 elapsed=2.020183542s\n2026-05-21T18:01:07.293183Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=3.141064292s\n\n tip: sign in for higher AI quotas + cloud sync:\n npx screenpipe login\n\n2026-05-21T18:01:44.410089Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5352336776971172696, trigger=visual_change)\n2026-05-21T18:02:21.820121Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5417646764943853315, trigger=click)\n2026-05-21T18:03:59.265331Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:03.242423Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-5287728664406234880, trigger=click)\n2026-05-21T18:04:11.741854Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:04:11.741999Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: DB write failed for chunk 11287, saved to pending cache: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-21T18:04:12.638909Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 30 orphaned chunks\n2026-05-21T18:04:15.087772Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] detected stale recording handle for MacBook Pro Microphone (input), cleaning up for restart\n2026-05-21T18:04:15.087949Z INFO screenpipe_audio::device::device_manager: Stopping device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379630Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379672Z INFO screenpipe_audio::audio_manager::device_monitor: restarted with system default device: MacBook Pro Microphone (input)\n2026-05-21T18:04:15.379696Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-21T18:05:04.830845Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=8606408259998036099, trigger=click)\n2026-05-21T18:05:08.080553Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: soundcore AeroClip (input)\n2026-05-21T18:05:08.081416Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input soundcore AeroClip (input): device soundcore AeroClip (input) not found (will back off)\n2026-05-21T18:05:08.085863Z INFO screenpipe_audio::core::run_record_and_transcribe: stopped recording for MacBook Pro Microphone (input)\n2026-05-21T18:05:08.089421Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:08.089470Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 1): device soundcore AeroClip (input) not found\n2026-05-21T18:05:10.092422Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 2), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:10.092598Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 2): device soundcore AeroClip (input) not found\n2026-05-21T18:05:12.096198Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 3), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:12.096489Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] failed to start input device soundcore AeroClip (input) (attempt 3): device soundcore AeroClip (input) not found\n2026-05-21T18:05:14.567023Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 4), starting default: soundcore AeroClip (input)\n2026-05-21T18:05:14.666151Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-21T18:05:14.666759Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=soundcore AeroClip (input)\n2026-05-21T18:05:14.666801Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-21T18:06:09.965283Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=0 elapsed=2.691858209s\n2026-05-21T18:06:12.622974Z WARN screenpipe_db::db: ImmediateTx dropped without commit — rolling back\n2026-05-21T18:06:12.623161Z WARN screenpipe_audio::audio_manager::reconciliation: reconciliation: retry still failing for chunk 11287: error returned from database: (code: 2067) UNIQUE constraint failed: audio_transcriptions.audio_chunk_id, audio_transcriptions.transcription\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nzsh: terminated npx screenpipe@latest record\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\n\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v\nv14.15.4\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node\n/Users/lukas/.nvm/versions/node/v14.15.4/bin/node\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20\nDownloading and installing node v20.20.2...\nDownloading https://nodejs.org/dist/v20.20.2/node-v20.20.2-darwin-arm64.tar.xz...\n############################################################################################################################################################################ 100.0%\nComputing checksum with shasum -a 256\nChecksums matched!\nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm use 20 \nNow using node v20.20.2 (npm v10.8.2)\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\nNeed to install the following packages:\nscreenpipe@0.3.341\nOk to proceed? (y) y\n\nchecking permissions...\n screen recording: ok\n microphone: ok\n accessibility: ok\n2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true\n2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ false │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ \"WhisperTiny\" │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n│ retention mode │ media-only (keep transcripts) │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ soundcore AeroClip (input) │\n│ │ System Audio (output) │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture\n2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.\n2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915\n2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)\n2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)\n2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)\n2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)\n2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:26.122171Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=1 rows_returned=3489 elapsed=3.250473333s\n2026-05-22T10:23:26.134375Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 3489 frame entries, coverage from 2026-05-21 07:23:22.870799 UTC\n2026-05-22T10:23:26.147507Z WARN sqlx::query: summary=\"PRAGMA wal_checkpoint(TRUNCATE)\" db.statement=\"\" rows_affected=0 rows_returned=1 elapsed=3.272958708s\n2026-05-22T10:23:26.220990Z WARN sqlx::query: summary=\"BEGIN IMMEDIATE\" db.statement=\"\" rows_affected=0 rows_returned=0 elapsed=2.433538333s\n2026-05-22T10:23:26.233348Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=68848, dur=2557ms\n2026-05-22T10:23:26.252378Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=68849, dur=2486ms\n2026-05-22T10:23:26.254382Z INFO sck_rs::stream_manager: invalidated persistent stream for display 2\n2026-05-22T10:23:32.842279Z INFO screenpipe_audio::transcription::engine: transcription engine runtime: Whisper variant=WhisperTiny\n2026-05-22T10:23:32.843913Z INFO screenpipe_audio::transcription::engine: whisper model available: \"/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin\"\n2026-05-22T10:23:32.844039Z INFO screenpipe_audio::transcription::whisper::model: whisper context: gpu acceleration enabled (Metal on macOS, Vulkan on Windows)\n2026-05-22T10:23:32.844090Z INFO screenpipe_audio::transcription::engine: loading whisper model with GPU acceleration...\nwhisper_init_from_file_with_params_no_state: loading model from '/Users/lukas/.cache/huggingface/hub/models--ggerganov--whisper.cpp/snapshots/5359861c739e955e79d9a303bcbc70fb988958b1/ggml-tiny.bin'\nwhisper_init_with_params_no_state: use gpu = 1\nwhisper_init_with_params_no_state: flash attn = 0\nwhisper_init_with_params_no_state: gpu_device = 0\nwhisper_init_with_params_no_state: dtw = 0\nggml_metal_device_init: tensor API disabled for pre-M5 and pre-A19 devices\nggml_metal_library_init: using embedded metal library\nggml_metal_library_init: loaded in 14.438 sec\nggml_metal_rsets_init: creating a residency set collection (keep_alive = 180 s)\nggml_metal_device_init: GPU name: Apple M1\nggml_metal_device_init: GPU family: MTLGPUFamilyApple7 (1007)\nggml_metal_device_init: GPU family: MTLGPUFamilyCommon3 (3003)\nggml_metal_device_init: GPU family: MTLGPUFamilyMetal3 (5001)\nggml_metal_device_init: simdgroup reduction = true\nggml_metal_device_init: simdgroup matrix mul. = true\nggml_metal_device_init: has unified memory = true\nggml_metal_device_init: has bfloat = true\nggml_metal_device_init: has tensor = false\nggml_metal_device_init: use residency sets = true\nggml_metal_device_init: use shared buffers = true\nggml_metal_device_init: recommendedMaxWorkingSetSize = 11453.25 MB\nwhisper_init_with_params_no_state: devices = 3\nwhisper_init_with_params_no_state: backends = 3\nwhisper_model_load: loading model\nwhisper_model_load: n_vocab = 51865\nwhisper_model_load: n_audio_ctx = 1500\nwhisper_model_load: n_audio_state = 384\nwhisper_model_load: n_audio_head = 6\nwhisper_model_load: n_audio_layer = 4\nwhisper_model_load: n_text_ctx = 448\nwhisper_model_load: n_text_state = 384\nwhisper_model_load: n_text_head = 6\nwhisper_model_load: n_text_layer = 4\nwhisper_model_load: n_mels = 80\nwhisper_model_load: ftype = 1\nwhisper_model_load: qntvr = 0\nwhisper_model_load: type = 1 (tiny)\nwhisper_model_load: adding 1608 extra tokens\nwhisper_model_load: n_langs = 99\nwhisper_model_load: Metal total size = 77.11 MB\nwhisper_model_load: model size = 77.11 MB\n2026-05-22T10:23:47.394802Z INFO screenpipe_audio::transcription::engine: whisper model loaded successfully\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\n2026-05-22T10:23:47.405690Z INFO screenpipe_audio::audio_manager::manager: transcription session created (will be reused across segments)\n2026-05-22T10:23:47.406338Z INFO screenpipe_audio::meeting_streaming::controller: meeting streaming: coordinator listening (provider=selected-engine)\n2026-05-22T10:23:47.433579Z INFO screenpipe_audio::audio_manager::manager: seeded 60 speakers (named + unnamed) from DB into embedding manager\n2026-05-22T10:23:47.433654Z INFO screenpipe_audio::audio_manager::manager: audio manager started\n2026-05-22T10:23:47.433686Z INFO screenpipe_audio::audio_manager::manager: calendar-assisted speaker diarization: listening for meeting events\n2026-05-22T10:23:47.980858Z INFO screenpipe_audio::device::device_manager: starting recording for device: System Audio (output)\n2026-05-22T10:23:48.105587Z INFO screenpipe_audio::device::device_manager: starting recording for device: soundcore AeroClip (input)\n2026-05-22T10:23:48.105714Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for soundcore AeroClip (input) (bluetooth / 30s segments)\n2026-05-22T10:23:48.105713Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for System Audio (output) (unknown / 30s segments)\n2026-05-22T10:23:54.819299Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7443217622484599440, trigger=click)\n2026-05-22T10:23:55.766541Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68851 paired=1 still_pending=0\n2026-05-22T10:23:57.603821Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)\n2026-05-22T10:23:58.024382Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68852 paired=1 still_pending=0\n2026-05-22T10:23:58.493391Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68854 paired=1 still_pending=2\n2026-05-22T10:23:59.209854Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:23:59.268980Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68853 paired=2 still_pending=0\n2026-05-22T10:23:59.301677Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:00.312589Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5065144611963521308, trigger=click)\n2026-05-22T10:24:01.629957Z WARN screenpipe_audio::core::stream: audio device soundcore AeroClip disconnected. stopping recording.\n2026-05-22T10:24:01.913030Z INFO screenpipe_audio::audio_manager::device_monitor: system default input changed to: MacBook Pro Microphone (input)\n2026-05-22T10:24:01.913814Z ERROR screenpipe_audio::audio_manager::device_monitor: failed to start new default input MacBook Pro Microphone (input): Audio device not found: MacBook Pro Microphone (will back off)\n2026-05-22T10:24:02.190521Z WARN screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] no input device running (attempt 1), starting default: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335578Z INFO screenpipe_audio::device::device_manager: starting recording for device: MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335720Z INFO screenpipe_audio::audio_manager::device_monitor: [DEVICE_RECOVERY] input device restored, device=MacBook Pro Microphone (input)\n2026-05-22T10:24:02.335834Z INFO screenpipe_audio::core::run_record_and_transcribe: starting continuous recording for MacBook Pro Microphone (input) (wired / 30s segments)\n2026-05-22T10:24:07.635795Z WARN screenpipe_audio::core::run_record_and_transcribe: no audio received from soundcore AeroClip (input) for 8s - stream dead, triggering reconnect\n2026-05-22T10:24:26.050807Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=1 rows_returned=177 elapsed=3.21525875s\n2026-05-22T10:24:26.052106Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-05-22T10:24:30.114705Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 68 frames, 12.0MB → 2.5MB (4.9x), 68 JPEGs deleted\n2026-05-22T10:24:36.141906Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 100 frames, 14.5MB → 5.8MB (2.5x), 100 JPEGs deleted\n2026-05-22T10:24:37.687801Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 9 frames, 1.2MB → 0.6MB (1.9x), 9 JPEGs deleted\n2026-05-22T10:25:48.878362Z INFO screenpipe_audio::audio_manager::reconciliation: reconciliation: successfully retried 1 pending transcriptions\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:25:50.391374Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n2026-05-22T10:25:51.049678Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=9013788568056476015, trigger=visual_change)\n2026-05-22T10:26:01.438597Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=9 row_id=70511 frame_id=68854\n2026-05-22T10:26:01.549852Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired event→frame (frame arrived first) corr_id=10 row_id=70512 frame_id=68854\n2026-05-22T10:26:01.565449Z WARN screenpipe_engine::frame_linker_actor: frame_linker: stale entries expired without pairing (frame or event never arrived) evicted=4 pending_events=0 pending_frames=1 total_pairs=7 total_evicted=4 total_failed=0\n2026-05-22T10:26:02.597082Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68861 paired=1 still_pending=0\n2026-05-22T10:26:15.506095Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68864 paired=1 still_pending=0\n2026-05-22T10:26:15.924734Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=1 still_pending=1\n2026-05-22T10:26:28.896856Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-877557384647667347, trigger=visual_change)\n2026-05-22T10:26:36.303996Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68865 paired=2 still_pending=0\n2026-05-22T10:26:36.308272Z INFO screenpipe_engine::frame_linker_actor: frame_linker: paired frame→events (events arrived first) frame_id=68866 paired=1 still_pending=1\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:27:51.849310Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks\n\n tip: get the screenpipe desktop app for the full experience\n https://screenpi.pe\n\n2026-05-22T10:29:40.397423Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=3 elapsed=2.628815834s\n2026-05-22T10:29:40.397685Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 3 eligible frames\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\nwhisper_backend_init_gpu: device 0: Metal (type: 1)\nwhisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)\nwhisper_backend_init_gpu: using Metal backend\nggml_metal_init: allocating\nggml_metal_init: found device: Apple M1\nggml_metal_init: picking default device: Apple M1\nggml_metal_init: use fusion = true\nggml_metal_init: use concurrency = true\nggml_metal_init: use graph optimize = true\nwhisper_backend_init: using BLAS backend\nwhisper_init_state: kv self size = 3.15 MB\nwhisper_init_state: kv cross size = 9.44 MB\nwhisper_init_state: kv pad size = 2.36 MB\nwhisper_init_state: compute buffer (conv) = 14.17 MB\nwhisper_init_state: compute buffer (encode) = 65.96 MB\nwhisper_init_state: compute buffer (cross) = 8.50 MB\nwhisper_init_state: compute buffer (decode) = 96.83 MB\nggml_metal_free: deallocating\n2026-05-22T10:29:53.287616Z INFO screenpipe_audio::audio_manager::manager: reconciliation: transcribed 50 orphaned chunks","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.26894948,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.27094415,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.34773937,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.34973404,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.42652926,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.42852393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.50515294,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.5071476,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5837766,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.58577126,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.66240025,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.664395,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"screenpipe\"","depth":1,"bounds":{"left":0.4950133,"top":1.0,"width":0.027925532,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
5868600864783489239
|
-4887456970423077407
|
idle
|
accessibility
|
NULL
|
whisper_backend_init_gpu: device 0: Metal (type: 1 whisper_backend_init_gpu: device 0: Metal (type: 1)
whisper_backend_init_gpu: found GPU device 0: Metal (type: 1, cnt: 0)
whisper_backend_init_gpu: using Metal backend
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M1
ggml_metal_init: picking default device: Apple M1
ggml_metal_init: use fusion = true
ggml_metal_init: use concurrency = true
ggml_metal_init: use graph optimize = true
whisper_backend_init: using BLAS backend
whisper_init_state: kv self size = 3.15 MB
whisper_init_state: kv cross size = 9.44 MB
whisper_init_state: kv pad size = 2.36 MB
whisper_init_state: compute buffer (conv) = 14.17 MB
whisper_init_state: compute buffer (encode) = 65.96 MB
whisper_init_state: compute buffer (cross) = 8.50 MB
whisper_init_state: compute buffer (decode) = 96.83 MB
2026-05-21T17:05:12.081489Z WARN sqlx::query: summary="SELECT id, snapshot_path, device_name, …" db.statement="\n\nSELECT\n id,\n snapshot_path,\n device_name,\n timestamp\nFROM\n frames\nWHERE\n snapshot_path IS NOT NULL\n AND timestamp < ?1\nORDER BY\n device_name,\n timestamp ASC\nLIMIT\n 5000\n" rows_affected=1 rows_returned=89 elapsed=3.288185s
2026-05-21T17:05:12.082137Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 89 eligible frames
2026-05-21T17:05:15.092348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 43 frames, 6.2MB → 0.5MB (13.0x), 43 JPEGs deleted
2026-05-21T17:05:20.023427Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 44 frames, 8.2MB → 3.7MB (2.2x), 44 JPEGs deleted
tip: install a starter bundle of pipes:
npx screenpipe install [URL_WITH_CREDENTIALS] record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/30588/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T06_27_46_769Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall: `node scripts/postinstall.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ node -v
v14.15.4
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ which node
/Users/lukas/.nvm/versions/node/v14.15.4/bin/node
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ nvm install 20
Downloading and installing node v20.20.2...
Downloading [URL_WITH_CREDENTIALS]
Ok to proceed? (y) y
checking permissions...
screen recording: ok
microphone: ok
accessibility: ok
2026-05-22T10:23:21.685872Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-05-22T10:23:22.397147Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-05-22T10:23:22.398621Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-05-22T10:23:22.399026Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-05-22T10:23:22.418756Z INFO screenpipe_engine::permission_monitor: permission monitor started screen=true mic=true accessibility=true keychain=true
2026-05-22T10:23:22.418831Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-05-22T10:23:22.833442Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-05-22T10:23:22.833539Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-05-22T10:23:22.833422Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-05-22T10:23:22.833579Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-05-22T10:23:22.833813Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-05-22T10:23:22.837822Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-05-22T10:23:22.838151Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-05-22T10:23:22.838440Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-05-22T10:23:22.838521Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-05-22T10:23:22.838595Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-05-22T10:23:22.838674Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-05-22T10:23:22.838690Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ false │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ "WhisperTiny" │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
2026-05-22T10:23:22.840078Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
│ encrypt secrets │ disabled │
│ retention days │ 14 │
│ retention mode │ media-only (keep transcripts) │
├────────────────────────┼────────────────────────────────────┤
│ languages │ │
│ │ all languages │
├────────────────────────┼────────────────────────────────────┤
│ monitors │ │
│ │ id: 1 │
│ │ id: 2 │
├────────────────────────┼────────────────────────────────────┤
│ audio devices │ │
│ │ soundcore AeroClip (input) │
│ │ System Audio (output) │
└────────────────────────┴────────────────────────────────────┘
you are using local processing. all your data stays on your computer.
warning: telemetry is enabled. only error-level data will be sent.
to disable, use the --disable-telemetry flag.
check latest changes here: https://github.com/screenpipe/screenpipe/releases
2026-05-22T10:23:22.840349Z INFO screenpipe: starting UI event capture
2026-05-22T10:23:22.846258Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh
2026-05-22T10:23:22.846754Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))
2026-05-22T10:23:22.855470Z INFO screenpipe_engine::ui_recorder: Starting UI event capture
2026-05-22T10:23:22.870462Z INFO screenpipe: text-PII worker skipped at startup — async_pii_redaction=false. OPF model (~2.8 GB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.
2026-05-22T10:23:22.870499Z INFO screenpipe: image-PII worker skipped at startup — async_image_pii_redaction=false. rfdetr_v9 model (~108 MB) will NOT be downloaded or loaded. Toggle via Settings → Privacy → AI PII removal.
2026-05-22T10:23:22.870674Z INFO screenpipe_engine::ui_recorder: UI recording session started: eda29d07-a250-4b1e-bd52-928e24e61915
2026-05-22T10:23:22.870777Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)
2026-05-22T10:23:22.870800Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-05-21 07:23:22.870799 UTC to 2026-05-22 07:23:22.870799 UTC)
2026-05-22T10:23:22.878930Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)
2026-05-22T10:23:22.880306Z INFO screenpipe_engine::server: Server listening on [IP_ADDRESS]:3030
2026-05-22T10:23:22.910833Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030
2026-05-22T10:23:23.029067Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)
2026-05-22T10:23:23.029097Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)
2026-05-22T10:23:23.029136Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)
2026-05-22T10:23:23.079648Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (3008x1253)
2026-05-22T10:23:23.079684Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)
2026-05-22T10:23:23.079695Z INFO screenpipe_engine::vision_manager::manager: VisionManager started with 2/2 monitor(s)
2026-05-22T10:23:23.079718Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (event-driven via CGDisplayRegisterReconfigurationCallback, 60s backstop poll)
2026-05-22T10:23:23.079769Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)
2026-05-22T10:23:23.621654Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)
2026-05-22T10:23:23.703419Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (3008x1253, 2fps, 0 excluded)
2026-05-22T10:23:26.122171Z WARN sqlx::query: summary="SELECT f.id, f.timestamp, f.offset_index, …" db.statement="\n\nSELECT\n f.id,\n f.timestamp,\n f.offset_index,\n COALESCE(\n SUBSTR(f.full_text, 1, 200),\n SUBSTR(f.accessibility_text, 1, 200),\n (\n SELECT\n SUBSTR(ot.text, 1, 200)\n FROM\n ocr_text ot\n WHERE\n ot.frame_id = f.id\n LIMIT\n 1\n )\n ) as text,\n COALESCE(\n f.app_name,\n (\n SELECT\n ot.app_name\n FROM\n ocr_text ot\n WHERE\n ot.frame_id = f.id\n LIMIT\n 1\n )\n ) as app_name,\n COALESCE(\n f.window_name,\n (\n ...
|
68876
|
NULL
|
NULL
|
NULL
|
|
68882
|
2470
|
1
|
2026-05-22T07:30:12.660003+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779435012660_m2.jpg...
|
Claude
|
Claude
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Skip to content
Skip to content
Collapse sidebar
S Skip to content
Skip to content
Collapse sidebar
Search
Chat
Cowork
Code
New chat
Projects
Artifacts
Customize
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
Screenpipe module not found error
More options for Screenpipe module not found error
Interactive language learning through movies
More options for Interactive language learning through movies
Recent love experiences
More options for Recent love experiences
Cities visited this year
More options for Cities visited this year
Did I drive today
More options for Did I drive today
Last visit to Lovech
More options for Last visit to Lovech
Monthly spending breakdown and regular expenses
More options for Monthly spending breakdown and regular expenses
Swimming visits this year
More options for Swimming visits this year
Screenpipe prune database vacuum error
More options for Screenpipe prune database vacuum error
Marking text locations in Screenpipe frames
More options for Marking text locations in Screenpipe frames
Updating packages in Laravel
More options for Updating packages in Laravel
Screenpipe data sync and retention management
More options for Screenpipe data sync and retention management
Screenpipe sync script failing after recent migrations
More options for Screenpipe sync script failing after recent migrations
Hubspot BadRequest headers debugging
More options for Hubspot BadRequest headers debugging
Monthly expense tracking
More options for Monthly expense tracking
Exporting transaction data from Notion to finance hub
More options for Exporting transaction data from Notion to finance hub
💬 How much have I spent for groc…
More options for 💬 How much have I spent for groc…
April 2026 spending by category
More options for April 2026 spending by category
Code diff review
More options for Code diff review
HubSpot rate limit implementation strategy
More options for HubSpot rate limit implementation strategy
Relaunch to update v1.8089.1
Relaunch to update
v1.8089.1
Lukas Pro
Get apps and extensions
Screenpipe module not found error, rename chat
Screenpipe module not found error
More options for Screenpipe module not found error
Share chat
Claude finished the response
You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall:
node scripts/postinstall.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1 why is there error in screenpipe
Show more
10:21
Retry
Edit
Copy
Claude responded: That's not a Screenpipe bug — it's your Node.
Claude responded: That's not a Screenpipe bug — it's your Node.
Thought for 5s
Thought for 5s
That's not a Screenpipe bug — it's your Node.js version. The
node:child_process
syntax (the
node:
prefix for built-in modules) requires Node 14.18+ / 16+, and your stack trace (
internal/modules/cjs/loader.js:880
, old
npm ERR!
format, npx cache path
_npx/47357/
) is classic Node 12.x.
Check what you've got:
Copy to clipboard
bash
node
-v
which
node
I'd bet on v12.x. Fix by upgrading. If you're on nvm:
Copy to clipboard
bash
nvm
install
20
nvm
alias
default
20
nvm use
20
If Homebrew:
Copy to clipboard
bash
brew upgrade
node
If neither, install nvm — it's the cleanest way to manage Node on the Mac, especially since you switch between work projects.
After upgrading, clear the stale npx cache before retrying so it doesn't reuse the broken install:...
|
[{"role":"AXLink","text":& [{"role":"AXLink","text":"Skip to content","depth":14,"bounds":{"left":0.33710107,"top":0.025538707,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"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.33710107,"top":0.026336791,"width":0.030917553,"height":0.013567438},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.33710107,"top":0.027134877,"width":0.0026595744,"height":0.012769354}},{"char_start":1,"char_count":14,"bounds":{"left":0.33976063,"top":0.027134877,"width":0.02825798,"height":0.012769354}}],"role_description":"text"},{"role":"AXButton","text":"Collapse sidebar","depth":15,"bounds":{"left":0.36535904,"top":0.02952913,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Search","depth":15,"bounds":{"left":0.37333778,"top":0.02952913,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Chat","depth":16,"bounds":{"left":0.34075797,"top":0.06304868,"width":0.026263298,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cowork","depth":16,"bounds":{"left":0.36768618,"top":0.06304868,"width":0.031914894,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code","depth":16,"bounds":{"left":0.39993352,"top":0.06304868,"width":0.027260639,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"New chat","depth":15,"bounds":{"left":0.34009308,"top":0.096568234,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Projects","depth":15,"bounds":{"left":0.34009308,"top":0.11731844,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Artifacts","depth":15,"bounds":{"left":0.34009308,"top":0.13806863,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Customize","depth":15,"bounds":{"left":0.34009308,"top":0.15881884,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Pinned","depth":16,"bounds":{"left":0.34208778,"top":0.19872306,"width":0.08510638,"height":0.012769354},"on_screen":true,"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":18,"bounds":{"left":0.34009308,"top":0.21548285,"width":0.087765954,"height":0.0207502},"on_screen":true,"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":19,"bounds":{"left":0.42054522,"top":0.21867518,"width":0.005984043,"height":0.014365523},"on_screen":true,"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":18,"bounds":{"left":0.34009308,"top":0.23703113,"width":0.087765954,"height":0.0207502},"on_screen":true,"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":19,"bounds":{"left":0.42054522,"top":0.24022347,"width":0.005984043,"height":0.014365523},"on_screen":true,"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.34208778,"top":0.26735833,"width":0.06482713,"height":0.012769354},"on_screen":true,"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.40791222,"top":0.26735833,"width":0.019281914,"height":0.012769354},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe module not found error","depth":18,"bounds":{"left":0.34009308,"top":0.28411812,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe module not found error","depth":19,"bounds":{"left":0.42054522,"top":0.28731045,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Interactive language learning through movies","depth":18,"bounds":{"left":0.34009308,"top":0.3056664,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Interactive language learning through movies","depth":19,"bounds":{"left":0.42054522,"top":0.30885875,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Recent love experiences","depth":18,"bounds":{"left":0.34009308,"top":0.3272147,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Recent love experiences","depth":19,"bounds":{"left":0.42054522,"top":0.33040702,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Cities visited this year","depth":18,"bounds":{"left":0.34009308,"top":0.34876296,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Cities visited this year","depth":19,"bounds":{"left":0.42054522,"top":0.3519553,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Did I drive today","depth":18,"bounds":{"left":0.34009308,"top":0.37031126,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Did I drive today","depth":19,"bounds":{"left":0.42054522,"top":0.3735036,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Last visit to Lovech","depth":18,"bounds":{"left":0.34009308,"top":0.39185953,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Last visit to Lovech","depth":19,"bounds":{"left":0.42054522,"top":0.39505187,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Monthly spending breakdown and regular expenses","depth":18,"bounds":{"left":0.34009308,"top":0.41340783,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Monthly spending breakdown and regular expenses","depth":19,"bounds":{"left":0.42054522,"top":0.41660017,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Swimming visits this year","depth":18,"bounds":{"left":0.34009308,"top":0.4349561,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Swimming visits this year","depth":19,"bounds":{"left":0.42054522,"top":0.43814844,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe prune database vacuum error","depth":18,"bounds":{"left":0.34009308,"top":0.45650437,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe prune database vacuum error","depth":19,"bounds":{"left":0.42054522,"top":0.45969674,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Marking text locations in Screenpipe frames","depth":18,"bounds":{"left":0.34009308,"top":0.47805268,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Marking text locations in Screenpipe frames","depth":19,"bounds":{"left":0.42054522,"top":0.481245,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Updating packages in Laravel","depth":18,"bounds":{"left":0.34009308,"top":0.49960095,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Updating packages in Laravel","depth":19,"bounds":{"left":0.42054522,"top":0.5027933,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe data sync and retention management","depth":18,"bounds":{"left":0.34009308,"top":0.5211492,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe data sync and retention management","depth":19,"bounds":{"left":0.42054522,"top":0.5243416,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe sync script failing after recent migrations","depth":18,"bounds":{"left":0.34009308,"top":0.54269755,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Screenpipe sync script failing after recent migrations","depth":19,"bounds":{"left":0.42054522,"top":0.54588985,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hubspot BadRequest headers debugging","depth":18,"bounds":{"left":0.34009308,"top":0.5642458,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Hubspot BadRequest headers debugging","depth":19,"bounds":{"left":0.42054522,"top":0.5674381,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Monthly expense tracking","depth":18,"bounds":{"left":0.34009308,"top":0.5857941,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Monthly expense tracking","depth":19,"bounds":{"left":0.42054522,"top":0.58898646,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Exporting transaction data from Notion to finance hub","depth":18,"bounds":{"left":0.34009308,"top":0.60734236,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Exporting transaction data from Notion to finance hub","depth":19,"bounds":{"left":0.42054522,"top":0.6105347,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"💬 How much have I spent for groc…","depth":18,"bounds":{"left":0.34009308,"top":0.62889063,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for 💬 How much have I spent for groc…","depth":19,"bounds":{"left":0.42054522,"top":0.632083,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"April 2026 spending by category","depth":18,"bounds":{"left":0.34009308,"top":0.65043896,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for April 2026 spending by category","depth":19,"bounds":{"left":0.42054522,"top":0.65363127,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code diff review","depth":18,"bounds":{"left":0.34009308,"top":0.67198724,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for Code diff review","depth":19,"bounds":{"left":0.42054522,"top":0.67517954,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"HubSpot rate limit implementation strategy","depth":18,"bounds":{"left":0.34009308,"top":0.6935355,"width":0.087765954,"height":0.0207502},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXPopUpButton","text":"More options for HubSpot rate limit implementation strategy","depth":19,"bounds":{"left":0.42054522,"top":0.6967279,"width":0.005984043,"height":0.014365523},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Relaunch to update v1.8089.1","depth":15,"bounds":{"left":0.34009308,"top":0.9169992,"width":0.087765954,"height":0.04309657},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Relaunch to update","depth":16,"bounds":{"left":0.35837767,"top":0.92498004,"width":0.04288564,"height":0.013567438},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.35837767,"top":0.92498004,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":17,"bounds":{"left":0.36136967,"top":0.92498004,"width":0.039893616,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"v1.8089.1","depth":16,"bounds":{"left":0.35837767,"top":0.94094175,"width":0.014960106,"height":0.011173184},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.35837767,"top":0.94094175,"width":0.0019946808,"height":0.011173184}},{"char_start":1,"char_count":8,"bounds":{"left":0.36037233,"top":0.94094175,"width":0.012965426,"height":0.011173184}}],"role_description":"text"},{"role":"AXPopUpButton","text":"Lukas Pro","depth":15,"bounds":{"left":0.34009308,"top":0.9696728,"width":0.0787899,"height":0.01915403},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Get apps and extensions","depth":15,"bounds":{"left":0.41988033,"top":0.9696728,"width":0.007978723,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Screenpipe module not found error, rename chat","depth":19,"bounds":{"left":0.43716756,"top":0.02793296,"width":0.07978723,"height":0.022346368},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Screenpipe module not found error","depth":21,"bounds":{"left":0.43849733,"top":0.031923383,"width":0.07712766,"height":0.014365523},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.43849733,"top":0.031923383,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":32,"bounds":{"left":0.44148937,"top":0.031923383,"width":0.07413564,"height":0.014365523}}],"role_description":"text"},{"role":"AXPopUpButton","text":"More options for Screenpipe module not found error","depth":19,"bounds":{"left":0.51728725,"top":0.02793296,"width":0.0066489363,"height":0.022346368},"on_screen":true,"role_description":"pop-up button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Share chat","depth":21,"bounds":{"left":0.98537236,"top":0.026336791,"width":0.010638298,"height":0.025538707},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Claude finished the response","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXHeading","text":"You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record","depth":20,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record","depth":21,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record\ninternal/modules/cjs/loader.js:883\n throw err;\n ^\nError: Cannot find module 'node:child_process'\nRequire stack:\n- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js\n at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)\n at Function.Module._load (internal/modules/cjs/loader.js:725:27)\n at Module.require (internal/modules/cjs/loader.js:952:19)\n at require (internal/modules/cjs/helpers.js:88:18)\n at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)\n at Module._compile (internal/modules/cjs/loader.js:1063:30)\n at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)\n at Module.load (internal/modules/cjs/loader.js:928:32)\n at Function.Module._load (internal/modules/cjs/loader.js:769:14)\n at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {\n code: 'MODULE_NOT_FOUND',\n requireStack: [\n '/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'\n ]\n}\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! screenpipe@0.3.341 postinstall:","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"node scripts/postinstall.js","depth":25,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"npm ERR! Exit status 1\nnpm ERR!\nnpm ERR! Failed at the screenpipe@0.3.341 postinstall script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\nnpm ERR! A complete log of this run can be found in:\nnpm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log\nInstall for [ 'screenpipe@latest' ] failed with code 1 why is there error in screenpipe","depth":24,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Show more","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"10:21","depth":22,"on_screen":false,"role_description":"text"},{"role":"AXButton","text":"Retry","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Copy","depth":22,"on_screen":false,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Claude responded: That's not a Screenpipe bug — it's your Node.","depth":21,"on_screen":false,"role_description":"heading"},{"role":"AXStaticText","text":"Claude responded: That's not a Screenpipe bug — it's your Node.","depth":22,"bounds":{"left":0.5940825,"top":0.019952115,"width":0.13996011,"height":0.006384677},"on_screen":true,"role_description":"text"},{"role":"AXButton","text":"Thought for 5s","depth":22,"bounds":{"left":0.59707445,"top":0.019952115,"width":0.24202128,"height":0.01915403},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Thought for 5s","depth":23,"bounds":{"left":0.59674203,"top":0.03830806,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.59674203,"top":0.0415004,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":13,"bounds":{"left":0.59973407,"top":0.0415004,"width":0.02825798,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"That's not a Screenpipe bug — it's your Node.js version. The","depth":25,"bounds":{"left":0.59707445,"top":0.045490824,"width":0.14694148,"height":0.015961692},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.59707445,"top":0.045490824,"width":0.0033244682,"height":0.016759777}},{"char_start":1,"char_count":59,"bounds":{"left":0.60039896,"top":0.045490824,"width":0.14261968,"height":0.016759777}}],"role_description":"text"},{"role":"AXStaticText","text":"node:child_process","depth":26,"bounds":{"left":0.7453458,"top":0.046288908,"width":0.05219415,"height":0.015163607},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7453458,"top":0.04708699,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":17,"bounds":{"left":0.74833775,"top":0.04708699,"width":0.04886968,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"syntax (the","depth":25,"bounds":{"left":0.79886967,"top":0.045490824,"width":0.028922873,"height":0.015961692},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.79886967,"top":0.045490824,"width":0.0009973404,"height":0.016759777}},{"char_start":1,"char_count":10,"bounds":{"left":0.79986703,"top":0.045490824,"width":0.025265958,"height":0.016759777}}],"role_description":"text"},{"role":"AXStaticText","text":"node:","depth":26,"bounds":{"left":0.5984042,"top":0.065442935,"width":0.01462766,"height":0.015163607},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.5984042,"top":0.06624102,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":4,"bounds":{"left":0.60139626,"top":0.06624102,"width":0.011303191,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"prefix for built-in modules) requires Node 14.18+ / 16+, and your stack trace (","depth":25,"bounds":{"left":0.59707445,"top":0.06464485,"width":0.20146276,"height":0.035115723},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.6143617,"top":0.06464485,"width":0.0009973404,"height":0.016759777}},{"char_start":1,"char_count":78,"bounds":{"left":0.61535907,"top":0.06464485,"width":0.18317819,"height":0.016759777}}],"role_description":"text"},{"role":"AXStaticText","text":"internal/modules/cjs/loader.js:880","depth":26,"bounds":{"left":0.60039896,"top":0.08459697,"width":0.098071806,"height":0.015163607},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.60039896,"top":0.08539505,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":33,"bounds":{"left":0.60339093,"top":0.08539505,"width":0.09507979,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":", old","depth":25,"bounds":{"left":0.69980055,"top":0.083798885,"width":0.011303191,"height":0.015961692},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.69980055,"top":0.083798885,"width":0.0013297872,"height":0.016759777}},{"char_start":1,"char_count":4,"bounds":{"left":0.70079786,"top":0.083798885,"width":0.008976064,"height":0.016759777}}],"role_description":"text"},{"role":"AXStaticText","text":"npm ERR!","depth":26,"bounds":{"left":0.7124335,"top":0.08459697,"width":0.022938829,"height":0.015163607},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.7124335,"top":0.08539505,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":7,"bounds":{"left":0.7150931,"top":0.08539505,"width":0.020279255,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"format, npx cache path","depth":25,"bounds":{"left":0.73670214,"top":0.083798885,"width":0.05718085,"height":0.015961692},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.73670214,"top":0.083798885,"width":0.0013297872,"height":0.016759777}},{"char_start":1,"char_count":21,"bounds":{"left":0.73769945,"top":0.083798885,"width":0.05285904,"height":0.016759777}}],"role_description":"text"},{"role":"AXStaticText","text":"_npx/47357/","depth":26,"bounds":{"left":0.5984042,"top":0.103751,"width":0.031914894,"height":0.015163607},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.5984042,"top":0.10454908,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":10,"bounds":{"left":0.60139626,"top":0.10454908,"width":0.028590426,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":") is classic Node 12.x.","depth":25,"bounds":{"left":0.63164896,"top":0.10295291,"width":0.05086436,"height":0.015961692},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.63164896,"top":0.10295291,"width":0.0023271276,"height":0.016759777}},{"char_start":1,"char_count":22,"bounds":{"left":0.6336436,"top":0.10295291,"width":0.04886968,"height":0.016759777}}],"role_description":"text"},{"role":"AXStaticText","text":"Check what you've got:","depth":25,"bounds":{"left":0.59707445,"top":0.13168396,"width":0.05718085,"height":0.015961692},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.59707445,"top":0.13168396,"width":0.0039893617,"height":0.016759777}},{"char_start":1,"char_count":21,"bounds":{"left":0.60106385,"top":0.13168396,"width":0.05285904,"height":0.016759777}}],"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":27,"bounds":{"left":0.82546544,"top":0.16520351,"width":0.010638298,"height":0.026336791},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":26,"bounds":{"left":0.5990692,"top":0.1707901,"width":0.00930851,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.5990692,"top":0.1707901,"width":0.0026595744,"height":0.012769354}},{"char_start":1,"char_count":3,"bounds":{"left":0.60172874,"top":0.1707901,"width":0.0066489363,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"node","depth":27,"bounds":{"left":0.5990692,"top":0.1963288,"width":0.011303191,"height":0.014365523},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.5990692,"top":0.1971269,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":3,"bounds":{"left":0.60206115,"top":0.1971269,"width":0.00831117,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"-v","depth":27,"bounds":{"left":0.61037236,"top":0.1963288,"width":0.00831117,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"which","depth":27,"bounds":{"left":0.5990692,"top":0.21468475,"width":0.013962766,"height":0.014365523},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.5990692,"top":0.21548285,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":4,"bounds":{"left":0.60206115,"top":0.21548285,"width":0.010970744,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.6130319,"top":0.21468475,"width":0.0029920214,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"node","depth":27,"bounds":{"left":0.6156915,"top":0.21468475,"width":0.011635638,"height":0.014365523},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.6156915,"top":0.21548285,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":3,"bounds":{"left":0.6186835,"top":0.21548285,"width":0.00831117,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"I'd bet on v12.x. Fix by upgrading. If you're on nvm:","depth":25,"bounds":{"left":0.59707445,"top":0.25379092,"width":0.12400266,"height":0.015961692},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.59707445,"top":0.25379092,"width":0.0016622341,"height":0.016759777}},{"char_start":1,"char_count":52,"bounds":{"left":0.5987367,"top":0.25379092,"width":0.122340426,"height":0.016759777}}],"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":27,"bounds":{"left":0.82546544,"top":0.28731045,"width":0.010638298,"height":0.026336791},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":26,"bounds":{"left":0.5990692,"top":0.29289705,"width":0.00930851,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.5990692,"top":0.29289705,"width":0.0026595744,"height":0.012769354}},{"char_start":1,"char_count":3,"bounds":{"left":0.60172874,"top":0.29289705,"width":0.0066489363,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"nvm","depth":27,"bounds":{"left":0.5990692,"top":0.31923383,"width":0.011303191,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"install","depth":27,"bounds":{"left":0.61037236,"top":0.31923383,"width":0.019614361,"height":0.014365523},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.61037236,"top":0.31923383,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":6,"bounds":{"left":0.6130319,"top":0.31923383,"width":0.016954787,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"bounds":{"left":0.6296542,"top":0.31923383,"width":0.0029920214,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"20","depth":27,"bounds":{"left":0.63264626,"top":0.31923383,"width":0.0056515955,"height":0.014365523},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.63264626,"top":0.31923383,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":1,"bounds":{"left":0.6353058,"top":0.31923383,"width":0.0029920214,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"nvm","depth":27,"bounds":{"left":0.5990692,"top":0.3367917,"width":0.011303191,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"alias","depth":27,"bounds":{"left":0.61037236,"top":0.3367917,"width":0.013962766,"height":0.014365523},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.61037236,"top":0.33758977,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":4,"bounds":{"left":0.6130319,"top":0.33758977,"width":0.011303191,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"default","depth":27,"bounds":{"left":0.6243351,"top":0.3367917,"width":0.025265958,"height":0.014365523},"on_screen":true,"role_description":"text"},{"role":"AXStaticText","text":"20","depth":27,"bounds":{"left":0.6492686,"top":0.3367917,"width":0.005984043,"height":0.014365523},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.6492686,"top":0.33758977,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":1,"bounds":{"left":0.65226066,"top":0.33758977,"width":0.0029920214,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"","depth":27,"on_screen":false,"role_description":"text"},{"role":"AXStaticText","text":"nvm use","depth":27,"bounds":{"left":0.5990692,"top":0.35514766,"width":0.022606382,"height":0.014365523},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.5990692,"top":0.35594574,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":6,"bounds":{"left":0.60206115,"top":0.35594574,"width":0.01662234,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"20","depth":27,"bounds":{"left":0.6213431,"top":0.35514766,"width":0.005984043,"height":0.014365523},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.6213431,"top":0.35594574,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":1,"bounds":{"left":0.6243351,"top":0.35594574,"width":0.0029920214,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"If Homebrew:","depth":25,"bounds":{"left":0.59707445,"top":0.3942538,"width":0.03357713,"height":0.015961692},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.59707445,"top":0.3942538,"width":0.0016622341,"height":0.016759777}},{"char_start":1,"char_count":11,"bounds":{"left":0.5987367,"top":0.3942538,"width":0.031914894,"height":0.016759777}}],"role_description":"text"},{"role":"AXButton","text":"Copy to clipboard","depth":27,"bounds":{"left":0.82546544,"top":0.42777336,"width":0.010638298,"height":0.026336791},"on_screen":true,"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"bash","depth":26,"bounds":{"left":0.5990692,"top":0.43335995,"width":0.00930851,"height":0.011971269},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.5990692,"top":0.43335995,"width":0.0026595744,"height":0.012769354}},{"char_start":1,"char_count":3,"bounds":{"left":0.60172874,"top":0.43335995,"width":0.0066489363,"height":0.012769354}}],"role_description":"text"},{"role":"AXStaticText","text":"brew upgrade","depth":27,"bounds":{"left":0.5990692,"top":0.45969674,"width":0.03656915,"height":0.014365523},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.5990692,"top":0.45969674,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":11,"bounds":{"left":0.60206115,"top":0.45969674,"width":0.030585106,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"node","depth":27,"bounds":{"left":0.6353058,"top":0.45969674,"width":0.011303191,"height":0.014365523},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.6353058,"top":0.45969674,"width":0.0029920214,"height":0.014365523}},{"char_start":1,"char_count":3,"bounds":{"left":0.63829786,"top":0.45969674,"width":0.00831117,"height":0.014365523}}],"role_description":"text"},{"role":"AXStaticText","text":"If neither, install nvm — it's the cleanest way to manage Node on the Mac, especially since you switch between work projects.","depth":25,"bounds":{"left":0.59707445,"top":0.4980048,"width":0.22972074,"height":0.035913806},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.59707445,"top":0.49880287,"width":0.0016622341,"height":0.015961692}},{"char_start":1,"char_count":124,"bounds":{"left":0.59707445,"top":0.49880287,"width":0.22972074,"height":0.035115723}}],"role_description":"text"},{"role":"AXStaticText","text":"After upgrading, clear the stale npx cache before retrying so it doesn't reuse the broken install:","depth":25,"bounds":{"left":0.59707445,"top":0.54588985,"width":0.23005319,"height":0.016759777},"on_screen":true,"lines":[{"char_start":0,"char_count":1,"bounds":{"left":0.59707445,"top":0.54668796,"width":0.0039893617,"height":0.015961692}},{"char_start":1,"char_count":97,"bounds":{"left":0.60106385,"top":0.54668796,"width":0.22606383,"height":0.015961692}}],"role_description":"text"}]...
|
-3810893841023949671
|
-7909517917312594410
|
app_switch
|
accessibility
|
NULL
|
Skip to content
Skip to content
Collapse sidebar
S Skip to content
Skip to content
Collapse sidebar
Search
Chat
Cowork
Code
New chat
Projects
Artifacts
Customize
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
Screenpipe module not found error
More options for Screenpipe module not found error
Interactive language learning through movies
More options for Interactive language learning through movies
Recent love experiences
More options for Recent love experiences
Cities visited this year
More options for Cities visited this year
Did I drive today
More options for Did I drive today
Last visit to Lovech
More options for Last visit to Lovech
Monthly spending breakdown and regular expenses
More options for Monthly spending breakdown and regular expenses
Swimming visits this year
More options for Swimming visits this year
Screenpipe prune database vacuum error
More options for Screenpipe prune database vacuum error
Marking text locations in Screenpipe frames
More options for Marking text locations in Screenpipe frames
Updating packages in Laravel
More options for Updating packages in Laravel
Screenpipe data sync and retention management
More options for Screenpipe data sync and retention management
Screenpipe sync script failing after recent migrations
More options for Screenpipe sync script failing after recent migrations
Hubspot BadRequest headers debugging
More options for Hubspot BadRequest headers debugging
Monthly expense tracking
More options for Monthly expense tracking
Exporting transaction data from Notion to finance hub
More options for Exporting transaction data from Notion to finance hub
💬 How much have I spent for groc…
More options for 💬 How much have I spent for groc…
April 2026 spending by category
More options for April 2026 spending by category
Code diff review
More options for Code diff review
HubSpot rate limit implementation strategy
More options for HubSpot rate limit implementation strategy
Relaunch to update v1.8089.1
Relaunch to update
v1.8089.1
Lukas Pro
Get apps and extensions
Screenpipe module not found error, rename chat
Screenpipe module not found error
More options for Screenpipe module not found error
Share chat
Claude finished the response
You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
You said: lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ npx screenpipe@latest record
internal/modules/cjs/loader.js:883
throw err;
^
Error: Cannot find module 'node:child_process'
Require stack:
- /Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:880:15)
at Function.Module._load (internal/modules/cjs/loader.js:725:27)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js:6:23)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/Users/lukas/.npm/_npx/47357/lib/node_modules/screenpipe/scripts/postinstall.js'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! screenpipe@0.3.341 postinstall:
node scripts/postinstall.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the screenpipe@0.3.341 postinstall script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /Users/lukas/.npm/_logs/2026-05-22T07_21_03_590Z-debug.log
Install for [ 'screenpipe@latest' ] failed with code 1 why is there error in screenpipe
Show more
10:21
Retry
Edit
Copy
Claude responded: That's not a Screenpipe bug — it's your Node.
Claude responded: That's not a Screenpipe bug — it's your Node.
Thought for 5s
Thought for 5s
That's not a Screenpipe bug — it's your Node.js version. The
node:child_process
syntax (the
node:
prefix for built-in modules) requires Node 14.18+ / 16+, and your stack trace (
internal/modules/cjs/loader.js:880
, old
npm ERR!
format, npx cache path
_npx/47357/
) is classic Node 12.x.
Check what you've got:
Copy to clipboard
bash
node
-v
which
node
I'd bet on v12.x. Fix by upgrading. If you're on nvm:
Copy to clipboard
bash
nvm
install
20
nvm
alias
default
20
nvm use
20
If Homebrew:
Copy to clipboard
bash
brew upgrade
node
If neither, install nvm — it's the cleanest way to manage Node on the Mac, especially since you switch between work projects.
After upgrading, clear the stale npx cache before retrying so it doesn't reuse the broken install:...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
68883
|
2470
|
2
|
2026-05-22T07:30:13.938303+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779435013938_m2.jpg...
|
iTerm2
|
-zsh
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Wed May 20 09:14:49 on ttys009
Poetry Last login: Wed May 20 09:14:49 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe
4.8G /Users/lukas/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:34:48] ========================================
[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:34:48] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:35:01] ========================================
[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:35:01] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (6.6G)
Data dir: OK (168 files, 403M)
[+00m00s] ▶ Counting source rows for 2026-05-18
frames: 6300
elements: 758820
ui_events: 4662
ocr_text: 2983
meetings: 0
audio_chunks: 172
audio_transcriptions: 287
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m01s] ▶ Syncing vision data for 2026-05-18
video_chunks ✓ 0m03s
frames (6300 rows) ✓ 0m50s
ocr_text (2983 rows) ✓ 1m05s
ui_events (4662 rows) ✓ 0m00s
elements (758820 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m01s
[+02m39s] ▶ Syncing audio data for 2026-05-18
audio_chunks (172 rows) ✓ 0m00s
audio_transcriptions (287 rows) ✓ 0m00s
[+02m39s] ▶ Updating FTS indexes
elements_fts ✓ 1m16s
frames_fts ✓ 1m44s
ui_events_fts ✓ 0m02s
audio_transcriptions_fts ✓ 0m01s
[+05m42s] ▶ Verifying DB
frames: 6300 / 6300 ✓
elements: 758820 / 758820 ✓
ui_events: 4662 / 4662 ✓
ocr_text: 2983 / 2983 ✓
meetings: 0 / 0 ✓
audio_chunks: 172 / 172 ✓
audio_transcriptions: 287 / 287 ✓
[+06m48s] ▶ Copying data folder for 2026-05-18
rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)
[+07m12s] ▶ Copying audio files for 2026-05-18
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K
rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K
rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K
rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K
rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K
rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K
rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K
rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K
rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K
rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K
rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K
rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K
rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K
rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K
rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M
rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K
audio files total: 172 file(s), 42M
[+07m24s] ▶ Copying screenpipe logs for 2026-05-18
rsync logs → NAS ✓ 1 file(s), 308K
[2026-05-20 19:42:25] Archive DB size: 7.4G
[2026-05-20 19:42:25] Total time: 7m24s
[2026-05-20 19:42:25] Sync complete for 2026-05-18
[2026-05-20 19:42:25] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19
[2026-05-20 20:35:14] ========================================
[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19
[2026-05-20 20:35:14] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.4G)
Data dir: OK (201 files, 190M)
[+00m01s] ▶ Counting source rows for 2026-05-19
frames: 3796
elements: 544355
ui_events: 4277
ocr_text: 2040
meetings: 0
audio_chunks: 122
audio_transcriptions: 808
[+00m02s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m00s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m02s] ▶ Syncing vision data for 2026-05-19
video_chunks ✓ 0m03s
frames (3796 rows) ✓ 0m40s
ocr_text (2040 rows) ✓ 0m50s
ui_events (4277 rows) ✓ 0m01s
elements (544355 rows) ✓ 0m31s
meetings (0 rows) ✓ 0m00s
[+02m07s] ▶ Syncing audio data for 2026-05-19
audio_chunks (122 rows) ✓ 0m01s
audio_transcriptions (808 rows) ✓ 0m00s
[+02m08s] ▶ Updating FTS indexes
elements_fts ✓ 1m05s
frames_fts ✓ 1m30s
ui_events_fts ✓ 0m03s
audio_transcriptions_fts ✓ 0m01s
[+04m47s] ▶ Verifying DB
frames: 3796 / 3796 ✓
elements: 544355 / 544355 ✓
ui_events: 4277 / 4277 ✓
ocr_text: 2040 / 2040 ✓
meetings: 0 / 0 ✓
audio_chunks: 122 / 122 ✓
audio_transcriptions: 808 / 808 ✓
[+05m59s] ▶ Copying data folder for 2026-05-19
rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)
[+06m15s] ▶ Copying audio files for 2026-05-19
rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K
rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K
rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K
rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K
rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K
rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K
rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K
rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K
rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K
rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K
rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K
rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K
rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K
rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K
rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K
rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K
rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K
rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K
audio files total: 122 file(s), 26M
[+06m22s] ▶ Copying screenpipe logs for 2026-05-19
rsync logs → NAS ✓ 1 file(s), 328K
[2026-05-20 20:41:36] Archive DB size: 7.9G
[2026-05-20 20:41:36] Total time: 6m22s
[2026-05-20 20:41:36] Sync complete for 2026-05-19
[2026-05-20 20:41:36] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv
make: *** No rule to make target `checkEnv'. Stop.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv
docker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker="earth"
Before:
+---------+--------------------------------------------------------------------+
| Key | Value |
+---------+--------------------------------------------------------------------+
| qa | free |
| saturn | free |
| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |
| venus | JY-20543-AJ-report-tracking |
| mars | JY-20742-mcp-poc-OAuth-DCR |
| mercury | JY-20741-user-can-log-in-access-the-desktop-app |
| neptune | JY-20676-delete-report-related-objects |
| earth | free |
| jupiter | free |
| staging | JY-18091-upgrade-to-php-8-5 |
+---------+--------------------------------------------------------------------+
Bye.
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Wed May 20 09:14:49 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe \n4.8G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:34:48] ========================================\n[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:34:48] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:35:01] ========================================\n[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:35:01] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (6.6G)\n Data dir: OK (168 files, 403M)\n\n[+00m00s] ▶ Counting source rows for 2026-05-18\n frames: 6300\n elements: 758820\n ui_events: 4662\n ocr_text: 2983\n meetings: 0\n audio_chunks: 172\n audio_transcriptions: 287\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m01s] ▶ Syncing vision data for 2026-05-18\n video_chunks ✓ 0m03s\n frames (6300 rows) ✓ 0m50s\n ocr_text (2983 rows) ✓ 1m05s\n ui_events (4662 rows) ✓ 0m00s\n elements (758820 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m01s\n\n[+02m39s] ▶ Syncing audio data for 2026-05-18\n audio_chunks (172 rows) ✓ 0m00s\n audio_transcriptions (287 rows) ✓ 0m00s\n\n[+02m39s] ▶ Updating FTS indexes\n elements_fts ✓ 1m16s\n frames_fts ✓ 1m44s\n ui_events_fts ✓ 0m02s\n audio_transcriptions_fts ✓ 0m01s\n\n[+05m42s] ▶ Verifying DB\n frames: 6300 / 6300 ✓\n elements: 758820 / 758820 ✓\n ui_events: 4662 / 4662 ✓\n ocr_text: 2983 / 2983 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 172 / 172 ✓\n audio_transcriptions: 287 / 287 ✓\n\n[+06m48s] ▶ Copying data folder for 2026-05-18\n rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)\n\n[+07m12s] ▶ Copying audio files for 2026-05-18\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K\n rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K\n rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K\n rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K\n rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K\n rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K\n rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K\n rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K\n rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K\n rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K\n rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K\n rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K\n rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K\n rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K\n rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K\n audio files total: 172 file(s), 42M\n\n[+07m24s] ▶ Copying screenpipe logs for 2026-05-18\n rsync logs → NAS ✓ 1 file(s), 308K\n\n[2026-05-20 19:42:25] Archive DB size: 7.4G\n[2026-05-20 19:42:25] Total time: 7m24s\n[2026-05-20 19:42:25] Sync complete for 2026-05-18\n[2026-05-20 19:42:25] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19\n[2026-05-20 20:35:14] ========================================\n[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19\n[2026-05-20 20:35:14] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.4G)\n Data dir: OK (201 files, 190M)\n\n[+00m01s] ▶ Counting source rows for 2026-05-19\n frames: 3796\n elements: 544355\n ui_events: 4277\n ocr_text: 2040\n meetings: 0\n audio_chunks: 122\n audio_transcriptions: 808\n\n[+00m02s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m00s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m02s] ▶ Syncing vision data for 2026-05-19\n video_chunks ✓ 0m03s\n frames (3796 rows) ✓ 0m40s\n ocr_text (2040 rows) ✓ 0m50s\n ui_events (4277 rows) ✓ 0m01s\n elements (544355 rows) ✓ 0m31s\n meetings (0 rows) ✓ 0m00s\n\n[+02m07s] ▶ Syncing audio data for 2026-05-19\n audio_chunks (122 rows) ✓ 0m01s\n audio_transcriptions (808 rows) ✓ 0m00s\n\n[+02m08s] ▶ Updating FTS indexes\n elements_fts ✓ 1m05s\n frames_fts ✓ 1m30s\n ui_events_fts ✓ 0m03s\n audio_transcriptions_fts ✓ 0m01s\n\n[+04m47s] ▶ Verifying DB\n frames: 3796 / 3796 ✓\n elements: 544355 / 544355 ✓\n ui_events: 4277 / 4277 ✓\n ocr_text: 2040 / 2040 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 122 / 122 ✓\n audio_transcriptions: 808 / 808 ✓\n\n[+05m59s] ▶ Copying data folder for 2026-05-19\n rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)\n\n[+06m15s] ▶ Copying audio files for 2026-05-19\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K\n rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K\n rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K\n rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K\n rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K\n rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K\n rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K\n rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K\n rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K\n rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K\n rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K\n rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K\n rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K\n audio files total: 122 file(s), 26M\n\n[+06m22s] ▶ Copying screenpipe logs for 2026-05-19\n rsync logs → NAS ✓ 1 file(s), 328K\n\n[2026-05-20 20:41:36] Archive DB size: 7.9G\n[2026-05-20 20:41:36] Total time: 6m22s\n[2026-05-20 20:41:36] Sync complete for 2026-05-19\n[2026-05-20 20:41:36] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv\nmake: *** No rule to make target `checkEnv'. Stop.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv\ndocker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker=\"earth\"\nBefore:\n+---------+--------------------------------------------------------------------+\n| Key | Value |\n+---------+--------------------------------------------------------------------+\n| qa | free |\n| saturn | free |\n| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |\n| venus | JY-20543-AJ-report-tracking |\n| mars | JY-20742-mcp-poc-OAuth-DCR |\n| mercury | JY-20741-user-can-log-in-access-the-desktop-app |\n| neptune | JY-20676-delete-report-related-objects |\n| earth | free |\n| jupiter | free |\n| staging | JY-18091-upgrade-to-php-8-5 |\n+---------+--------------------------------------------------------------------+\nBye.\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sp-stop\nscreenpipe stopped\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $","depth":4,"on_screen":true,"value":"Last login: Wed May 20 09:14:49 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe \n4.8G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:34:48] ========================================\n[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:34:48] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:35:01] ========================================\n[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:35:01] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (6.6G)\n Data dir: OK (168 files, 403M)\n\n[+00m00s] ▶ Counting source rows for 2026-05-18\n frames: 6300\n elements: 758820\n ui_events: 4662\n ocr_text: 2983\n meetings: 0\n audio_chunks: 172\n audio_transcriptions: 287\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m01s] ▶ Syncing vision data for 2026-05-18\n video_chunks ✓ 0m03s\n frames (6300 rows) ✓ 0m50s\n ocr_text (2983 rows) ✓ 1m05s\n ui_events (4662 rows) ✓ 0m00s\n elements (758820 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m01s\n\n[+02m39s] ▶ Syncing audio data for 2026-05-18\n audio_chunks (172 rows) ✓ 0m00s\n audio_transcriptions (287 rows) ✓ 0m00s\n\n[+02m39s] ▶ Updating FTS indexes\n elements_fts ✓ 1m16s\n frames_fts ✓ 1m44s\n ui_events_fts ✓ 0m02s\n audio_transcriptions_fts ✓ 0m01s\n\n[+05m42s] ▶ Verifying DB\n frames: 6300 / 6300 ✓\n elements: 758820 / 758820 ✓\n ui_events: 4662 / 4662 ✓\n ocr_text: 2983 / 2983 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 172 / 172 ✓\n audio_transcriptions: 287 / 287 ✓\n\n[+06m48s] ▶ Copying data folder for 2026-05-18\n rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)\n\n[+07m12s] ▶ Copying audio files for 2026-05-18\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K\n rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K\n rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K\n rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K\n rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K\n rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K\n rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K\n rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K\n rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K\n rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K\n rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K\n rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K\n rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K\n rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K\n rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K\n audio files total: 172 file(s), 42M\n\n[+07m24s] ▶ Copying screenpipe logs for 2026-05-18\n rsync logs → NAS ✓ 1 file(s), 308K\n\n[2026-05-20 19:42:25] Archive DB size: 7.4G\n[2026-05-20 19:42:25] Total time: 7m24s\n[2026-05-20 19:42:25] Sync complete for 2026-05-18\n[2026-05-20 19:42:25] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19\n[2026-05-20 20:35:14] ========================================\n[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19\n[2026-05-20 20:35:14] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.4G)\n Data dir: OK (201 files, 190M)\n\n[+00m01s] ▶ Counting source rows for 2026-05-19\n frames: 3796\n elements: 544355\n ui_events: 4277\n ocr_text: 2040\n meetings: 0\n audio_chunks: 122\n audio_transcriptions: 808\n\n[+00m02s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m00s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m02s] ▶ Syncing vision data for 2026-05-19\n video_chunks ✓ 0m03s\n frames (3796 rows) ✓ 0m40s\n ocr_text (2040 rows) ✓ 0m50s\n ui_events (4277 rows) ✓ 0m01s\n elements (544355 rows) ✓ 0m31s\n meetings (0 rows) ✓ 0m00s\n\n[+02m07s] ▶ Syncing audio data for 2026-05-19\n audio_chunks (122 rows) ✓ 0m01s\n audio_transcriptions (808 rows) ✓ 0m00s\n\n[+02m08s] ▶ Updating FTS indexes\n elements_fts ✓ 1m05s\n frames_fts ✓ 1m30s\n ui_events_fts ✓ 0m03s\n audio_transcriptions_fts ✓ 0m01s\n\n[+04m47s] ▶ Verifying DB\n frames: 3796 / 3796 ✓\n elements: 544355 / 544355 ✓\n ui_events: 4277 / 4277 ✓\n ocr_text: 2040 / 2040 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 122 / 122 ✓\n audio_transcriptions: 808 / 808 ✓\n\n[+05m59s] ▶ Copying data folder for 2026-05-19\n rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)\n\n[+06m15s] ▶ Copying audio files for 2026-05-19\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K\n rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K\n rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K\n rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K\n rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K\n rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K\n rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K\n rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K\n rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K\n rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K\n rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K\n rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K\n rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K\n audio files total: 122 file(s), 26M\n\n[+06m22s] ▶ Copying screenpipe logs for 2026-05-19\n rsync logs → NAS ✓ 1 file(s), 328K\n\n[2026-05-20 20:41:36] Archive DB size: 7.9G\n[2026-05-20 20:41:36] Total time: 6m22s\n[2026-05-20 20:41:36] Sync complete for 2026-05-19\n[2026-05-20 20:41:36] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv\nmake: *** No rule to make target `checkEnv'. Stop.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv\ndocker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker=\"earth\"\nBefore:\n+---------+--------------------------------------------------------------------+\n| Key | Value |\n+---------+--------------------------------------------------------------------+\n| qa | free |\n| saturn | free |\n| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |\n| venus | JY-20543-AJ-report-tracking |\n| mars | JY-20742-mcp-poc-OAuth-DCR |\n| mercury | JY-20741-user-can-log-in-access-the-desktop-app |\n| neptune | JY-20676-delete-report-related-objects |\n| earth | free |\n| jupiter | free |\n| staging | JY-18091-upgrade-to-php-8-5 |\n+---------+--------------------------------------------------------------------+\nBye.\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sp-stop\nscreenpipe stopped\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.26894948,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.27094415,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.34773937,"top":1.0,"width":0.0787899,"height":-0.042298436},"on_screen":true,"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.34973404,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"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.42652926,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.42852393,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.50515294,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.5071476,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5837766,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.58577126,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.66240025,"top":1.0,"width":0.07862367,"height":-0.042298436},"on_screen":true,"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.664395,"top":1.0,"width":0.005319149,"height":-0.04549086},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.7273936,"top":1.0,"width":0.01861702,"height":-0.023144484},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.50332445,"top":1.0,"width":0.010970744,"height":-0.02394259},"on_screen":true,"role_description":"text"}]...
|
-6572287919365258477
|
4355694469229718887
|
click
|
accessibility
|
NULL
|
Last login: Wed May 20 09:14:49 on ttys009
Poetry Last login: Wed May 20 09:14:49 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe
4.8G /Users/lukas/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:34:48] ========================================
[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:34:48] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:35:01] ========================================
[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:35:01] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (6.6G)
Data dir: OK (168 files, 403M)
[+00m00s] ▶ Counting source rows for 2026-05-18
frames: 6300
elements: 758820
ui_events: 4662
ocr_text: 2983
meetings: 0
audio_chunks: 172
audio_transcriptions: 287
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m01s] ▶ Syncing vision data for 2026-05-18
video_chunks ✓ 0m03s
frames (6300 rows) ✓ 0m50s
ocr_text (2983 rows) ✓ 1m05s
ui_events (4662 rows) ✓ 0m00s
elements (758820 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m01s
[+02m39s] ▶ Syncing audio data for 2026-05-18
audio_chunks (172 rows) ✓ 0m00s
audio_transcriptions (287 rows) ✓ 0m00s
[+02m39s] ▶ Updating FTS indexes
elements_fts ✓ 1m16s
frames_fts ✓ 1m44s
ui_events_fts ✓ 0m02s
audio_transcriptions_fts ✓ 0m01s
[+05m42s] ▶ Verifying DB
frames: 6300 / 6300 ✓
elements: 758820 / 758820 ✓
ui_events: 4662 / 4662 ✓
ocr_text: 2983 / 2983 ✓
meetings: 0 / 0 ✓
audio_chunks: 172 / 172 ✓
audio_transcriptions: 287 / 287 ✓
[+06m48s] ▶ Copying data folder for 2026-05-18
rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)
[+07m12s] ▶ Copying audio files for 2026-05-18
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K
rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K
rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K
rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K
rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K
rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K
rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K
rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K
rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K
rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K
rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K
rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K
rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K
rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K
rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M
rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K
audio files total: 172 file(s), 42M
[+07m24s] ▶ Copying screenpipe logs for 2026-05-18
rsync logs → NAS ✓ 1 file(s), 308K
[2026-05-20 19:42:25] Archive DB size: 7.4G
[2026-05-20 19:42:25] Total time: 7m24s
[2026-05-20 19:42:25] Sync complete for 2026-05-18
[2026-05-20 19:42:25] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19
[2026-05-20 20:35:14] ========================================
[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19
[2026-05-20 20:35:14] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.4G)
Data dir: OK (201 files, 190M)
[+00m01s] ▶ Counting source rows for 2026-05-19
frames: 3796
elements: 544355
ui_events: 4277
ocr_text: 2040
meetings: 0
audio_chunks: 122
audio_transcriptions: 808
[+00m02s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m00s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m02s] ▶ Syncing vision data for 2026-05-19
video_chunks ✓ 0m03s
frames (3796 rows) ✓ 0m40s
ocr_text (2040 rows) ✓ 0m50s
ui_events (4277 rows) ✓ 0m01s
elements (544355 rows) ✓ 0m31s
meetings (0 rows) ✓ 0m00s
[+02m07s] ▶ Syncing audio data for 2026-05-19
audio_chunks (122 rows) ✓ 0m01s
audio_transcriptions (808 rows) ✓ 0m00s
[+02m08s] ▶ Updating FTS indexes
elements_fts ✓ 1m05s
frames_fts ✓ 1m30s
ui_events_fts ✓ 0m03s
audio_transcriptions_fts ✓ 0m01s
[+04m47s] ▶ Verifying DB
frames: 3796 / 3796 ✓
elements: 544355 / 544355 ✓
ui_events: 4277 / 4277 ✓
ocr_text: 2040 / 2040 ✓
meetings: 0 / 0 ✓
audio_chunks: 122 / 122 ✓
audio_transcriptions: 808 / 808 ✓
[+05m59s] ▶ Copying data folder for 2026-05-19
rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)
[+06m15s] ▶ Copying audio files for 2026-05-19
rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K
rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K
rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K
rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K
rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K
rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K
rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K
rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K
rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K
rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K
rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K
rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K
rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K
rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K
rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K
rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K
rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K
rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K
audio files total: 122 file(s), 26M
[+06m22s] ▶ Copying screenpipe logs for 2026-05-19
rsync logs → NAS ✓ 1 file(s), 328K
[2026-05-20 20:41:36] Archive DB size: 7.9G
[2026-05-20 20:41:36] Total time: 6m22s
[2026-05-20 20:41:36] Sync complete for 2026-05-19
[2026-05-20 20:41:36] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv
make: *** No rule to make target `checkEnv'. Stop.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv
docker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker="earth"
Before:
+---------+--------------------------------------------------------------------+
| Key | Value |
+---------+--------------------------------------------------------------------+
| qa | free |
| saturn | free |
| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |
| venus | JY-20543-AJ-report-tracking |
| mars | JY-20742-mcp-poc-OAuth-DCR |
| mercury | JY-20741-user-can-log-in-access-the-desktop-app |
| neptune | JY-20676-delete-report-related-objects |
| earth | free |
| jupiter | free |
| staging | JY-18091-upgrade-to-php-8-5 |
+---------+--------------------------------------------------------------------+
Bye.
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
68882
|
NULL
|
NULL
|
NULL
|
|
68884
|
2469
|
0
|
2026-05-22T07:30:14.395156+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779435014395_m1.jpg...
|
iTerm2
|
-zsh
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Wed May 20 09:14:49 on ttys009
Poetry Last login: Wed May 20 09:14:49 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe
4.8G /Users/lukas/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:34:48] ========================================
[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:34:48] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:35:01] ========================================
[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:35:01] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (6.6G)
Data dir: OK (168 files, 403M)
[+00m00s] ▶ Counting source rows for 2026-05-18
frames: 6300
elements: 758820
ui_events: 4662
ocr_text: 2983
meetings: 0
audio_chunks: 172
audio_transcriptions: 287
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m01s] ▶ Syncing vision data for 2026-05-18
video_chunks ✓ 0m03s
frames (6300 rows) ✓ 0m50s
ocr_text (2983 rows) ✓ 1m05s
ui_events (4662 rows) ✓ 0m00s
elements (758820 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m01s
[+02m39s] ▶ Syncing audio data for 2026-05-18
audio_chunks (172 rows) ✓ 0m00s
audio_transcriptions (287 rows) ✓ 0m00s
[+02m39s] ▶ Updating FTS indexes
elements_fts ✓ 1m16s
frames_fts ✓ 1m44s
ui_events_fts ✓ 0m02s
audio_transcriptions_fts ✓ 0m01s
[+05m42s] ▶ Verifying DB
frames: 6300 / 6300 ✓
elements: 758820 / 758820 ✓
ui_events: 4662 / 4662 ✓
ocr_text: 2983 / 2983 ✓
meetings: 0 / 0 ✓
audio_chunks: 172 / 172 ✓
audio_transcriptions: 287 / 287 ✓
[+06m48s] ▶ Copying data folder for 2026-05-18
rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)
[+07m12s] ▶ Copying audio files for 2026-05-18
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K
rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K
rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K
rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K
rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K
rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K
rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K
rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K
rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K
rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K
rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K
rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K
rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K
rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K
rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M
rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K
audio files total: 172 file(s), 42M
[+07m24s] ▶ Copying screenpipe logs for 2026-05-18
rsync logs → NAS ✓ 1 file(s), 308K
[2026-05-20 19:42:25] Archive DB size: 7.4G
[2026-05-20 19:42:25] Total time: 7m24s
[2026-05-20 19:42:25] Sync complete for 2026-05-18
[2026-05-20 19:42:25] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19
[2026-05-20 20:35:14] ========================================
[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19
[2026-05-20 20:35:14] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.4G)
Data dir: OK (201 files, 190M)
[+00m01s] ▶ Counting source rows for 2026-05-19
frames: 3796
elements: 544355
ui_events: 4277
ocr_text: 2040
meetings: 0
audio_chunks: 122
audio_transcriptions: 808
[+00m02s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m00s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m02s] ▶ Syncing vision data for 2026-05-19
video_chunks ✓ 0m03s
frames (3796 rows) ✓ 0m40s
ocr_text (2040 rows) ✓ 0m50s
ui_events (4277 rows) ✓ 0m01s
elements (544355 rows) ✓ 0m31s
meetings (0 rows) ✓ 0m00s
[+02m07s] ▶ Syncing audio data for 2026-05-19
audio_chunks (122 rows) ✓ 0m01s
audio_transcriptions (808 rows) ✓ 0m00s
[+02m08s] ▶ Updating FTS indexes
elements_fts ✓ 1m05s
frames_fts ✓ 1m30s
ui_events_fts ✓ 0m03s
audio_transcriptions_fts ✓ 0m01s
[+04m47s] ▶ Verifying DB
frames: 3796 / 3796 ✓
elements: 544355 / 544355 ✓
ui_events: 4277 / 4277 ✓
ocr_text: 2040 / 2040 ✓
meetings: 0 / 0 ✓
audio_chunks: 122 / 122 ✓
audio_transcriptions: 808 / 808 ✓
[+05m59s] ▶ Copying data folder for 2026-05-19
rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)
[+06m15s] ▶ Copying audio files for 2026-05-19
rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K
rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K
rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K
rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K
rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K
rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K
rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K
rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K
rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K
rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K
rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K
rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K
rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K
rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K
rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K
rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K
rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K
rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K
audio files total: 122 file(s), 26M
[+06m22s] ▶ Copying screenpipe logs for 2026-05-19
rsync logs → NAS ✓ 1 file(s), 328K
[2026-05-20 20:41:36] Archive DB size: 7.9G
[2026-05-20 20:41:36] Total time: 6m22s
[2026-05-20 20:41:36] Sync complete for 2026-05-19
[2026-05-20 20:41:36] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv
make: *** No rule to make target `checkEnv'. Stop.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv
docker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker="earth"
Before:
+---------+--------------------------------------------------------------------+
| Key | Value |
+---------+--------------------------------------------------------------------+
| qa | free |
| saturn | free |
| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |
| venus | JY-20543-AJ-report-tracking |
| mars | JY-20742-mcp-poc-OAuth-DCR |
| mercury | JY-20741-user-can-log-in-access-the-desktop-app |
| neptune | JY-20676-delete-report-related-objects |
| earth | free |
| jupiter | free |
| staging | JY-18091-upgrade-to-php-8-5 |
+---------+--------------------------------------------------------------------+
Bye.
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Wed May 20 09:14:49 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe \n4.8G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:34:48] ========================================\n[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:34:48] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:35:01] ========================================\n[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:35:01] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (6.6G)\n Data dir: OK (168 files, 403M)\n\n[+00m00s] ▶ Counting source rows for 2026-05-18\n frames: 6300\n elements: 758820\n ui_events: 4662\n ocr_text: 2983\n meetings: 0\n audio_chunks: 172\n audio_transcriptions: 287\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m01s] ▶ Syncing vision data for 2026-05-18\n video_chunks ✓ 0m03s\n frames (6300 rows) ✓ 0m50s\n ocr_text (2983 rows) ✓ 1m05s\n ui_events (4662 rows) ✓ 0m00s\n elements (758820 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m01s\n\n[+02m39s] ▶ Syncing audio data for 2026-05-18\n audio_chunks (172 rows) ✓ 0m00s\n audio_transcriptions (287 rows) ✓ 0m00s\n\n[+02m39s] ▶ Updating FTS indexes\n elements_fts ✓ 1m16s\n frames_fts ✓ 1m44s\n ui_events_fts ✓ 0m02s\n audio_transcriptions_fts ✓ 0m01s\n\n[+05m42s] ▶ Verifying DB\n frames: 6300 / 6300 ✓\n elements: 758820 / 758820 ✓\n ui_events: 4662 / 4662 ✓\n ocr_text: 2983 / 2983 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 172 / 172 ✓\n audio_transcriptions: 287 / 287 ✓\n\n[+06m48s] ▶ Copying data folder for 2026-05-18\n rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)\n\n[+07m12s] ▶ Copying audio files for 2026-05-18\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K\n rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K\n rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K\n rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K\n rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K\n rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K\n rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K\n rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K\n rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K\n rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K\n rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K\n rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K\n rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K\n rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K\n rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K\n audio files total: 172 file(s), 42M\n\n[+07m24s] ▶ Copying screenpipe logs for 2026-05-18\n rsync logs → NAS ✓ 1 file(s), 308K\n\n[2026-05-20 19:42:25] Archive DB size: 7.4G\n[2026-05-20 19:42:25] Total time: 7m24s\n[2026-05-20 19:42:25] Sync complete for 2026-05-18\n[2026-05-20 19:42:25] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19\n[2026-05-20 20:35:14] ========================================\n[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19\n[2026-05-20 20:35:14] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.4G)\n Data dir: OK (201 files, 190M)\n\n[+00m01s] ▶ Counting source rows for 2026-05-19\n frames: 3796\n elements: 544355\n ui_events: 4277\n ocr_text: 2040\n meetings: 0\n audio_chunks: 122\n audio_transcriptions: 808\n\n[+00m02s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m00s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m02s] ▶ Syncing vision data for 2026-05-19\n video_chunks ✓ 0m03s\n frames (3796 rows) ✓ 0m40s\n ocr_text (2040 rows) ✓ 0m50s\n ui_events (4277 rows) ✓ 0m01s\n elements (544355 rows) ✓ 0m31s\n meetings (0 rows) ✓ 0m00s\n\n[+02m07s] ▶ Syncing audio data for 2026-05-19\n audio_chunks (122 rows) ✓ 0m01s\n audio_transcriptions (808 rows) ✓ 0m00s\n\n[+02m08s] ▶ Updating FTS indexes\n elements_fts ✓ 1m05s\n frames_fts ✓ 1m30s\n ui_events_fts ✓ 0m03s\n audio_transcriptions_fts ✓ 0m01s\n\n[+04m47s] ▶ Verifying DB\n frames: 3796 / 3796 ✓\n elements: 544355 / 544355 ✓\n ui_events: 4277 / 4277 ✓\n ocr_text: 2040 / 2040 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 122 / 122 ✓\n audio_transcriptions: 808 / 808 ✓\n\n[+05m59s] ▶ Copying data folder for 2026-05-19\n rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)\n\n[+06m15s] ▶ Copying audio files for 2026-05-19\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K\n rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K\n rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K\n rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K\n rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K\n rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K\n rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K\n rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K\n rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K\n rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K\n rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K\n rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K\n rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K\n audio files total: 122 file(s), 26M\n\n[+06m22s] ▶ Copying screenpipe logs for 2026-05-19\n rsync logs → NAS ✓ 1 file(s), 328K\n\n[2026-05-20 20:41:36] Archive DB size: 7.9G\n[2026-05-20 20:41:36] Total time: 6m22s\n[2026-05-20 20:41:36] Sync complete for 2026-05-19\n[2026-05-20 20:41:36] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv\nmake: *** No rule to make target `checkEnv'. Stop.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv\ndocker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker=\"earth\"\nBefore:\n+---------+--------------------------------------------------------------------+\n| Key | Value |\n+---------+--------------------------------------------------------------------+\n| qa | free |\n| saturn | free |\n| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |\n| venus | JY-20543-AJ-report-tracking |\n| mars | JY-20742-mcp-poc-OAuth-DCR |\n| mercury | JY-20741-user-can-log-in-access-the-desktop-app |\n| neptune | JY-20676-delete-report-related-objects |\n| earth | free |\n| jupiter | free |\n| staging | JY-18091-upgrade-to-php-8-5 |\n+---------+--------------------------------------------------------------------+\nBye.\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sp-stop\nscreenpipe stopped\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $","depth":4,"on_screen":true,"value":"Last login: Wed May 20 09:14:49 on ttys009\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe \n4.8G\u0000\u0000\u0000\t/Users/lukas/.screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:34:48] ========================================\n[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:34:48] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18\n[2026-05-20 19:35:01] ========================================\n[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18\n[2026-05-20 19:35:01] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (6.6G)\n Data dir: OK (168 files, 403M)\n\n[+00m00s] ▶ Counting source rows for 2026-05-18\n frames: 6300\n elements: 758820\n ui_events: 4662\n ocr_text: 2983\n meetings: 0\n audio_chunks: 172\n audio_transcriptions: 287\n\n[+00m00s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m01s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m01s] ▶ Syncing vision data for 2026-05-18\n video_chunks ✓ 0m03s\n frames (6300 rows) ✓ 0m50s\n ocr_text (2983 rows) ✓ 1m05s\n ui_events (4662 rows) ✓ 0m00s\n elements (758820 rows) ✓ 0m38s\n meetings (0 rows) ✓ 0m01s\n\n[+02m39s] ▶ Syncing audio data for 2026-05-18\n audio_chunks (172 rows) ✓ 0m00s\n audio_transcriptions (287 rows) ✓ 0m00s\n\n[+02m39s] ▶ Updating FTS indexes\n elements_fts ✓ 1m16s\n frames_fts ✓ 1m44s\n ui_events_fts ✓ 0m02s\n audio_transcriptions_fts ✓ 0m01s\n\n[+05m42s] ▶ Verifying DB\n frames: 6300 / 6300 ✓\n elements: 758820 / 758820 ✓\n ui_events: 4662 / 4662 ✓\n ocr_text: 2983 / 2983 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 172 / 172 ✓\n audio_transcriptions: 287 / 287 ✓\n\n[+06m48s] ▶ Copying data folder for 2026-05-18\n rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)\n\n[+07m12s] ▶ Copying audio files for 2026-05-18\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K\n rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K\n rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K\n rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K\n rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K\n rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K\n rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K\n rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K\n rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K\n rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K\n rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K\n rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K\n rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K\n rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K\n rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K\n rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K\n rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K\n rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K\n rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K\n rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K\n rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K\n rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K\n rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K\n rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K\n audio files total: 172 file(s), 42M\n\n[+07m24s] ▶ Copying screenpipe logs for 2026-05-18\n rsync logs → NAS ✓ 1 file(s), 308K\n\n[2026-05-20 19:42:25] Archive DB size: 7.4G\n[2026-05-20 19:42:25] Total time: 7m24s\n[2026-05-20 19:42:25] Sync complete for 2026-05-18\n[2026-05-20 19:42:25] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19\n[2026-05-20 20:35:14] ========================================\n[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19\n[2026-05-20 20:35:14] ========================================\n\n[+00m00s] ▶ Preflight checks\n Source DB: OK (3.4G)\n NAS mount: OK /Volumes/screenpipe\n Archive DB: exists (7.4G)\n Data dir: OK (201 files, 190M)\n\n[+00m01s] ▶ Counting source rows for 2026-05-19\n frames: 3796\n elements: 544355\n ui_events: 4277\n ocr_text: 2040\n meetings: 0\n audio_chunks: 122\n audio_transcriptions: 808\n\n[+00m02s] ▶ Initialising tables, indexes, FTS\n creating tables ✓ 0m00s\n creating indexes ✓ 0m00s\n creating FTS tables ✓ 0m00s\n\n[+00m02s] ▶ Syncing vision data for 2026-05-19\n video_chunks ✓ 0m03s\n frames (3796 rows) ✓ 0m40s\n ocr_text (2040 rows) ✓ 0m50s\n ui_events (4277 rows) ✓ 0m01s\n elements (544355 rows) ✓ 0m31s\n meetings (0 rows) ✓ 0m00s\n\n[+02m07s] ▶ Syncing audio data for 2026-05-19\n audio_chunks (122 rows) ✓ 0m01s\n audio_transcriptions (808 rows) ✓ 0m00s\n\n[+02m08s] ▶ Updating FTS indexes\n elements_fts ✓ 1m05s\n frames_fts ✓ 1m30s\n ui_events_fts ✓ 0m03s\n audio_transcriptions_fts ✓ 0m01s\n\n[+04m47s] ▶ Verifying DB\n frames: 3796 / 3796 ✓\n elements: 544355 / 544355 ✓\n ui_events: 4277 / 4277 ✓\n ocr_text: 2040 / 2040 ✓\n meetings: 0 / 0 ✓\n audio_chunks: 122 / 122 ✓\n audio_transcriptions: 808 / 808 ✓\n\n[+05m59s] ▶ Copying data folder for 2026-05-19\n rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)\n\n[+06m15s] ▶ Copying audio files for 2026-05-19\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K\n rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K\n rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K\n rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K\n rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K\n rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K\n rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K\n rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K\n rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K\n rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K\n rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K\n rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K\n rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K\n rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K\n rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K\n rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K\n rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K\n rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K\n rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K\n rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K\n rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K\n rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K\n rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K\n rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K\n rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K\n rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K\n rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K\n rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K\n rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K\n rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K\n rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K\n rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K\n rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K\n rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K\n rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K\n rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K\n rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K\n rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K\n rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K\n rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K\n rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K\n audio files total: 122 file(s), 26M\n\n[+06m22s] ▶ Copying screenpipe logs for 2026-05-19\n rsync logs → NAS ✓ 1 file(s), 328K\n\n[2026-05-20 20:41:36] Archive DB size: 7.9G\n[2026-05-20 20:41:36] Total time: 6m22s\n[2026-05-20 20:41:36] Sync complete for 2026-05-19\n[2026-05-20 20:41:36] ========================================\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv\nmake: *** No rule to make target `checkEnv'. Stop.\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv\ndocker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker=\"earth\"\nBefore:\n+---------+--------------------------------------------------------------------+\n| Key | Value |\n+---------+--------------------------------------------------------------------+\n| qa | free |\n| saturn | free |\n| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |\n| venus | JY-20543-AJ-report-tracking |\n| mars | JY-20742-mcp-poc-OAuth-DCR |\n| mercury | JY-20741-user-can-log-in-access-the-desktop-app |\n| neptune | JY-20676-delete-report-related-objects |\n| earth | free |\n| jupiter | free |\n| staging | JY-18091-upgrade-to-php-8-5 |\n+---------+--------------------------------------------------------------------+\nBye.\n\nWhat's next:\n Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1\n Learn more at https://docs.docker.com/go/debug-cli/\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ sp-stop\nscreenpipe stopped\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST http://localhost:11434/api/generate -d '{\n \"model\": \"gemma4:32b\", // Replace with the model you have downloaded (e.g., llama3, mistral)\n \"prompt\": \"Write a short poem about self-hosting AI.\",\n \"stream\": false\n}'\ncurl: (7) Failed to connect to localhost port 11434 after 0 ms: Couldn't connect to server\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.0013888889,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.16180556,"top":0.05888889,"width":0.16458334,"height":0.026666667},"on_screen":true,"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.16597222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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.3263889,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.33055556,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"screenpipe\"","depth":2,"bounds":{"left":0.490625,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.49479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6548611,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.65902776,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.8190972,"top":0.05888889,"width":0.16423611,"height":0.026666667},"on_screen":true,"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.8232639,"top":0.06333333,"width":0.011111111,"height":0.017777778},"on_screen":true,"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},"on_screen":true,"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48680556,"top":0.033333335,"width":0.022916667,"height":0.017777778},"on_screen":true,"role_description":"text"}]...
|
-6572287919365258477
|
4355694469229718887
|
app_switch
|
accessibility
|
NULL
|
Last login: Wed May 20 09:14:49 on ttys009
Poetry Last login: Wed May 20 09:14:49 on ttys009
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
Poetry could not find a pyproject.toml file in /Users/lukas or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ du -sh ~/.screenpipe
4.8G /Users/lukas/.screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:34:48] ========================================
[2026-05-20 19:34:48] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:34:48] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
[2026-05-20 19:34:48] ERROR: NAS not mounted at /Volumes/screenpipe
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-18
[2026-05-20 19:35:01] ========================================
[2026-05-20 19:35:01] Screenpipe sync starting for: 2026-05-18
[2026-05-20 19:35:01] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (6.6G)
Data dir: OK (168 files, 403M)
[+00m00s] ▶ Counting source rows for 2026-05-18
frames: 6300
elements: 758820
ui_events: 4662
ocr_text: 2983
meetings: 0
audio_chunks: 172
audio_transcriptions: 287
[+00m00s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m01s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m01s] ▶ Syncing vision data for 2026-05-18
video_chunks ✓ 0m03s
frames (6300 rows) ✓ 0m50s
ocr_text (2983 rows) ✓ 1m05s
ui_events (4662 rows) ✓ 0m00s
elements (758820 rows) ✓ 0m38s
meetings (0 rows) ✓ 0m01s
[+02m39s] ▶ Syncing audio data for 2026-05-18
audio_chunks (172 rows) ✓ 0m00s
audio_transcriptions (287 rows) ✓ 0m00s
[+02m39s] ▶ Updating FTS indexes
elements_fts ✓ 1m16s
frames_fts ✓ 1m44s
ui_events_fts ✓ 0m02s
audio_transcriptions_fts ✓ 0m01s
[+05m42s] ▶ Verifying DB
frames: 6300 / 6300 ✓
elements: 758820 / 758820 ✓
ui_events: 4662 / 4662 ✓
ocr_text: 2983 / 2983 ✓
meetings: 0 / 0 ✓
audio_chunks: 172 / 172 ✓
audio_transcriptions: 287 / 287 ✓
[+06m48s] ▶ Copying data folder for 2026-05-18
rsync 2026-05-18/ → NAS ✓ 0m24s (168 files, 403M)
[+07m12s] ▶ Copying audio files for 2026-05-18
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-17.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-18_06-37-47.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-42-54.mp4 → NAS ✓ 212K
rsync System Audio (output)_2026-05-18_06-45-44.mp4 → NAS ✓ 42K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-45-53.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-46-14.mp4 → NAS ✓ 143K
rsync System Audio (output)_2026-05-18_06-46-44.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-18_06-47-12.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-18_06-47-42.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-48-12.mp4 → NAS ✓ 237K
rsync System Audio (output)_2026-05-18_06-48-41.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_06-49-10.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_06-49-40.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-50-08.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_06-50-34.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-18_06-51-03.mp4 → NAS ✓ 215K
rsync System Audio (output)_2026-05-18_06-51-32.mp4 → NAS ✓ 250K
rsync System Audio (output)_2026-05-18_06-52-00.mp4 → NAS ✓ 257K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-20.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_06-52-28.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-52-50.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-52-57.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_06-53-26.mp4 → NAS ✓ 231K
rsync System Audio (output)_2026-05-18_06-53-56.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-54-25.mp4 → NAS ✓ 243K
rsync System Audio (output)_2026-05-18_06-54-55.mp4 → NAS ✓ 252K
rsync System Audio (output)_2026-05-18_06-55-23.mp4 → NAS ✓ 235K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-55-49.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-19.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_06-56-21.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-56-49.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_06-56-50.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-18_06-57-20.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-57-48.mp4 → NAS ✓ 58K
rsync System Audio (output)_2026-05-18_06-58-16.mp4 → NAS ✓ 109K
rsync System Audio (output)_2026-05-18_06-58-43.mp4 → NAS ✓ 199K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-58-48.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_06-59-10.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_06-59-17.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_06-59-39.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-18_07-00-08.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-18_07-00-37.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-00-47.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-18_07-01-07.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-17.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-18_07-01-37.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-01-47.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-02-07.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-02-36.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-02-47.mp4 → NAS ✓ 405K
rsync System Audio (output)_2026-05-18_07-03-06.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-17.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-03-36.mp4 → NAS ✓ 229K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-03-47.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-18_07-04-04.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-04-33.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-04-46.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-05-02.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-16.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-05-32.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-05-46.mp4 → NAS ✓ 210K
rsync System Audio (output)_2026-05-18_07-06-02.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-18_07-06-32.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-06-46.mp4 → NAS ✓ 217K
rsync System Audio (output)_2026-05-18_07-07-01.mp4 → NAS ✓ 207K
rsync System Audio (output)_2026-05-18_07-07-31.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-18_07-08-01.mp4 → NAS ✓ 212K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-16.mp4 → NAS ✓ 219K
rsync System Audio (output)_2026-05-18_07-08-31.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-08-46.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-18_07-09-01.mp4 → NAS ✓ 201K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-16.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-09-31.mp4 → NAS ✓ 192K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-09-46.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-18_07-10-00.mp4 → NAS ✓ 185K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-16.mp4 → NAS ✓ 227K
rsync System Audio (output)_2026-05-18_07-10-29.mp4 → NAS ✓ 204K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-10-46.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-18_07-10-59.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-16.mp4 → NAS ✓ 236K
rsync System Audio (output)_2026-05-18_07-11-29.mp4 → NAS ✓ 175K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-11-46.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-18_07-11-59.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-16.mp4 → NAS ✓ 213K
rsync System Audio (output)_2026-05-18_07-12-29.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-12-46.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_07-12-58.mp4 → NAS ✓ 109K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-13-16.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-15-45.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-18-45.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-19-15.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-25-44.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-42-41.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-44-11.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-45-11.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-47-40.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-51-40.mp4 → NAS ✓ 193K
rsync LakyLak bose qc35 II (input)_2026-05-18_07-55-10.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-09.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-02-39.mp4 → NAS ✓ 202K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-08-39.mp4 → NAS ✓ 200K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-09.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-14-39.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-25-38.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-26-08.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-29-38.mp4 → NAS ✓ 206K
rsync LakyLak bose qc35 II (input)_2026-05-18_08-31-08.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-57-32.mp4 → NAS ✓ 218K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-02.mp4 → NAS ✓ 604K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-58-32.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_09-59-02.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-00-31.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-01-01.mp4 → NAS ✓ 657K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-02-31.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-01.mp4 → NAS ✓ 661K
rsync LakyLak bose qc35 II (input)_2026-05-18_10-03-31.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-01.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-07-31.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-01.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-08-31.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-01.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-09-31.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-10-01.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-15-00.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-29.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-19-59.mp4 → NAS ✓ 236K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-29.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-20-59.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-21-29.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-36-57.mp4 → NAS ✓ 226K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-27.mp4 → NAS ✓ 244K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-37-56.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-38-56.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-26.mp4 → NAS ✓ 246K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-39-56.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-40-26.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-47-55.mp4 → NAS ✓ 211K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-24.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-48-54.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-49-54.mp4 → NAS ✓ 414K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-24.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-50-54.mp4 → NAS ✓ 228K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-24.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-51-54.mp4 → NAS ✓ 215K
rsync LakyLak bose qc35 II (input)_2026-05-18_12-53-24.mp4 → NAS ✓ 607K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-00-52.mp4 → NAS ✓ 3.0M
rsync LakyLak bose qc35 II (input)_2026-05-18_13-11-50.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-12-20.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-13-20.mp4 → NAS ✓ 230K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-19-49.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-19.mp4 → NAS ✓ 794K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-25-49.mp4 → NAS ✓ 232K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-18.mp4 → NAS ✓ 251K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-26-48.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-27-18.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-28-18.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-33-48.mp4 → NAS ✓ 207K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-34-18.mp4 → NAS ✓ 234K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-36-18.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-38-47.mp4 → NAS ✓ 780K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-17.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-39-47.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-40-17.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-46-47.mp4 → NAS ✓ 240K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-47-17.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-17.mp4 → NAS ✓ 250K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-49-47.mp4 → NAS ✓ 210K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-52-16.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-56-46.mp4 → NAS ✓ 227K
rsync LakyLak bose qc35 II (input)_2026-05-18_13-57-16.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-18_16-39-09.mp4 → NAS ✓ 11K
audio files total: 172 file(s), 42M
[+07m24s] ▶ Copying screenpipe logs for 2026-05-18
rsync logs → NAS ✓ 1 file(s), 308K
[2026-05-20 19:42:25] Archive DB size: 7.4G
[2026-05-20 19:42:25] Total time: 7m24s
[2026-05-20 19:42:25] Sync complete for 2026-05-18
[2026-05-20 19:42:25] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ ~/.screenpipe/scripts/screenpipe_sync.sh 2026-05-19
[2026-05-20 20:35:14] ========================================
[2026-05-20 20:35:14] Screenpipe sync starting for: 2026-05-19
[2026-05-20 20:35:14] ========================================
[+00m00s] ▶ Preflight checks
Source DB: OK (3.4G)
NAS mount: OK /Volumes/screenpipe
Archive DB: exists (7.4G)
Data dir: OK (201 files, 190M)
[+00m01s] ▶ Counting source rows for 2026-05-19
frames: 3796
elements: 544355
ui_events: 4277
ocr_text: 2040
meetings: 0
audio_chunks: 122
audio_transcriptions: 808
[+00m02s] ▶ Initialising tables, indexes, FTS
creating tables ✓ 0m00s
creating indexes ✓ 0m00s
creating FTS tables ✓ 0m00s
[+00m02s] ▶ Syncing vision data for 2026-05-19
video_chunks ✓ 0m03s
frames (3796 rows) ✓ 0m40s
ocr_text (2040 rows) ✓ 0m50s
ui_events (4277 rows) ✓ 0m01s
elements (544355 rows) ✓ 0m31s
meetings (0 rows) ✓ 0m00s
[+02m07s] ▶ Syncing audio data for 2026-05-19
audio_chunks (122 rows) ✓ 0m01s
audio_transcriptions (808 rows) ✓ 0m00s
[+02m08s] ▶ Updating FTS indexes
elements_fts ✓ 1m05s
frames_fts ✓ 1m30s
ui_events_fts ✓ 0m03s
audio_transcriptions_fts ✓ 0m01s
[+04m47s] ▶ Verifying DB
frames: 3796 / 3796 ✓
elements: 544355 / 544355 ✓
ui_events: 4277 / 4277 ✓
ocr_text: 2040 / 2040 ✓
meetings: 0 / 0 ✓
audio_chunks: 122 / 122 ✓
audio_transcriptions: 808 / 808 ✓
[+05m59s] ▶ Copying data folder for 2026-05-19
rsync 2026-05-19/ → NAS ✓ 0m16s (201 files, 190M)
[+06m15s] ▶ Copying audio files for 2026-05-19
rsync LakyLak bose qc35 II (input)_2026-05-19_06-39-26.mp4 → NAS ✓ 202K
rsync System Audio (output)_2026-05-19_06-45-15.mp4 → NAS ✓ 141K
rsync System Audio (output)_2026-05-19_06-45-44.mp4 → NAS ✓ 57K
rsync System Audio (output)_2026-05-19_06-46-14.mp4 → NAS ✓ 191K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-46-28.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_06-46-44.mp4 → NAS ✓ 216K
rsync System Audio (output)_2026-05-19_06-47-14.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_06-47-44.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_06-48-14.mp4 → NAS ✓ 238K
rsync System Audio (output)_2026-05-19_06-48-43.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_06-49-13.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_06-49-43.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-50-13.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-50-43.mp4 → NAS ✓ 248K
rsync System Audio (output)_2026-05-19_06-51-12.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-51-42.mp4 → NAS ✓ 245K
rsync System Audio (output)_2026-05-19_06-52-12.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_06-52-42.mp4 → NAS ✓ 246K
rsync System Audio (output)_2026-05-19_06-53-12.mp4 → NAS ✓ 224K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-27.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-53-42.mp4 → NAS ✓ 195K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-53-57.mp4 → NAS ✓ 225K
rsync System Audio (output)_2026-05-19_06-54-12.mp4 → NAS ✓ 214K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-54-27.mp4 → NAS ✓ 201K
rsync System Audio (output)_2026-05-19_06-54-42.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_06-55-12.mp4 → NAS ✓ 209K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-55-27.mp4 → NAS ✓ 208K
rsync System Audio (output)_2026-05-19_06-55-42.mp4 → NAS ✓ 226K
rsync System Audio (output)_2026-05-19_06-56-12.mp4 → NAS ✓ 239K
rsync System Audio (output)_2026-05-19_06-56-42.mp4 → NAS ✓ 249K
rsync System Audio (output)_2026-05-19_06-57-11.mp4 → NAS ✓ 255K
rsync System Audio (output)_2026-05-19_06-57-41.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_06-58-11.mp4 → NAS ✓ 233K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-27.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_06-58-41.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_06-58-57.mp4 → NAS ✓ 222K
rsync System Audio (output)_2026-05-19_06-59-11.mp4 → NAS ✓ 224K
rsync System Audio (output)_2026-05-19_06-59-41.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-00-09.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-00-38.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-01-08.mp4 → NAS ✓ 231K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-26.mp4 → NAS ✓ 228K
rsync System Audio (output)_2026-05-19_07-01-37.mp4 → NAS ✓ 179K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-01-56.mp4 → NAS ✓ 209K
rsync System Audio (output)_2026-05-19_07-02-07.mp4 → NAS ✓ 245K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-02-26.mp4 → NAS ✓ 205K
rsync System Audio (output)_2026-05-19_07-02-37.mp4 → NAS ✓ 241K
rsync System Audio (output)_2026-05-19_07-03-07.mp4 → NAS ✓ 242K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-26.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-03-36.mp4 → NAS ✓ 217K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-03-56.mp4 → NAS ✓ 235K
rsync System Audio (output)_2026-05-19_07-04-06.mp4 → NAS ✓ 216K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-25.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-04-36.mp4 → NAS ✓ 220K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-04-55.mp4 → NAS ✓ 211K
rsync System Audio (output)_2026-05-19_07-05-05.mp4 → NAS ✓ 221K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-25.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-05-35.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-05-55.mp4 → NAS ✓ 221K
rsync System Audio (output)_2026-05-19_07-06-04.mp4 → NAS ✓ 219K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-25.mp4 → NAS ✓ 244K
rsync System Audio (output)_2026-05-19_07-06-34.mp4 → NAS ✓ 197K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-06-55.mp4 → NAS ✓ 220K
rsync System Audio (output)_2026-05-19_07-07-04.mp4 → NAS ✓ 241K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-25.mp4 → NAS ✓ 218K
rsync System Audio (output)_2026-05-19_07-07-34.mp4 → NAS ✓ 213K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-07-55.mp4 → NAS ✓ 214K
rsync System Audio (output)_2026-05-19_07-08-04.mp4 → NAS ✓ 230K
rsync System Audio (output)_2026-05-19_07-08-33.mp4 → NAS ✓ 234K
rsync System Audio (output)_2026-05-19_07-09-03.mp4 → NAS ✓ 232K
rsync System Audio (output)_2026-05-19_07-09-30.mp4 → NAS ✓ 222K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-09-53.mp4 → NAS ✓ 240K
rsync System Audio (output)_2026-05-19_07-09-58.mp4 → NAS ✓ 223K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-23.mp4 → NAS ✓ 233K
rsync System Audio (output)_2026-05-19_07-10-27.mp4 → NAS ✓ 225K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-10-52.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-10-57.mp4 → NAS ✓ 208K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-22.mp4 → NAS ✓ 242K
rsync System Audio (output)_2026-05-19_07-11-27.mp4 → NAS ✓ 203K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-11-52.mp4 → NAS ✓ 229K
rsync System Audio (output)_2026-05-19_07-11-56.mp4 → NAS ✓ 55K
rsync LakyLak bose qc35 II (input)_2026-05-19_07-12-52.mp4 → NAS ✓ 230K
rsync MacBook Pro Microphone (input)_2026-05-19_07-15-51.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-21.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-16-51.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_07-17-21.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_07-19-21.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-31-15.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_07-56-41.mp4 → NAS ✓ 203K
rsync MacBook Pro Microphone (input)_2026-05-19_08-10-36.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-04.mp4 → NAS ✓ 223K
rsync MacBook Pro Microphone (input)_2026-05-19_08-21-34.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-03.mp4 → NAS ✓ 211K
rsync MacBook Pro Microphone (input)_2026-05-19_08-22-33.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-03.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_08-23-33.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-03.mp4 → NAS ✓ 204K
rsync MacBook Pro Microphone (input)_2026-05-19_08-24-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_08-25-03.mp4 → NAS ✓ 217K
rsync MacBook Pro Microphone (input)_2026-05-19_08-45-58.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_08-55-25.mp4 → NAS ✓ 219K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_08-57-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-24.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_08-58-54.mp4 → NAS ✓ 207K
rsync MacBook Pro Microphone (input)_2026-05-19_08-59-24.mp4 → NAS ✓ 216K
rsync MacBook Pro Microphone (input)_2026-05-19_09-00-24.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_09-43-17.mp4 → NAS ✓ 228K
rsync MacBook Pro Microphone (input)_2026-05-19_09-44-45.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-14.mp4 → NAS ✓ 210K
rsync MacBook Pro Microphone (input)_2026-05-19_09-45-44.mp4 → NAS ✓ 214K
rsync MacBook Pro Microphone (input)_2026-05-19_10-10-33.mp4 → NAS ✓ 220K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-02.mp4 → NAS ✓ 202K
rsync MacBook Pro Microphone (input)_2026-05-19_10-11-32.mp4 → NAS ✓ 205K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-02.mp4 → NAS ✓ 209K
rsync MacBook Pro Microphone (input)_2026-05-19_10-12-32.mp4 → NAS ✓ 213K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-01.mp4 → NAS ✓ 222K
rsync MacBook Pro Microphone (input)_2026-05-19_10-13-31.mp4 → NAS ✓ 206K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-01.mp4 → NAS ✓ 208K
rsync MacBook Pro Microphone (input)_2026-05-19_10-14-31.mp4 → NAS ✓ 215K
rsync MacBook Pro Microphone (input)_2026-05-19_10-15-01.mp4 → NAS ✓ 212K
rsync MacBook Pro Microphone (input)_2026-05-19_11-27-17.mp4 → NAS ✓ 212K
audio files total: 122 file(s), 26M
[+06m22s] ▶ Copying screenpipe logs for 2026-05-19
rsync logs → NAS ✓ 1 file(s), 328K
[2026-05-20 20:41:36] Archive DB size: 7.9G
[2026-05-20 20:41:36] Total time: 6m22s
[2026-05-20 20:41:36] Sync complete for 2026-05-19
[2026-05-20 20:41:36] ========================================
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ make checkEnv
make: *** No rule to make target `checkEnv'. Stop.
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ app
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-20915-add-domain-specific-email-text-relay) $ make checkEnv
docker exec -it docker_lamp_1 php artisan jiminny:env:pipe --checkOnly --marker="earth"
Before:
+---------+--------------------------------------------------------------------+
| Key | Value |
+---------+--------------------------------------------------------------------+
| qa | free |
| saturn | free |
| uranus | JY-20835-mcp-enable-users-to-get-a-list-of-deals-and-their-details |
| venus | JY-20543-AJ-report-tracking |
| mars | JY-20742-mcp-poc-OAuth-DCR |
| mercury | JY-20741-user-can-log-in-access-the-desktop-app |
| neptune | JY-20676-delete-report-related-objects |
| earth | free |
| jupiter | free |
| staging | JY-18091-upgrade-to-php-8-5 |
+---------+--------------------------------------------------------------------+
Bye.
What's next:
Try Docker Debug for seamless, persistent debugging tools in any container or image → docker debug docker_lamp_1
Learn more at [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $ sp-stop
screenpipe stopped
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (master) $ curl -X POST [URL_WITH_CREDENTIALS] ~/jiminny/app (master) $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
screenpipe"
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
68885
|
2469
|
1
|
2026-05-22T07:30:20.225965+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779435020225_m1.jpg...
|
Firefox
|
💬1 - Apple MacBook Pro 14" Space Black M5 Max 💬1 - Apple MacBook Pro 14" Space Black M5 Max | Laptop.bg - Технологията с теб — Personal...
|
1
|
laptop.bg/laptops-apple-MacBook_Pro_14_M5_2026-mgd laptop.bg/laptops-apple-MacBook_Pro_14_M5_2026-mgdu4zea_upgrade_z1mn_40C_GPU?_gl=1*1wmguf8*_up*MQ..*_gs*MQ..&gclid=CjwKCAjwt7XQBhBkEiwAtStppxNtQPdXU_nSeNetoGxoSZgiAHxVJRCTD-II47qdmwOFM-PheGd59hoCejcQAvD_BwE&conf[]=113420...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Завеждане на щета онлайн | Euroins
euroins.bg
Nvid Завеждане на щета онлайн | Euroins
euroins.bg
Nvidia's RTX HDR feature is game-changing (literally) - [EMAIL] - Gmail
Nvidia's RTX HDR feature is game-changing (literally) - [EMAIL] - Gmail
Ambulatory sheet - Paperless-ngx
Ambulatory sheet - Paperless-ngx
💬1 - Apple MacBook Pro 14" Space Black M5 Max | Laptop.bg - Технологията с теб
💬1 - Apple MacBook Pro 14" Space Black M5 Max | Laptop.bg - Технологията с теб
Close tab
Apple Mac Studio M4 Max | Desktop.bg - Мощни PC Гейминг конфигурации, Персонални компютри на изплащане за игри и работа
Apple Mac Studio M4 Max | Desktop.bg - Мощни PC Гейминг конфигурации, Персонални компютри на изплащане за игри и работа
Welcome to authentik! - authentik
Welcome to authentik! - authentik
Завеждане на щета онлайн | Euroins
Завеждане на щета онлайн | Euroins
Close tab
Screenpipe — Archive
Screenpipe — Archive
Reminders
Reminders
Photos - Google Photos
Photos - Google Photos...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Завеждане на щета онлайн | Euroins","depth":4,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"euroins.bg","depth":4,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nvidia's RTX HDR feature is game-changing (literally) - kovaliklukas@gmail.com - Gmail","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nvidia's RTX HDR feature is game-changing (literally) - kovaliklukas@gmail.com - Gmail","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Ambulatory sheet - Paperless-ngx","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ambulatory sheet - Paperless-ngx","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"💬1 - Apple MacBook Pro 14\" Space Black M5 Max | Laptop.bg - Технологията с теб","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"💬1 - Apple MacBook Pro 14\" Space Black M5 Max | Laptop.bg - Технологията с теб","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Apple Mac Studio M4 Max | Desktop.bg - Мощни PC Гейминг конфигурации, Персонални компютри на изплащане за игри и работа","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Apple Mac Studio M4 Max | Desktop.bg - Мощни PC Гейминг конфигурации, Персонални компютри на изплащане за игри и работа","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Welcome to authentik! - authentik","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome to authentik! - authentik","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Завеждане на щета онлайн | Euroins","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Завеждане на щета онлайн | Euroins","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Reminders","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reminders","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Photos - Google Photos","depth":4,"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Photos - Google Photos","depth":5,"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-7824745732196550759
|
1581482779813727337
|
app_switch
|
accessibility
|
NULL
|
Завеждане на щета онлайн | Euroins
euroins.bg
Nvid Завеждане на щета онлайн | Euroins
euroins.bg
Nvidia's RTX HDR feature is game-changing (literally) - [EMAIL] - Gmail
Nvidia's RTX HDR feature is game-changing (literally) - [EMAIL] - Gmail
Ambulatory sheet - Paperless-ngx
Ambulatory sheet - Paperless-ngx
💬1 - Apple MacBook Pro 14" Space Black M5 Max | Laptop.bg - Технологията с теб
💬1 - Apple MacBook Pro 14" Space Black M5 Max | Laptop.bg - Технологията с теб
Close tab
Apple Mac Studio M4 Max | Desktop.bg - Мощни PC Гейминг конфигурации, Персонални компютри на изплащане за игри и работа
Apple Mac Studio M4 Max | Desktop.bg - Мощни PC Гейминг конфигурации, Персонални компютри на изплащане за игри и работа
Welcome to authentik! - authentik
Welcome to authentik! - authentik
Завеждане на щета онлайн | Euroins
Завеждане на щета онлайн | Euroins
Close tab
Screenpipe — Archive
Screenpipe — Archive
Reminders
Reminders
Photos - Google Photos
Photos - Google Photos...
|
NULL
|
NULL
|
NULL
|
NULL
|
|
68886
|
2470
|
3
|
2026-05-22T07:30:24.598284+00:00
|
/Users/lukas/.screenpipe/data/data/2026-05-22/1779 /Users/lukas/.screenpipe/data/data/2026-05-22/1779435024598_m2.jpg...
|
Firefox
|
💬1 - Apple MacBook Pro 14" Space Black M5 Max 💬1 - Apple MacBook Pro 14" Space Black M5 Max | Laptop.bg - Технологията с теб — Personal...
|
1
|
laptop.bg/laptops-apple-MacBook_Pro_14_M5_2026-mgd laptop.bg/laptops-apple-MacBook_Pro_14_M5_2026-mgdu4zea_upgrade_z1mn_40C_GPU?_gl=1*1wmguf8*_up*MQ..*_gs*MQ..&gclid=CjwKCAjwt7XQBhBkEiwAtStppxNtQPdXU_nSeNetoGxoSZgiAHxVJRCTD-II47qdmwOFM-PheGd59hoCejcQAvD_BwE&conf[]=113420...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Nvidia's RTX HDR feature is game-changing (lit Nvidia's RTX HDR feature is game-changing (literally) - [EMAIL] - Gmail
Nvidia's RTX HDR feature is game-changing (literally) - [EMAIL] - Gmail
Ambulatory sheet - Paperless-ngx
Ambulatory sheet - Paperless-ngx
💬1 - Apple MacBook Pro 14" Space Black M5 Max | Laptop.bg - Технологията с теб
💬1 - Apple MacBook Pro 14" Space Black M5 Max | Laptop.bg - Технологията с теб
Close tab
Apple Mac Studio M4 Max | Desktop.bg - Мощни PC Гейминг конфигурации, Персонални компютри на изплащане за игри и работа
Apple Mac Studio M4 Max | Desktop.bg - Мощни PC Гейминг конфигурации, Персонални компютри на изплащане за игри и работа
Welcome to authentik! - authentik
Welcome to authentik! - authentik
Завеждане на щета онлайн | Euroins
Завеждане на щета онлайн | Euroins
Screenpipe — Archive
Screenpipe — Archive
Reminders
Reminders
Photos - Google Photos
Photos - Google Photos
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
New Tab
New Tab
Nginx Proxy Manager
Nginx Proxy Manager
Ollama API Setup 💻 • Open WebUI
Ollama API Setup 💻 • Open WebUI
Location Logger
Location Logger
Sign in – Google accounts
Sign in – Google accounts
New Tab
New Tab
API Keys | Claude Platform
API Keys | Claude Platform
Notion
Notion
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden [1]
Вземи нов лаптоп още по-изгодно! 0% лихва за 10 месеца
Преоценени продукти
Преоценени продукти
Доставка
Доставка
Плащане
Плащане
Условия за сервизно обслужване
Условия за сервизно обслужване
Контакти
Контакти
За нас
За нас
02 490 1111
02 490 1111
Лаптопи от laptop.bg
Лаптопи от laptop.bg
Продукти
Продукти
ТЪРСЕНЕ
ТЪРСЕНЕ
ТЪРСИ
Моят профил
Моят профил
Начало
Начало
Всички Лаптопи
Всички
Лаптопи
Всички лаптопи Apple
Всички лаптопи
Apple
Всички лаптопи MacBook Pro 14 M5 (2026)
Всички лаптопи
MacBook Pro 14 M5 (2026)
Apple MacBook Pro 14" Space Black M5 Max
Apple MacBook Pro 14" Space Black M5 Max
Apple MacBook Pro 14" Space Black M5 Max
Вземи на лизинг за 190.49 € / 372.56 лв. за 48 месеца.
Вижте повече
Вижте повече
Кратко описание
Кратко описание
Снимки
Снимки
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
НАПРЕД
НАПРЕД
Изпращане
Изпращане
Публикуване
Публикуване
СРОК НА ДОСТАВКА 30 ДНИ
Цена:
6178
€
12083
.16
лв.
ВИЕ ПОЛУЧАВАТЕ
ВИЕ ПОЛУЧАВАТЕ
Apple MacBook Pro 14" Space Black M5 Max
4859
€
9503
.41
лв.
128GB (131072MB) +1319 €/+2579.75 лв.
1319
€
2579
.75
лв.
Безплатна доставка до офис Спиди
Безплатна доставка до офис Спиди
за поръчки над 25 € / 48.90 лв.
Количество:
НАМАЛЯВАНЕ
НАМАЛЯВАНЕ
1
УВЕЛИЧАВАНЕ
УВЕЛИЧАВАНЕ
ДОБАВИ В КОЛИЧКАТА
ДОБАВИ В КОЛИЧКАТА
Добави за сравнение
Добави
за сравнение
Вземи на лизинг за 190.49 € / 372.56 лв. за 48 месеца виж лизинговите схеми
Вземи на лизинг за
190.49 € / 372.56 лв. за 48 месеца
виж лизинговите схеми
ОСНОВНИ ХАРАКТЕРИСТИКИ
ОСНОВНИ ХАРАКТЕРИСТИКИ
С възможност за ъпгрейд
Apple M5 Max (18-ядрен)
Apple M5 Max (40-ядрен графичен процесор)
от 48GB до 128GB
от 2TB до 8TB SSD
пълни характеристики
пълни характеристики
ИЗБОР НА ЦВЯТ: ЧЕРЕН
ИЗБОР НА ЦВЯТ:
ЧЕРЕН
Сребрист
ИЗБОР НА РАМ: 48GB RAM
ИЗБОР НА РАМ:
48GB RAM
48GB RAM
4859€
64GB RAM 5131€
64GB RAM
5131€
Продукт с предварителна поръчка
Продукт с предварителна поръчка
Този продукт може да бъде доставен по поръчка на клиента. Срокът за доставка е 30 дни.
Подходящи свързани продукти
Подходящи свързани продукти
Мишки
Мишки
Клавиатури
Клавиатури
Подложки
Подложки
Външни SSD
Външни SSD
Чанти за Лаптопи
Чанти за Лаптопи
Монитори
Монитори
Падове
Падове
НАЙ-ПРОДАВАН
Apple Magic Mouse (USB‑C) - Blac...
Apple Magic Mouse (USB‑C) - Blac...
Apple Magic Mouse (USB‑C) - Blac...
Цена:
119
€
232
.74
лв.
ДОБАВИ
ДОБАВИ
Apple Magic Mouse (USB‑C) - Whit...
Apple Magic Mouse (USB‑C) - Whit...
Apple Magic Mouse (USB‑C) - Whit...
Цена:
77
€
150
.60
лв.
ДОБАВИ
ДОБАВИ
Apple Magic Trackpad (USB‑C) - W...
Apple Magic Trackpad (USB‑C) - W...
Apple Magic Trackpad (USB‑C) - W...
Цена:
139
€
271
.86
лв.
ДОБАВИ
ДОБАВИ
Apple Magic Trackpad (USB‑C) - B...
Apple Magic Trackpad (USB‑C) - B...
Apple Magic Trackpad (USB‑C) - B...
Цена:
169
€
330
.54
лв.
ДОБАВИ
ДОБАВИ
Logitech Lift for Mac Vertical E...
Logitech Lift for Mac Vertical E...
Logitech Lift for Mac Vertical E...
Цена:
79
€
154
.51
лв.
Виж всички продукти с марка Logitech
Виж всички продукти с марка Logitech
ДОБАВИ
ДОБАВИ
ПРОМО
Logitech MX Anywhere 3S за Mac, ...
Logitech MX Anywhere 3S за Mac, ...
Logitech MX Anywhere 3S за Mac, ...
Цена:
ПЦД:
99€
(-30%)
69
€
134
.95
лв.
Виж всички продукти с марка Logitech
Виж всички продукти с марка Logitech
ДОБАВИ
ДОБАВИ
НАПРЕД
НАПРЕД
Кратко описание
Кратко описание
Описание
Описание
Технически характеристики
Технически характеристики
ПОКАЖИ ОЩЕ
Характеристики
Характеристики
ВИД ЛАПТОП
Ultrabook
Ultrabook
ПОДХОДЯЩ ЗА
За професионалисти
За професионалисти
ЦВЯТ
Черен
Черен
СЕРИЯ
MacBook Pro 14 M5 (2026)
MacBook Pro 14 M5 (2026)
ПРОЦЕСОР
Apple M5 Max (18-ядрен)
ОПЕРАТИВНА ПАМЕТ
48GB (1x 49152MB) -1319€/ -2579.75лв.
48GB (1x 49152MB)
-1319
€
/
-2579
.75
лв.
64GB (65536MB) -1050 €/-2053.63 лв.
64GB (65536MB)
-1050
€
/
-2053
.63
лв.
128GB (131072MB) 0 €/0.00 лв.
128GB (131072MB)
0
€
/
0
.00
лв.
ВИДЕО КАРТА
Apple M5 Max (40-ядрен графичен процесор)
ПАМЕТ
2TB SSD +0€/ +0лв.
2TB SSD
+0
€
/
+0
лв.
4TB SSD +789 €/+1543.16 лв.
4TB SSD
+789
€
/
+1543
.16
лв.
8TB SSD +2369 €/+4633.38 лв.
8TB SSD
+2369
€
/
+4633
.38
лв.
ЕКРАН
14.2-инчов (36.07 см.) - 3024x1964, 120Hz Liquid Retina XDR +0€/ +0лв.
14.2-инчов (36.07 см.) - 3024x1964, 120Hz Liquid Retina XDR
+0
€
/
+0
лв.
Nano-texture display +199 €/+389.21 лв.
Nano-texture display
+199
€
/
+389
.21
лв.
ОПТИЧНО УСТРОЙСТВО
Без оптично устройство
USB TYPE-C
3x Thunderbolt 5 (USB 4)
HDMI
HDMI
ДОПЪЛНИТЕЛНИ ФУНКЦИИ
MagSafe 3 порт
КЛАВИАТУРА
Без кирилизация
СВЪРЗАНОСТ
Wi-Fi 7 802.11be, Bluetooth 6
БАТЕРИЯ
До 13 часа безжична работа в мрежата (Без Power Adapter) +0€/ +0лв.
До 13 часа безжична работа в мрежата (Без Power Adapter)
+0
€
/
+0
лв.
Apple 96W USB‑C Power Adapter +95 €/+185.80 лв.
Apple 96W USB‑C Power Adapter
+95
€
/
+185
.80
лв....
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Nvidia's RTX HDR feature is game-changing (literally) - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.5,"top":0.0518755,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nvidia's RTX HDR feature is game-changing (literally) - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.51329786,"top":0.06304868,"width":0.15292554,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Ambulatory sheet - Paperless-ngx","depth":4,"bounds":{"left":0.5,"top":0.08459697,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ambulatory sheet - Paperless-ngx","depth":5,"bounds":{"left":0.51329786,"top":0.09577015,"width":0.059507977,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"💬1 - Apple MacBook Pro 14\" Space Black M5 Max | Laptop.bg - Технологията с теб","depth":4,"bounds":{"left":0.5,"top":0.11731844,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"💬1 - Apple MacBook Pro 14\" Space Black M5 Max | Laptop.bg - Технологията с теб","depth":5,"bounds":{"left":0.51329786,"top":0.12849163,"width":0.14727394,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.55651593,"top":0.1245012,"width":0.007978723,"height":0.01915403},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Apple Mac Studio M4 Max | Desktop.bg - Мощни PC Гейминг конфигурации, Персонални компютри на изплащане за игри и работа","depth":4,"bounds":{"left":0.5,"top":0.15003991,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Apple Mac Studio M4 Max | Desktop.bg - Мощни PC Гейминг конфигурации, Персонални компютри на изплащане за игри и работа","depth":5,"bounds":{"left":0.51329786,"top":0.16121309,"width":0.2365359,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Welcome to authentik! - authentik","depth":4,"bounds":{"left":0.5,"top":0.18276137,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome to authentik! - authentik","depth":5,"bounds":{"left":0.51329786,"top":0.19393456,"width":0.05900931,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Завеждане на щета онлайн | Euroins","depth":4,"bounds":{"left":0.5,"top":0.21548285,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Завеждане на щета онлайн | Euroins","depth":5,"bounds":{"left":0.51329786,"top":0.22665602,"width":0.0653258,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.5,"top":0.2482043,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.51329786,"top":0.25937748,"width":0.037898935,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Reminders","depth":4,"bounds":{"left":0.5,"top":0.28092578,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Reminders","depth":5,"bounds":{"left":0.51329786,"top":0.29209897,"width":0.018284574,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Photos - Google Photos","depth":4,"bounds":{"left":0.5,"top":0.31364724,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Photos - Google Photos","depth":5,"bounds":{"left":0.51329786,"top":0.32482043,"width":0.04138963,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.5,"top":0.3463687,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"DXP4800PLUS-B5F8","depth":5,"bounds":{"left":0.51329786,"top":0.3575419,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.5,"top":0.3790902,"width":0.06881649,"height":0.032721467},"on_screen":true,"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.51329786,"top":0.39026338,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nginx Proxy Manager","depth":4,"bounds":{"left":0.5,"top":0.41181165,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nginx Proxy Manager","depth":5,"bounds":{"left":0.51329786,"top":0.42298484,"width":0.036901597,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Ollama API Setup 💻 • Open WebUI","depth":4,"bounds":{"left":0.5,"top":0.4445331,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ollama API Setup 💻 • Open WebUI","depth":5,"bounds":{"left":0.51329786,"top":0.4557063,"width":0.060837764,"height":0.011572227},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Location Logger","depth":4,"bounds":{"left":0.5,"top":0.4772546,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Location Logger","depth":5,"bounds":{"left":0.51329786,"top":0.4884278,"width":0.028091755,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Sign in – Google accounts","depth":4,"bounds":{"left":0.5,"top":0.509976,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sign in – Google accounts","depth":5,"bounds":{"left":0.51329786,"top":0.5211492,"width":0.04537899,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.5,"top":0.54269755,"width":0.06881649,"height":0.032721467},"on_screen":true,"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.51329786,"top":0.55387074,"width":0.014960106,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"API Keys | Claude Platform","depth":4,"bounds":{"left":0.5,"top":0.575419,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API Keys | Claude Platform","depth":5,"bounds":{"left":0.51329786,"top":0.5865922,"width":0.046043884,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Notion","depth":4,"bounds":{"left":0.5,"top":0.60814047,"width":0.06881649,"height":0.032721467},"on_screen":true,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Notion","depth":5,"bounds":{"left":0.51329786,"top":0.61931366,"width":0.011469414,"height":0.010774142},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.5028258,"top":0.6424581,"width":0.06333112,"height":0.025538707},"on_screen":true,"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.5028258,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.51379657,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.5249335,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"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.53607047,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden [1]","depth":6,"bounds":{"left":0.5472075,"top":0.97007185,"width":0.010638298,"height":0.025538707},"on_screen":true,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Вземи нов лаптоп още по-изгодно! 0% лихва за 10 месеца","depth":7,"bounds":{"left":0.5688165,"top":0.0518755,"width":0.43118352,"height":0.021548284},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Преоценени продукти","depth":9,"bounds":{"left":0.75332445,"top":0.07342378,"width":0.04720745,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Преоценени продукти","depth":10,"bounds":{"left":0.75664896,"top":0.07821229,"width":0.04055851,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Доставка","depth":9,"bounds":{"left":0.80086434,"top":0.07342378,"width":0.023769947,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Доставка","depth":10,"bounds":{"left":0.80418885,"top":0.07821229,"width":0.017121011,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Плащане","depth":9,"bounds":{"left":0.8249667,"top":0.07342378,"width":0.023936171,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Плащане","depth":10,"bounds":{"left":0.82829124,"top":0.07821229,"width":0.017287234,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Условия за сервизно обслужване","depth":9,"bounds":{"left":0.84923536,"top":0.07342378,"width":0.06865027,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Условия за сервизно обслужване","depth":10,"bounds":{"left":0.85255986,"top":0.07821229,"width":0.06200133,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Контакти","depth":9,"bounds":{"left":0.9182181,"top":0.07342378,"width":0.023271276,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Контакти","depth":10,"bounds":{"left":0.9215425,"top":0.07821229,"width":0.01662234,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"За нас","depth":9,"bounds":{"left":0.9418218,"top":0.07342378,"width":0.018783245,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"За нас","depth":10,"bounds":{"left":0.94514626,"top":0.07821229,"width":0.012134309,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"02 490 1111","depth":10,"bounds":{"left":0.9099069,"top":0.1300878,"width":0.05069814,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":11,"bounds":{"left":0.9099069,"top":0.13647246,"width":0.0056515955,"height":0.017956903},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"02 490 1111","depth":11,"bounds":{"left":0.91738695,"top":0.1300878,"width":0.043218084,"height":0.030726258},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Лаптопи от laptop.bg","depth":8,"bounds":{"left":0.60821146,"top":0.13407822,"width":0.35239363,"height":0.05027933},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXLink","text":"Лаптопи от laptop.bg","depth":9,"bounds":{"left":0.60821146,"top":0.13248204,"width":0.0631649,"height":0.023942538},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Продукти","depth":10,"bounds":{"left":0.6015625,"top":0.18435754,"width":0.049534574,"height":0.047885075},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Продукти","depth":12,"bounds":{"left":0.6072141,"top":0.19752593,"width":0.030585106,"height":0.024740623},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.6427859,"top":0.20311253,"width":0.0023271276,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"ТЪРСЕНЕ","depth":10,"bounds":{"left":0.70794547,"top":0.19114126,"width":0.19198804,"height":0.03431764},"on_screen":true,"help_text":"","placeholder":"търси смарт часовници и гривни","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":11,"bounds":{"left":0.70794547,"top":0.2019154,"width":0.005485372,"height":0.014764565},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ТЪРСЕНЕ","depth":11,"bounds":{"left":0.70794547,"top":0.22186752,"width":0.019281914,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"ТЪРСИ","depth":10,"bounds":{"left":0.70761305,"top":0.22466081,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Моят профил","depth":11,"bounds":{"left":0.9065825,"top":0.18435754,"width":0.06067154,"height":0.047885075},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Моят профил","depth":12,"bounds":{"left":0.9132314,"top":0.19752593,"width":0.042719416,"height":0.024740623},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.95894283,"top":0.20311253,"width":0.0023271276,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Начало","depth":12,"bounds":{"left":0.60821146,"top":0.27693537,"width":0.017453458,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Начало","depth":13,"bounds":{"left":0.60821146,"top":0.27693537,"width":0.016289894,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.62898934,"top":0.27893057,"width":0.0014960107,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Всички Лаптопи","depth":12,"bounds":{"left":0.63380986,"top":0.27693537,"width":0.019281914,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Всички","depth":14,"bounds":{"left":0.6334774,"top":0.27613726,"width":0.016456118,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Лаптопи","depth":13,"bounds":{"left":0.63380986,"top":0.27693537,"width":0.017952127,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.65641624,"top":0.27893057,"width":0.0013297872,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Всички лаптопи Apple","depth":12,"bounds":{"left":0.66107047,"top":0.27693537,"width":0.013297873,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Всички лаптопи","depth":14,"bounds":{"left":0.66073805,"top":0.27613726,"width":0.018949468,"height":0.02793296},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apple","depth":13,"bounds":{"left":0.66107047,"top":0.27693537,"width":0.011968086,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.67769283,"top":0.27893057,"width":0.0013297872,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Всички лаптопи MacBook Pro 14 M5 (2026)","depth":12,"bounds":{"left":0.68234706,"top":0.27693537,"width":0.05817819,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Всички лаптопи","depth":14,"bounds":{"left":0.68201464,"top":0.27613726,"width":0.018949468,"height":0.02793296},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MacBook Pro 14 M5 (2026)","depth":13,"bounds":{"left":0.68234706,"top":0.27693537,"width":0.056848403,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.74384975,"top":0.27893057,"width":0.0014960107,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apple MacBook Pro 14\" Space Black M5 Max","depth":12,"bounds":{"left":0.7486702,"top":0.27693537,"width":0.09424867,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Apple MacBook Pro 14\" Space Black M5 Max","depth":10,"bounds":{"left":0.60821146,"top":0.30367118,"width":0.3075133,"height":0.02793296},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apple MacBook Pro 14\" Space Black M5 Max","depth":11,"bounds":{"left":0.60821146,"top":0.29608938,"width":0.2357048,"height":0.04309657},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.61269945,"top":0.3499601,"width":0.0048204786,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Вземи на лизинг за 190.49 € / 372.56 лв. за 48 месеца.","depth":12,"bounds":{"left":0.6208444,"top":0.35115722,"width":0.119182184,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Вижте повече","depth":12,"bounds":{"left":0.7400266,"top":0.35115722,"width":0.029753989,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Вижте повече","depth":13,"bounds":{"left":0.7400266,"top":0.35115722,"width":0.029753989,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Кратко описание","depth":10,"bounds":{"left":0.607879,"top":0.38826814,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Кратко описание","depth":11,"bounds":{"left":0.607879,"top":0.38627294,"width":0.036402926,"height":0.057861134},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Снимки","depth":11,"bounds":{"left":0.607879,"top":0.38826814,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Снимки","depth":12,"bounds":{"left":0.607879,"top":0.3858739,"width":0.020944148,"height":0.022346368},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Лаптопи Apple MacBook Pro 14\" Space Black M5 Max","depth":12,"bounds":{"left":0.60821146,"top":0.38906625,"width":0.0930851,"height":0.16759777},"on_screen":true,"help_text":"Разгледай снимката в голям размер","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Лаптопи Apple MacBook Pro 14\" Space Black M5 Max","depth":14,"bounds":{"left":0.60821146,"top":0.5766161,"width":0.03324468,"height":0.06384677},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Лаптопи Apple MacBook Pro 14\" Space Black M5 Max","depth":14,"bounds":{"left":0.648105,"top":0.5766161,"width":0.03324468,"height":0.06384677},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Лаптопи Apple MacBook Pro 14\" Space Black M5 Max","depth":14,"bounds":{"left":0.68799865,"top":0.5766161,"width":0.03324468,"height":0.06384677},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Лаптопи Apple MacBook Pro 14\" Space Black M5 Max","depth":14,"bounds":{"left":0.7278923,"top":0.5766161,"width":0.03324468,"height":0.06384677},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Лаптопи Apple MacBook Pro 14\" Space Black M5 Max","depth":14,"bounds":{"left":0.7677859,"top":0.5766161,"width":0.03324468,"height":0.06384677},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Лаптопи Apple MacBook Pro 14\" Space Black M5 Max","depth":14,"bounds":{"left":0.80767953,"top":0.5766161,"width":0.03324468,"height":0.06384677},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Лаптопи Apple MacBook Pro 14\" Space Black M5 Max","depth":14,"bounds":{"left":0.84757316,"top":0.5766161,"width":0.03324468,"height":0.06384677},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Лаптопи Apple MacBook Pro 14\" Space Black M5 Max","depth":14,"bounds":{"left":0.8874667,"top":0.5766161,"width":0.03324468,"height":0.06384677},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Лаптопи Apple MacBook Pro 14\" Space Black M5 Max","depth":14,"bounds":{"left":0.92736036,"top":0.5766161,"width":0.03324468,"height":0.06384677},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":" НАПРЕД","depth":12,"bounds":{"left":0.68799865,"top":0.5766161,"width":0.013297873,"height":0.06384677},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.6928192,"top":0.5961692,"width":0.003656915,"height":0.02434158},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"НАПРЕД","depth":13,"bounds":{"left":1.0,"top":0.5989625,"width":-0.020445466,"height":0.018754989},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Изпращане","depth":13,"bounds":{"left":0.61884975,"top":0.6644054,"width":0.028424202,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Изпращане","depth":14,"bounds":{"left":0.6241689,"top":0.6671987,"width":0.02144282,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Публикуване","depth":17,"bounds":{"left":0.65142953,"top":0.6644054,"width":0.039228722,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Публикуване","depth":19,"bounds":{"left":0.66107047,"top":0.6664006,"width":0.025598405,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"СРОК НА ДОСТАВКА 30 ДНИ","depth":13,"bounds":{"left":0.8508976,"top":0.39505187,"width":0.06565824,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":12,"bounds":{"left":0.9215425,"top":0.3926576,"width":0.004986702,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":13,"bounds":{"left":0.921875,"top":0.3942538,"width":0.0043218085,"height":0.012370312},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Цена:","depth":13,"bounds":{"left":0.9037567,"top":0.43934557,"width":0.013464096,"height":0.01396648},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6178","depth":13,"bounds":{"left":0.8763298,"top":0.42857143,"width":0.039893616,"height":0.061053474},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":13,"bounds":{"left":0.920379,"top":0.42857143,"width":0.011469414,"height":0.061053474},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12083","depth":13,"bounds":{"left":0.857879,"top":0.46847567,"width":0.049867023,"height":0.061053474},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".16","depth":14,"bounds":{"left":0.907746,"top":0.47047088,"width":0.01462766,"height":0.037110932},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":13,"bounds":{"left":0.9265292,"top":0.46847567,"width":0.023769947,"height":0.061053474},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"ВИЕ ПОЛУЧАВАТЕ","depth":12,"bounds":{"left":0.85488695,"top":0.55905825,"width":0.09840426,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ВИЕ ПОЛУЧАВАТЕ","depth":13,"bounds":{"left":0.88480717,"top":0.5594573,"width":0.03856383,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apple MacBook Pro 14\" Space Black M5 Max","depth":15,"bounds":{"left":0.85422206,"top":0.59297687,"width":0.09424867,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4859","depth":14,"bounds":{"left":0.9361702,"top":0.6177175,"width":0.012799202,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":14,"bounds":{"left":0.9502992,"top":0.6177175,"width":0.003656915,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9503","depth":14,"bounds":{"left":0.9275266,"top":0.63048685,"width":0.012799202,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".41","depth":15,"bounds":{"left":0.9403258,"top":0.6312849,"width":0.004654255,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":14,"bounds":{"left":0.94630986,"top":0.63048685,"width":0.0076462766,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"","depth":15,"bounds":{"left":0.85422206,"top":0.64844376,"width":0.003656915,"height":0.011971269},"on_screen":true,"help_text":"Изтрий","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"128GB (131072MB) +1319 €/+2579.75 лв.","depth":15,"bounds":{"left":0.857879,"top":0.64684755,"width":0.08959442,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1319","depth":14,"bounds":{"left":0.9361702,"top":0.6715882,"width":0.012799202,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":14,"bounds":{"left":0.9502992,"top":0.6715882,"width":0.003656915,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2579","depth":14,"bounds":{"left":0.9275266,"top":0.6843575,"width":0.012799202,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".75","depth":15,"bounds":{"left":0.9403258,"top":0.68515563,"width":0.004654255,"height":0.011971269},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":14,"bounds":{"left":0.94630986,"top":0.6843575,"width":0.0076462766,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":11,"bounds":{"left":0.85422206,"top":0.72505987,"width":0.009474734,"height":0.026735835},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Безплатна доставка до офис Спиди","depth":11,"bounds":{"left":0.866855,"top":0.7106943,"width":0.08643617,"height":0.0311253},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Безплатна доставка до офис Спиди","depth":12,"bounds":{"left":0.866855,"top":0.70830005,"width":0.07263963,"height":0.035514764},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"за поръчки над 25 € / 48.90 лв.","depth":12,"bounds":{"left":0.866855,"top":0.7434158,"width":0.05701463,"height":0.011173184},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Количество:","depth":13,"bounds":{"left":0.85422206,"top":0.7270551,"width":0.026263298,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"НАМАЛЯВАНЕ","depth":12,"bounds":{"left":0.8828125,"top":0.7254589,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.88331115,"top":0.7270551,"width":0.0056515955,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"НАМАЛЯВАНЕ","depth":14,"bounds":{"left":0.8828125,"top":0.7370311,"width":0.043716755,"height":0.024740623},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":13,"bounds":{"left":0.89162236,"top":0.7274541,"width":0.0026595744,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"УВЕЛИЧАВАНЕ","depth":12,"bounds":{"left":0.89644283,"top":0.7254589,"width":0.0066489363,"height":0.015961692},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.8969415,"top":0.7270551,"width":0.0056515955,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"УВЕЛИЧАВАНЕ","depth":14,"bounds":{"left":0.89644283,"top":0.7370311,"width":0.045212764,"height":0.024740623},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":" ДОБАВИ В КОЛИЧКАТА","depth":12,"bounds":{"left":0.85422206,"top":0.75418997,"width":0.099734046,"height":0.043894652},"on_screen":true,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.8628657,"top":0.7681564,"width":0.005984043,"height":0.01556265},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДОБАВИ В КОЛИЧКАТА","depth":13,"bounds":{"left":0.8703458,"top":0.7649641,"width":0.07347074,"height":0.024740623},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Добави за сравнение","depth":12,"bounds":{"left":0.8472407,"top":0.82122904,"width":0.0003324468,"height":0.0007980846},"on_screen":true,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Добави","depth":13,"bounds":{"left":0.8552194,"top":0.82402235,"width":0.015957447,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"за сравнение","depth":13,"bounds":{"left":0.87117684,"top":0.82402235,"width":0.03025266,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Вземи на лизинг за 190.49 € / 372.56 лв. за 48 месеца виж лизинговите схеми","depth":11,"bounds":{"left":0.84757316,"top":0.84836394,"width":0.11303192,"height":0.08339984},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Вземи на лизинг за","depth":13,"bounds":{"left":0.8874667,"top":0.8611333,"width":0.041722074,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"190.49 € / 372.56 лв. за 48 месеца","depth":14,"bounds":{"left":0.8874667,"top":0.8762969,"width":0.05718085,"height":0.027533919},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"виж лизинговите схеми","depth":13,"bounds":{"left":0.8874667,"top":0.90582603,"width":0.05036569,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"bounds":{"left":0.9388298,"top":0.9086193,"width":0.0039893617,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"ОСНОВНИ ХАРАКТЕРИСТИКИ","depth":10,"bounds":{"left":0.70794547,"top":0.39185953,"width":0.13297872,"height":0.0207502},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ОСНОВНИ ХАРАКТЕРИСТИКИ","depth":11,"bounds":{"left":0.70794547,"top":0.39584997,"width":0.06881649,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.70794547,"top":0.424581,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"С възможност за ъпгрейд","depth":12,"bounds":{"left":0.7152593,"top":0.4233839,"width":0.041722074,"height":0.03431764},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.70794547,"top":0.47007182,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apple M5 Max (18-ядрен)","depth":12,"bounds":{"left":0.7152593,"top":0.4688747,"width":0.04488032,"height":0.033918597},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.70794547,"top":0.5151636,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apple M5 Max (40-ядрен графичен процесор)","depth":12,"bounds":{"left":0.7152593,"top":0.5139665,"width":0.04488032,"height":0.05347167},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.70794547,"top":0.5798085,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"от 48GB до 128GB","depth":12,"bounds":{"left":0.7152593,"top":0.5786113,"width":0.045877658,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":12,"bounds":{"left":0.70794547,"top":0.60614526,"width":0.005319149,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"от 2TB до 8TB SSD","depth":12,"bounds":{"left":0.7152593,"top":0.6049481,"width":0.047706116,"height":0.014365523},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"пълни характеристики","depth":10,"bounds":{"left":0.70794547,"top":0.63248205,"width":0.0631649,"height":0.015163607},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"пълни характеристики","depth":11,"bounds":{"left":0.70794547,"top":0.63367915,"width":0.048204787,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":11,"bounds":{"left":0.75731385,"top":0.6360734,"width":0.0039893617,"height":0.009976057},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"ИЗБОР НА ЦВЯТ: ЧЕРЕН","depth":11,"bounds":{"left":0.70794547,"top":0.67478055,"width":0.13630319,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ИЗБОР НА ЦВЯТ:","depth":12,"bounds":{"left":0.70794547,"top":0.67517954,"width":0.041223403,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ЧЕРЕН","depth":13,"bounds":{"left":0.7491689,"top":0.67517954,"width":0.015791224,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"bounds":{"left":0.7421875,"top":0.72027135,"width":0.004488032,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Сребрист","depth":13,"bounds":{"left":0.75166225,"top":0.69473267,"width":0.03324468,"height":0.06384677},"on_screen":true,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"ИЗБОР НА РАМ: 48GB RAM","depth":11,"bounds":{"left":0.70794547,"top":0.7897047,"width":0.13630319,"height":0.013567438},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ИЗБОР НА РАМ:","depth":12,"bounds":{"left":0.70794547,"top":0.79010373,"width":0.038397606,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"48GB RAM","depth":13,"bounds":{"left":0.7463431,"top":0.79010373,"width":0.023603724,"height":0.012769354},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"48GB RAM","depth":14,"bounds":{"left":0.71293217,"top":0.81803674,"width":0.025598405,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4859€","depth":14,"bounds":{"left":0.74950135,"top":0.81803674,"width":0.016289894,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":14,"bounds":{"left":0.7609708,"top":0.81923383,"width":0.004488032,"height":0.0131683955},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"64GB RAM 5131€","depth":13,"bounds":{"left":0.7741024,"top":0.8096568,"width":0.06299867,"height":0.032721467},"on_screen":true,"help_text":"64GB RAM","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"64GB RAM","depth":15,"bounds":{"left":0.7790891,"top":0.81803674,"width":0.025598405,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5131€","depth":15,"bounds":{"left":0.8156583,"top":0.81803674,"width":0.016456118,"height":0.019952115},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":9,"bounds":{"left":0.61452794,"top":0.9780527,"width":0.008643617,"height":0.021947324},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Продукт с предварителна поръчка","depth":9,"bounds":{"left":0.62948805,"top":0.971668,"width":0.32446808,"height":0.017557861},"on_screen":true,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Продукт с предварителна поръчка","depth":10,"bounds":{"left":0.62948805,"top":0.9724661,"width":0.09591091,"height":0.016360734},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Този продукт може да бъде доставен по поръчка на клиента. Срокът за доставка е 30 дни.","depth":10,"bounds":{"left":0.62948805,"top":0.9952115,"width":0.1966423,"height":0.004788518},"on_screen":true,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Подходящи свързани продукти","depth":9,"bounds":{"left":0.60821146,"top":1.0,"width":0.35239363,"height":-0.06664002},"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Подходящи свързани продукти","depth":10,"bounds":{"left":0.73537236,"top":1.0,"width":0.098071806,"height":-0.066241026},"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Мишки","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Мишки","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Клавиатури","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Клавиатури","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Подложки","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Подложки","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Външни SSD","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Външни SSD","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Чанти за Лаптопи","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Чанти за Лаптопи","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Монитори","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Монитори","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Падове","depth":13,"on_screen":false,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Падове","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"НАЙ-ПРОДАВАН","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Apple Magic Mouse (USB‑C) - Blac...","depth":13,"on_screen":false,"help_text":"Apple Magic Mouse (USB‑C) - Black Multi-Touch Surface","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Apple Magic Mouse (USB‑C) - Blac...","depth":14,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apple Magic Mouse (USB‑C) - Blac...","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Цена:","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"119","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"232","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".74","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":" ДОБАВИ","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДОБАВИ","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Apple Magic Mouse (USB‑C) - Whit...","depth":13,"on_screen":false,"help_text":"Apple Magic Mouse (USB‑C) - White Multi-Touch Surface","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Apple Magic Mouse (USB‑C) - Whit...","depth":14,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apple Magic Mouse (USB‑C) - Whit...","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Цена:","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"77","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"150","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".60","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":" ДОБАВИ","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДОБАВИ","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Apple Magic Trackpad (USB‑C) - W...","depth":13,"on_screen":false,"help_text":"Apple Magic Trackpad (USB‑C) - White","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Apple Magic Trackpad (USB‑C) - W...","depth":14,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apple Magic Trackpad (USB‑C) - W...","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Цена:","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"139","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"271","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".86","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":" ДОБАВИ","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДОБАВИ","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Apple Magic Trackpad (USB‑C) - B...","depth":13,"on_screen":false,"help_text":"Apple Magic Trackpad (USB‑C) - Black","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Apple Magic Trackpad (USB‑C) - B...","depth":14,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apple Magic Trackpad (USB‑C) - B...","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Цена:","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"169","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"330","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".54","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":" ДОБАВИ","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДОБАВИ","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Logitech Lift for Mac Vertical E...","depth":13,"on_screen":false,"help_text":"Logitech Lift for Mac Vertical Ergonomic Mouse, OFF-WHITE/PALE GREY","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Logitech Lift for Mac Vertical E...","depth":14,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Logitech Lift for Mac Vertical E...","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Цена:","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"79","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"154","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".51","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Виж всички продукти с марка Logitech","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Виж всички продукти с марка Logitech","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":" ДОБАВИ","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДОБАВИ","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ПРОМО","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Logitech MX Anywhere 3S за Mac, ...","depth":13,"on_screen":false,"help_text":"Logitech MX Anywhere 3S за Mac, Pale Grey","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Logitech MX Anywhere 3S за Mac, ...","depth":14,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Logitech MX Anywhere 3S за Mac, ...","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Цена:","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ПЦД:","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"99€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(-30%)","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"69","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"134","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".95","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Виж всички продукти с марка Logitech","depth":14,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Виж всички продукти с марка Logitech","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":" ДОБАВИ","depth":14,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДОБАВИ","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":" НАПРЕД","depth":11,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"НАПРЕД","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Кратко описание","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Кратко описание","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Описание","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Описание","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Технически характеристики","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Технически характеристики","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"ПОКАЖИ ОЩЕ","depth":11,"on_screen":false,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Характеристики","depth":9,"on_screen":false,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Характеристики","depth":10,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ВИД ЛАПТОП","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Ultrabook","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ultrabook","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ПОДХОДЯЩ ЗА","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"За професионалисти","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"За професионалисти","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ЦВЯТ","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Черен","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Черен","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"СЕРИЯ","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"MacBook Pro 14 M5 (2026)","depth":12,"on_screen":false,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"MacBook Pro 14 M5 (2026)","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ПРОЦЕСОР","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apple M5 Max (18-ядрен)","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ОПЕРАТИВНА ПАМЕТ","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"48GB (1x 49152MB) -1319€/ -2579.75лв. ","depth":12,"on_screen":false,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"48GB (1x 49152MB)","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-1319","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-2579","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".75","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"64GB (65536MB) -1050 €/-2053.63 лв. ","depth":12,"on_screen":false,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"64GB (65536MB)","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-1050","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"-2053","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".63","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"128GB (131072MB) 0 €/0.00 лв. ","depth":12,"on_screen":false,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"128GB (131072MB)","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".00","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ВИДЕО КАРТА","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Apple M5 Max (40-ядрен графичен процесор)","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ПАМЕТ","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"2TB SSD +0€/ +0лв. ","depth":12,"on_screen":false,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2TB SSD","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+0","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+0","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"4TB SSD +789 €/+1543.16 лв. ","depth":12,"on_screen":false,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"4TB SSD","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+789","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+1543","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".16","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"8TB SSD +2369 €/+4633.38 лв. ","depth":12,"on_screen":false,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"8TB SSD","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+2369","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+4633","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".38","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ЕКРАН","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"14.2-инчов (36.07 см.) - 3024x1964, 120Hz Liquid Retina XDR +0€/ +0лв. ","depth":12,"on_screen":false,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"14.2-инчов (36.07 см.) - 3024x1964, 120Hz Liquid Retina XDR","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+0","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+0","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Nano-texture display +199 €/+389.21 лв. ","depth":12,"on_screen":false,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nano-texture display","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+199","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+389","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".21","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ОПТИЧНО УСТРОЙСТВО","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Без оптично устройство","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"USB TYPE-C","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3x Thunderbolt 5 (USB 4)","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HDMI","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"HDMI","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ДОПЪЛНИТЕЛНИ ФУНКЦИИ","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MagSafe 3 порт","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"КЛАВИАТУРА","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Без кирилизация","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"СВЪРЗАНОСТ","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Wi-Fi 7 802.11be, Bluetooth 6","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"БАТЕРИЯ","depth":12,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"До 13 часа безжична работа в мрежата (Без Power Adapter) +0€/ +0лв. ","depth":12,"on_screen":false,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"До 13 часа безжична работа в мрежата (Без Power Adapter)","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+0","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+0","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":13,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Apple 96W USB‑C Power Adapter +95 €/+185.80 лв. ","depth":12,"on_screen":false,"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Apple 96W USB‑C Power Adapter","depth":14,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+95","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"€","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"+185","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":".80","depth":16,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"лв.","depth":15,"on_screen":false,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-7833449465724265539
|
-1345830043373202055
|
app_switch
|
accessibility
|
NULL
|
Nvidia's RTX HDR feature is game-changing (lit Nvidia's RTX HDR feature is game-changing (literally) - [EMAIL] - Gmail
Nvidia's RTX HDR feature is game-changing (literally) - [EMAIL] - Gmail
Ambulatory sheet - Paperless-ngx
Ambulatory sheet - Paperless-ngx
💬1 - Apple MacBook Pro 14" Space Black M5 Max | Laptop.bg - Технологията с теб
💬1 - Apple MacBook Pro 14" Space Black M5 Max | Laptop.bg - Технологията с теб
Close tab
Apple Mac Studio M4 Max | Desktop.bg - Мощни PC Гейминг конфигурации, Персонални компютри на изплащане за игри и работа
Apple Mac Studio M4 Max | Desktop.bg - Мощни PC Гейминг конфигурации, Персонални компютри на изплащане за игри и работа
Welcome to authentik! - authentik
Welcome to authentik! - authentik
Завеждане на щета онлайн | Euroins
Завеждане на щета онлайн | Euroins
Screenpipe — Archive
Screenpipe — Archive
Reminders
Reminders
Photos - Google Photos
Photos - Google Photos
DXP4800PLUS-B5F8
DXP4800PLUS-B5F8
New Tab
New Tab
Nginx Proxy Manager
Nginx Proxy Manager
Ollama API Setup 💻 • Open WebUI
Ollama API Setup 💻 • Open WebUI
Location Logger
Location Logger
Sign in – Google accounts
Sign in – Google accounts
New Tab
New Tab
API Keys | Claude Platform
API Keys | Claude Platform
Notion
Notion
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden [1]
Вземи нов лаптоп още по-изгодно! 0% лихва за 10 месеца
Преоценени продукти
Преоценени продукти
Доставка
Доставка
Плащане
Плащане
Условия за сервизно обслужване
Условия за сервизно обслужване
Контакти
Контакти
За нас
За нас
02 490 1111
02 490 1111
Лаптопи от laptop.bg
Лаптопи от laptop.bg
Продукти
Продукти
ТЪРСЕНЕ
ТЪРСЕНЕ
ТЪРСИ
Моят профил
Моят профил
Начало
Начало
Всички Лаптопи
Всички
Лаптопи
Всички лаптопи Apple
Всички лаптопи
Apple
Всички лаптопи MacBook Pro 14 M5 (2026)
Всички лаптопи
MacBook Pro 14 M5 (2026)
Apple MacBook Pro 14" Space Black M5 Max
Apple MacBook Pro 14" Space Black M5 Max
Apple MacBook Pro 14" Space Black M5 Max
Вземи на лизинг за 190.49 € / 372.56 лв. за 48 месеца.
Вижте повече
Вижте повече
Кратко описание
Кратко описание
Снимки
Снимки
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
Лаптопи Apple MacBook Pro 14" Space Black M5 Max
НАПРЕД
НАПРЕД
Изпращане
Изпращане
Публикуване
Публикуване
СРОК НА ДОСТАВКА 30 ДНИ
Цена:
6178
€
12083
.16
лв.
ВИЕ ПОЛУЧАВАТЕ
ВИЕ ПОЛУЧАВАТЕ
Apple MacBook Pro 14" Space Black M5 Max
4859
€
9503
.41
лв.
128GB (131072MB) +1319 €/+2579.75 лв.
1319
€
2579
.75
лв.
Безплатна доставка до офис Спиди
Безплатна доставка до офис Спиди
за поръчки над 25 € / 48.90 лв.
Количество:
НАМАЛЯВАНЕ
НАМАЛЯВАНЕ
1
УВЕЛИЧАВАНЕ
УВЕЛИЧАВАНЕ
ДОБАВИ В КОЛИЧКАТА
ДОБАВИ В КОЛИЧКАТА
Добави за сравнение
Добави
за сравнение
Вземи на лизинг за 190.49 € / 372.56 лв. за 48 месеца виж лизинговите схеми
Вземи на лизинг за
190.49 € / 372.56 лв. за 48 месеца
виж лизинговите схеми
ОСНОВНИ ХАРАКТЕРИСТИКИ
ОСНОВНИ ХАРАКТЕРИСТИКИ
С възможност за ъпгрейд
Apple M5 Max (18-ядрен)
Apple M5 Max (40-ядрен графичен процесор)
от 48GB до 128GB
от 2TB до 8TB SSD
пълни характеристики
пълни характеристики
ИЗБОР НА ЦВЯТ: ЧЕРЕН
ИЗБОР НА ЦВЯТ:
ЧЕРЕН
Сребрист
ИЗБОР НА РАМ: 48GB RAM
ИЗБОР НА РАМ:
48GB RAM
48GB RAM
4859€
64GB RAM 5131€
64GB RAM
5131€
Продукт с предварителна поръчка
Продукт с предварителна поръчка
Този продукт може да бъде доставен по поръчка на клиента. Срокът за доставка е 30 дни.
Подходящи свързани продукти
Подходящи свързани продукти
Мишки
Мишки
Клавиатури
Клавиатури
Подложки
Подложки
Външни SSD
Външни SSD
Чанти за Лаптопи
Чанти за Лаптопи
Монитори
Монитори
Падове
Падове
НАЙ-ПРОДАВАН
Apple Magic Mouse (USB‑C) - Blac...
Apple Magic Mouse (USB‑C) - Blac...
Apple Magic Mouse (USB‑C) - Blac...
Цена:
119
€
232
.74
лв.
ДОБАВИ
ДОБАВИ
Apple Magic Mouse (USB‑C) - Whit...
Apple Magic Mouse (USB‑C) - Whit...
Apple Magic Mouse (USB‑C) - Whit...
Цена:
77
€
150
.60
лв.
ДОБАВИ
ДОБАВИ
Apple Magic Trackpad (USB‑C) - W...
Apple Magic Trackpad (USB‑C) - W...
Apple Magic Trackpad (USB‑C) - W...
Цена:
139
€
271
.86
лв.
ДОБАВИ
ДОБАВИ
Apple Magic Trackpad (USB‑C) - B...
Apple Magic Trackpad (USB‑C) - B...
Apple Magic Trackpad (USB‑C) - B...
Цена:
169
€
330
.54
лв.
ДОБАВИ
ДОБАВИ
Logitech Lift for Mac Vertical E...
Logitech Lift for Mac Vertical E...
Logitech Lift for Mac Vertical E...
Цена:
79
€
154
.51
лв.
Виж всички продукти с марка Logitech
Виж всички продукти с марка Logitech
ДОБАВИ
ДОБАВИ
ПРОМО
Logitech MX Anywhere 3S за Mac, ...
Logitech MX Anywhere 3S за Mac, ...
Logitech MX Anywhere 3S за Mac, ...
Цена:
ПЦД:
99€
(-30%)
69
€
134
.95
лв.
Виж всички продукти с марка Logitech
Виж всички продукти с марка Logitech
ДОБАВИ
ДОБАВИ
НАПРЕД
НАПРЕД
Кратко описание
Кратко описание
Описание
Описание
Технически характеристики
Технически характеристики
ПОКАЖИ ОЩЕ
Характеристики
Характеристики
ВИД ЛАПТОП
Ultrabook
Ultrabook
ПОДХОДЯЩ ЗА
За професионалисти
За професионалисти
ЦВЯТ
Черен
Черен
СЕРИЯ
MacBook Pro 14 M5 (2026)
MacBook Pro 14 M5 (2026)
ПРОЦЕСОР
Apple M5 Max (18-ядрен)
ОПЕРАТИВНА ПАМЕТ
48GB (1x 49152MB) -1319€/ -2579.75лв.
48GB (1x 49152MB)
-1319
€
/
-2579
.75
лв.
64GB (65536MB) -1050 €/-2053.63 лв.
64GB (65536MB)
-1050
€
/
-2053
.63
лв.
128GB (131072MB) 0 €/0.00 лв.
128GB (131072MB)
0
€
/
0
.00
лв.
ВИДЕО КАРТА
Apple M5 Max (40-ядрен графичен процесор)
ПАМЕТ
2TB SSD +0€/ +0лв.
2TB SSD
+0
€
/
+0
лв.
4TB SSD +789 €/+1543.16 лв.
4TB SSD
+789
€
/
+1543
.16
лв.
8TB SSD +2369 €/+4633.38 лв.
8TB SSD
+2369
€
/
+4633
.38
лв.
ЕКРАН
14.2-инчов (36.07 см.) - 3024x1964, 120Hz Liquid Retina XDR +0€/ +0лв.
14.2-инчов (36.07 см.) - 3024x1964, 120Hz Liquid Retina XDR
+0
€
/
+0
лв.
Nano-texture display +199 €/+389.21 лв.
Nano-texture display
+199
€
/
+389
.21
лв.
ОПТИЧНО УСТРОЙСТВО
Без оптично устройство
USB TYPE-C
3x Thunderbolt 5 (USB 4)
HDMI
HDMI
ДОПЪЛНИТЕЛНИ ФУНКЦИИ
MagSafe 3 порт
КЛАВИАТУРА
Без кирилизация
СВЪРЗАНОСТ
Wi-Fi 7 802.11be, Bluetooth 6
БАТЕРИЯ
До 13 часа безжична работа в мрежата (Без Power Adapter) +0€/ +0лв.
До 13 часа безжична работа в мрежата (Без Power Adapter)
+0
€
/
+0
лв.
Apple 96W USB‑C Power Adapter +95 €/+185.80 лв.
Apple 96W USB‑C Power Adapter
+95
€
/
+185
.80
лв....
|
NULL
|
NULL
|
NULL
|
NULL
|