|
701
|
16
|
54
|
2026-04-11T12:07:46.613262+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909266613_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
"pipeline": {
"avg_db_latency_ms "pipeline": {
"avg_db_latency_ms": 333.52475247524757,
"avg_ocr_latency_ms": 0.0,
"capture_fps_actual": 0.22236224861039977,
"frame_drop_rate": 0.0,
"frames_captured": 101,
"frames_db_written": 101,
"frames_dropped": 0,
"ocr_cache_hit_rate": 0.0,
"ocr_queue_depth": 0,
"pipeline_stall_count": 0,
"time_to_first_frame_ms": 901.748,
"uptime_secs": 454.213791375,
"video_queue_depth": 0
},
"pool_stats": {
"read_pool_idle": 7,
"read_pool_size": 7,
"write_pool_idle": 2,
"write_pool_size": 2
},
"schedule_paused": false,
"status": "healthy",
"status_code": 200,
"verbose_instructions": null,
"version": "0.3.278",
"vision_db_write_stalled": false
}
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/data/screenpipe.db "
SELECT app_name, COUNT(*) as frames
FROM frames
WHERE date(timestamp) = date('now', '-1 day')
GROUP BY app_name
ORDER BY frames DESC;
"
Error: in prepare, no such table: frames
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/data/screenpipe.db ".tables"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/data/screenpipe.db ".schema"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/data/screenpipe.db "SELECT name FROM sqlite_master WHERE type='table';"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ # Find all sqlite/db files screenpipe created
find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
# Check what files exist at all
ls -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
# Maybe it's in Application Support
find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
quote>
quote> '
zsh: command not found: #
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
zsh: command not found: #
total 170384
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 .
drwx------+ 88 lukas staff 2.8K 11 Apr 14:53 ..
-rw-r--r-- 1 lukas staff 270B 9 Apr 20:27 config.json
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 data
-rw-r--r-- 1 lukas staff 67M 11 Apr 15:05 db.sqlite
-rw-r--r-- 1 lukas staff 32K 11 Apr 14:52 db.sqlite-shm
-rw-r--r-- 1 lukas staff 16M 11 Apr 15:05 db.sqlite-wal
drwxr-xr-x 8 lukas staff 256B 9 Apr 19:53 pipes
-rw-r--r-- 1 lukas staff 130K 9 Apr 21:27 screenpipe.2026-04-09.0.log
-rw-r--r-- 1 lukas staff 11K 11 Apr 15:05 screenpipe.2026-04-11.0.log
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"\"pipeline\": {\n \"avg_db_latency_ms\": 333.52475247524757,\n \"avg_ocr_latency_ms\": 0.0,\n \"capture_fps_actual\": 0.22236224861039977,\n \"frame_drop_rate\": 0.0,\n \"frames_captured\": 101,\n \"frames_db_written\": 101,\n \"frames_dropped\": 0,\n \"ocr_cache_hit_rate\": 0.0,\n \"ocr_queue_depth\": 0,\n \"pipeline_stall_count\": 0,\n \"time_to_first_frame_ms\": 901.748,\n \"uptime_secs\": 454.213791375,\n \"video_queue_depth\": 0\n },\n \"pool_stats\": {\n \"read_pool_idle\": 7,\n \"read_pool_size\": 7,\n \"write_pool_idle\": 2,\n \"write_pool_size\": 2\n },\n \"schedule_paused\": false,\n \"status\": \"healthy\",\n \"status_code\": 200,\n \"verbose_instructions\": null,\n \"version\": \"0.3.278\",\n \"vision_db_write_stalled\": false\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/data/screenpipe.db \"\nSELECT app_name, COUNT(*) as frames\nFROM frames\nWHERE date(timestamp) = date('now', '-1 day')\nGROUP BY app_name\nORDER BY frames DESC;\n\"\nError: in prepare, no such table: frames\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/data/screenpipe.db \".tables\" \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/data/screenpipe.db \".schema\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/data/screenpipe.db \"SELECT name FROM sqlite_master WHERE type='table';\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ # Find all sqlite/db files screenpipe created\nfind ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null\n\n# Check what files exist at all\nls -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\n\n# Maybe it's in Application Support\nfind ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nquote> \nquote> '\nzsh: command not found: #\n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nzsh: command not found: #\ntotal 170384\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 .\ndrwx------+ 88 lukas staff 2.8K 11 Apr 14:53 ..\n-rw-r--r-- 1 lukas staff 270B 9 Apr 20:27 config.json\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 data\n-rw-r--r-- 1 lukas staff 67M 11 Apr 15:05 db.sqlite\n-rw-r--r-- 1 lukas staff 32K 11 Apr 14:52 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 16M 11 Apr 15:05 db.sqlite-wal\ndrwxr-xr-x 8 lukas staff 256B 9 Apr 19:53 pipes\n-rw-r--r-- 1 lukas staff 130K 9 Apr 21:27 screenpipe.2026-04-09.0.log\n-rw-r--r-- 1 lukas staff 11K 11 Apr 15:05 screenpipe.2026-04-11.0.log\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":"\"pipeline\": {\n \"avg_db_latency_ms\": 333.52475247524757,\n \"avg_ocr_latency_ms\": 0.0,\n \"capture_fps_actual\": 0.22236224861039977,\n \"frame_drop_rate\": 0.0,\n \"frames_captured\": 101,\n \"frames_db_written\": 101,\n \"frames_dropped\": 0,\n \"ocr_cache_hit_rate\": 0.0,\n \"ocr_queue_depth\": 0,\n \"pipeline_stall_count\": 0,\n \"time_to_first_frame_ms\": 901.748,\n \"uptime_secs\": 454.213791375,\n \"video_queue_depth\": 0\n },\n \"pool_stats\": {\n \"read_pool_idle\": 7,\n \"read_pool_size\": 7,\n \"write_pool_idle\": 2,\n \"write_pool_size\": 2\n },\n \"schedule_paused\": false,\n \"status\": \"healthy\",\n \"status_code\": 200,\n \"verbose_instructions\": null,\n \"version\": \"0.3.278\",\n \"vision_db_write_stalled\": false\n}\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/data/screenpipe.db \"\nSELECT app_name, COUNT(*) as frames\nFROM frames\nWHERE date(timestamp) = date('now', '-1 day')\nGROUP BY app_name\nORDER BY frames DESC;\n\"\nError: in prepare, no such table: frames\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/data/screenpipe.db \".tables\" \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/data/screenpipe.db \".schema\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/data/screenpipe.db \"SELECT name FROM sqlite_master WHERE type='table';\"\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ # Find all sqlite/db files screenpipe created\nfind ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null\n\n# Check what files exist at all\nls -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\n\n# Maybe it's in Application Support\nfind ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nquote> \nquote> '\nzsh: command not found: #\n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nzsh: command not found: #\ntotal 170384\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 .\ndrwx------+ 88 lukas staff 2.8K 11 Apr 14:53 ..\n-rw-r--r-- 1 lukas staff 270B 9 Apr 20:27 config.json\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 data\n-rw-r--r-- 1 lukas staff 67M 11 Apr 15:05 db.sqlite\n-rw-r--r-- 1 lukas staff 32K 11 Apr 14:52 db.sqlite-shm\n-rw-r--r-- 1 lukas staff 16M 11 Apr 15:05 db.sqlite-wal\ndrwxr-xr-x 8 lukas staff 256B 9 Apr 19:53 pipes\n-rw-r--r-- 1 lukas staff 130K 9 Apr 21:27 screenpipe.2026-04-09.0.log\n-rw-r--r-- 1 lukas staff 11K 11 Apr 15:05 screenpipe.2026-04-11.0.log\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
-2949593395551601951
|
5648275250521958917
|
click
|
accessibility
|
NULL
|
"pipeline": {
"avg_db_latency_ms "pipeline": {
"avg_db_latency_ms": 333.52475247524757,
"avg_ocr_latency_ms": 0.0,
"capture_fps_actual": 0.22236224861039977,
"frame_drop_rate": 0.0,
"frames_captured": 101,
"frames_db_written": 101,
"frames_dropped": 0,
"ocr_cache_hit_rate": 0.0,
"ocr_queue_depth": 0,
"pipeline_stall_count": 0,
"time_to_first_frame_ms": 901.748,
"uptime_secs": 454.213791375,
"video_queue_depth": 0
},
"pool_stats": {
"read_pool_idle": 7,
"read_pool_size": 7,
"write_pool_idle": 2,
"write_pool_size": 2
},
"schedule_paused": false,
"status": "healthy",
"status_code": 200,
"verbose_instructions": null,
"version": "0.3.278",
"vision_db_write_stalled": false
}
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/data/screenpipe.db "
SELECT app_name, COUNT(*) as frames
FROM frames
WHERE date(timestamp) = date('now', '-1 day')
GROUP BY app_name
ORDER BY frames DESC;
"
Error: in prepare, no such table: frames
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/data/screenpipe.db ".tables"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/data/screenpipe.db ".schema"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/data/screenpipe.db "SELECT name FROM sqlite_master WHERE type='table';"
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ # Find all sqlite/db files screenpipe created
find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
# Check what files exist at all
ls -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
# Maybe it's in Application Support
find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
quote>
quote> '
zsh: command not found: #
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
zsh: command not found: #
total 170384
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 .
drwx------+ 88 lukas staff 2.8K 11 Apr 14:53 ..
-rw-r--r-- 1 lukas staff 270B 9 Apr 20:27 config.json
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 data
-rw-r--r-- 1 lukas staff 67M 11 Apr 15:05 db.sqlite
-rw-r--r-- 1 lukas staff 32K 11 Apr 14:52 db.sqlite-shm
-rw-r--r-- 1 lukas staff 16M 11 Apr 15:05 db.sqlite-wal
drwxr-xr-x 8 lukas staff 256B 9 Apr 19:53 pipes
-rw-r--r-- 1 lukas staff 130K 9 Apr 21:27 screenpipe.2026-04-09.0.log
-rw-r--r-- 1 lukas staff 11K 11 Apr 15:05 screenpipe.2026-04-11.0.log
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
|
702
|
16
|
55
|
2026-04-11T12:07:49.204809+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909269204_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\"","depth":4,"value":"drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\"","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
-798982562796399289
|
5508628469633640965
|
clipboard
|
accessibility
|
NULL
|
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
701
|
|
703
|
16
|
56
|
2026-04-11T12:07:50.015180+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909270015_m1.jpg...
|
iTerm2
|
sqlite3
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
sqlite3
Close Tab
⌥⌘1
sqlite3...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\"\n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":"drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\"\n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"sqlite3","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"sqlite3","depth":1,"bounds":{"left":0.4826389,"top":0.033333335,"width":0.034027778,"height":0.017777778},"role_description":"text"}]...
|
-4744449960660385902
|
971287029161519621
|
visual_change
|
accessibility
|
NULL
|
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
sqlite3
Close Tab
⌥⌘1
sqlite3...
|
NULL
|
|
704
|
16
|
57
|
2026-04-11T12:08:18.640346+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909298640_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp40lhl-zshDOCKER• ₴1DEV (-zsh)-O $2APP (-zsh)• *3-zsh• 84lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"_sqlx_migrationsmeetingsaudio_chunksmemoriesaudio_tagsmemories_ftsaudio_transcriptionsaudio_transcriptions_ftsmemories_fts_configmemories_fts_dataaudio_transcriptions_fts_configmemories_fts_docsizeaudio_transcriptions_fts_dataaudio_transcriptions_fts_docsizememories_fts_idxaudio_transcriptions_fts_idxocr_textpipe_executionselementselements_ftspipe_scheduler_statespeaker_embeddingselements_fts_configspeakerselements_fts_datatagselements_fts_docsizeui_eventselements_fts_idxui_events_ftsframesui_events_fts_configframes_ftsframes_fts_configui_events_fts_dataui_events_fts_docsizeframes_fts_contentui_events_fts_idxframes_fts_datavideo_chunksframes_fts_docsizeframes_fts_idxvision_tagslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $|-zsh• 85-zsh100% CSat 11 Apr 15:08:18T81• ÷6-zsh*7...
|
NULL
|
3096911439121115294
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp40lhl-zshDOCKER• ₴1DEV (-zsh)-O $2APP (-zsh)• *3-zsh• 84lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"_sqlx_migrationsmeetingsaudio_chunksmemoriesaudio_tagsmemories_ftsaudio_transcriptionsaudio_transcriptions_ftsmemories_fts_configmemories_fts_dataaudio_transcriptions_fts_configmemories_fts_docsizeaudio_transcriptions_fts_dataaudio_transcriptions_fts_docsizememories_fts_idxaudio_transcriptions_fts_idxocr_textpipe_executionselementselements_ftspipe_scheduler_statespeaker_embeddingselements_fts_configspeakerselements_fts_datatagselements_fts_docsizeui_eventselements_fts_idxui_events_ftsframesui_events_fts_configframes_ftsframes_fts_configui_events_fts_dataui_events_fts_docsizeframes_fts_contentui_events_fts_idxframes_fts_datavideo_chunksframes_fts_docsizeframes_fts_idxvision_tagslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $|-zsh• 85-zsh100% CSat 11 Apr 15:08:18T81• ÷6-zsh*7...
|
703
|
|
705
|
16
|
58
|
2026-04-11T12:08:19.839738+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909299839_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindovDOC iTerm2ShellEditViewSessionScriptsProfilesWindovDOCKERO ₴1DEV (-zsh)-О 882APP (-zsllukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite_sqlx_migrationsmeetingsaudio_chunksmemoriesaudio_tagsmemories_ftsaudio_transcriptionsaudio_transcriptions_ftsmemories_fts_configmemories_fts_dataaudio_transcriptions_fts_configmemories_fts_docsizeaudio_transcriptions_fts_dataaudio_transcriptions_fts_docsizememories_fts_idxaudio_transcriptions_fts_idxocr_textpipe_executionselementselements_ftspipe_scheduler_statespeaker_embeddingselements_fts_configspeakerselements_fts_datatagselements_fts_docsizeelements_fts_idxui_eventsui_events_ftsframesui_events_fts_configframes_ftsframes_fts_configui_events_fts_dataui_events_fts_docsizeframes_fts_contentui_events_fts_idxframes_fts_datavideo_chunksframes_fts_docsizevision_tagsframes_fts_idxlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ 0...
|
NULL
|
-3378063892619653220
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindovDOC iTerm2ShellEditViewSessionScriptsProfilesWindovDOCKERO ₴1DEV (-zsh)-О 882APP (-zsllukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite_sqlx_migrationsmeetingsaudio_chunksmemoriesaudio_tagsmemories_ftsaudio_transcriptionsaudio_transcriptions_ftsmemories_fts_configmemories_fts_dataaudio_transcriptions_fts_configmemories_fts_docsizeaudio_transcriptions_fts_dataaudio_transcriptions_fts_docsizememories_fts_idxaudio_transcriptions_fts_idxocr_textpipe_executionselementselements_ftspipe_scheduler_statespeaker_embeddingselements_fts_configspeakerselements_fts_datatagselements_fts_docsizeelements_fts_idxui_eventsui_events_ftsframesui_events_fts_configframes_ftsframes_fts_configui_events_fts_dataui_events_fts_docsizeframes_fts_contentui_events_fts_idxframes_fts_datavideo_chunksframes_fts_docsizevision_tagsframes_fts_idxlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ 0...
|
NULL
|
|
706
|
16
|
59
|
2026-04-11T12:08:20.550784+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909300550_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\"\n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":"drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\"\n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
5896168947850374843
|
1043309438827358725
|
click
|
accessibility
|
NULL
|
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
705
|
|
707
|
16
|
60
|
2026-04-11T12:08:21.344852+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909301344_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema"
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\"\n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema\"","depth":4,"value":"drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\"\n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema\"","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
-7666778357200871500
|
1115367032869612037
|
clipboard
|
accessibility
|
NULL
|
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema"
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
|
708
|
16
|
61
|
2026-04-11T12:08:23.341863+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909303341_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema"
CREATE TABLE _sqlx_migrations (
version BIGINT PRIMARY KEY,
description TEXT NOT NULL,
installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
success BOOLEAN NOT NULL,
checksum BLOB NOT NULL,
execution_time BIGINT NOT NULL
);
CREATE TABLE video_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL);
CREATE TABLE sqlite_sequence(name,seq);
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE TABLE IF NOT EXISTS "ocr_text" (
frame_id INTEGER NOT NULL,
text TEXT NOT NULL,
text_json TEXT,
app_name TEXT NOT NULL DEFAULT '',
ocr_engine TEXT NOT NULL DEFAULT 'unknown'
, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);
CREATE TABLE tags (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE vision_tags (
vision_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (vision_id, tag_id),
FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE TABLE audio_tags (
audio_chunk_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (audio_chunk_id, tag_id),
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id);
CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id);
CREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);
CREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);
CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);
CREATE TABLE speakers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
metadata JSON
, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);
CREATE TABLE speaker_embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
embedding FLOAT[512] NOT NULL
check(
typeof(embedding) == 'blob'
and vec_length(embedding) == 512
),
speaker_id INTEGER REFERENCES speakers(id)
);
CREATE TABLE IF NOT EXISTS "audio_transcriptions" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_chunk_id INTEGER NOT NULL,
offset_index INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
transcription TEXT NOT NULL,
device TEXT NOT NULL DEFAULT '',
is_input_device BOOLEAN NOT NULL DEFAULT TRUE,
speaker_id INTEGER,
transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME,
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)
);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);
CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);
CREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);
CREATE TABLE ui_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
session_id TEXT,
relative_ms INTEGER NOT NULL DEFAULT 0,
event_type TEXT NOT NULL, -- click, move, scroll, key, text, app_switch, window_focus, clipboard
-- Position
x INTEGER,
y INTEGER,
delta_x INTEGER,
delta_y INTEGER,
-- Mouse/key
button INTEGER,
click_count INTEGER,
key_code INTEGER,
modifiers INTEGER,
-- Text content
text_content TEXT,
text_length INTEGER,
-- App context
app_name TEXT,
app_pid INTEGER,
window_title TEXT,
browser_url TEXT,
-- Element context (from accessibility APIs)
element_role TEXT,
element_name TEXT,
element_value TEXT,
element_description TEXT,
element_automation_id TEXT,
element_bounds TEXT, -- JSON: {"x":0,"y":0,"width":100,"height":50}
-- Frame correlation
frame_id INTEGER,
-- Sync columns
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME
);
CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX idx_ui_events_event_type ON ui_events(event_type);
CREATE INDEX idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX idx_ui_events_session_id ON ui_events(session_id);
CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id);
CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at);
CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL;
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
)
/* ui_events_fts(text_content,app_name,window_title,element_name) */;
CREATE TABLE IF NOT EXISTS 'ui_events_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'ui_events_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'ui_events_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'ui_events_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER ui_events_ad AFTER DELETE ON ui_events BEGIN
INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)
VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);
END;
CREATE TRIGGER ui_events_au AFTER UPDATE ON ui_events BEGIN
INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)
VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);
INSERT INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)
VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);
END;
CREATE UNIQUE INDEX idx_audio_transcription_chunk_text
ON audio_transcriptions(audio_chunk_id, transcription);
CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name);
CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC);
CREATE TABLE pipe_executions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
pipe_name TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'queued',
trigger_type TEXT NOT NULL DEFAULT 'manual',
pid INTEGER,
model TEXT,
provider TEXT,
started_at TEXT,
finished_at TEXT,
stdout TEXT DEFAULT '',
stderr TEXT DEFAULT '',
exit_code INTEGER,
error_type TEXT,
error_message TEXT,
duration_ms INTEGER
, session_path TEXT);
CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status);
CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running';
CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC);
CREATE TABLE pipe_scheduler_state (
pipe_name TEXT PRIMARY KEY,
last_run_at TEXT,
last_success_at TEXT,
consecutive_failures INTEGER DEFAULT 0
);
CREATE TABLE IF NOT EXISTS "frames" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
video_chunk_id INTEGER DEFAULT NULL,
offset_index INTEGER NOT NULL DEFAULT 0,
timestamp TIMESTAMP NOT NULL,
name TEXT,
app_name TEXT DEFAULT NULL,
window_name TEXT DEFAULT NULL,
focused BOOLEAN DEFAULT NULL,
browser_url TEXT DEFAULT NULL,
device_name TEXT NOT NULL DEFAULT '',
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME,
-- New event-driven capture columns
snapshot_path TEXT DEFAULT NULL,
accessibility_text TEXT DEFAULT NULL,
accessibility_tree_json TEXT DEFAULT NULL,
content_hash INTEGER DEFAULT NULL,
simhash INTEGER DEFAULT NULL,
capture_trigger TEXT DEFAULT NULL,
text_source TEXT DEFAULT NULL, cloud_blob_id TEXT DEFAULT NULL, full_text TEXT DEFAULT NULL, elements_ref_frame_id INTEGER DEFAULT NULL,
FOREIGN KEY (video_chunk_id) REFERENCES video_chunks(id)
);
CREATE INDEX idx_frames_timestamp ON frames(timestamp);
CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name);
CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL;
CREATE TRIGGER ui_events_ai AFTER INSERT ON ui_events BEGIN
INSERT OR IGNORE INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)
VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);
END;
CREATE TABLE meetings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
meeting_start TEXT NOT NULL,
meeting_end TEXT,
meeting_app TEXT NOT NULL,
title TEXT,
attendees TEXT,
detection_source TEXT NOT NULL DEFAULT 'app',
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
, note TEXT);
CREATE INDEX idx_meetings_start ON meetings(meeting_start);
CREATE INDEX idx_meetings_end ON meetings(meeting_end);
CREATE TABLE elements (
id INTEGER PRIMARY KEY AUTOINCREMENT,
frame_id INTEGER NOT NULL,
source TEXT NOT NULL, -- 'ocr' | 'accessibility'
role TEXT NOT NULL, -- OCR: 'page','block','paragraph','line','word'
-- AX: 'AXButton','AXTextField','AXStaticText', etc.
text TEXT, -- element text content (NULL for container nodes)
parent_id INTEGER, -- self-referential FK for tree hierarchy (NULL = root)
depth INTEGER NOT NULL DEFAULT 0, -- tree depth (0 = root)
left_bound REAL, -- normalized 0-1 bounding box
top_bound REAL,
width_bound REAL,
height_bound REAL,
confidence REAL, -- OCR confidence (0-100), NULL for AX
sort_order INTEGER NOT NULL DEFAULT 0, properties TEXT, -- sibling order within parent
FOREIGN KEY (frame_id) REFERENCES frames(id),
FOREIGN KEY (parent_id) REFERENCES elements(id)
);
CREATE INDEX idx_elements_frame_id ON elements(frame_id);
CREATE INDEX idx_elements_parent_id ON elements(parent_id);
CREATE INDEX idx_elements_source ON elements(source);
CREATE INDEX idx_elements_frame_source ON elements(frame_id, source);
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
/* elements_fts(text,role,frame_id) */;
CREATE TABLE IF NOT EXISTS 'elements_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'elements_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'elements_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'elements_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER elements_ai AFTER INSERT ON elements
WHEN NEW.text IS NOT NULL AND NEW.text != ''
BEGIN
INSERT INTO elements_fts(rowid, text, role, frame_id)
VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);
END;
CREATE TRIGGER elements_ad AFTER DELETE ON elements
WHEN OLD.text IS NOT NULL AND OLD.text != ''
BEGIN
INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)
VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);
END;
CREATE TRIGGER elements_au AFTER UPDATE ON elements
WHEN OLD.text IS NOT NULL AND OLD.text != ''
BEGIN
INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)
VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);
INSERT INTO elements_fts(rowid, text, role, frame_id)
VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);
END;
CREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(
transcription,
device,
speaker_id,
content='audio_transcriptions',
content_rowid='id',
tokenize='unicode61'
)
/* audio_transcriptions_fts(transcription,device,speaker_id) */;
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions
WHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL;
CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL;
CREATE TABLE memories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT NOT NULL,
source TEXT NOT NULL DEFAULT 'user',
source_context TEXT,
tags TEXT DEFAULT '[]',
importance REAL DEFAULT 0.5,
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
, frame_id INTEGER REFERENCES frames(id) ON DELETE SET NULL);
CREATE INDEX idx_memories_created_at ON memories(created_at);
CREATE INDEX idx_memories_importance ON memories(importance DESC);
CREATE INDEX idx_memories_source ON memories(source);
CREATE VIRTUAL TABLE memories_fts USING fts5(
content,
tags,
content='memories',
content_rowid='id',
tokenize='unicode61'
)
/* memories_fts(content,tags) */;
CREATE TABLE IF NOT EXISTS 'memories_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'memories_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'memories_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'memories_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER memories_ai AFTER INSERT ON memories
WHEN NEW.content IS NOT NULL AND NEW.content != ''
BEGIN
INSERT INTO memories_fts(rowid, content, tags)
VALUES (NEW.id, NEW.content, COALESCE(NEW.tags, ''));
END;
CREATE TRIGGER memories_ad AFTER DELETE ON memories
WHEN OLD.content IS NOT NULL AND OLD.content != ''
BEGIN
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));
END;
CREATE TRIGGER memories_au AFTER UPDATE ON memories
WHEN OLD.content IS NOT NULL AND OLD.content != ''
BEGIN
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));
INSERT INTO memories_fts(rowid, content, tags)
VALUES (NEW.id, COALESCE(NEW.content, ''), COALESCE(NEW.tags, ''));
END;
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
id UNINDEXED,
tokenize='unicode61'
)
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\"\n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema\"\nCREATE TABLE _sqlx_migrations (\n version BIGINT PRIMARY KEY,\n description TEXT NOT NULL,\n installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,\n success BOOLEAN NOT NULL,\n checksum BLOB NOT NULL,\n execution_time BIGINT NOT NULL\n);\nCREATE TABLE video_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL);\nCREATE TABLE sqlite_sequence(name,seq);\nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE TABLE IF NOT EXISTS \"ocr_text\" (\n frame_id INTEGER NOT NULL,\n text TEXT NOT NULL,\n text_json TEXT,\n app_name TEXT NOT NULL DEFAULT '',\n ocr_engine TEXT NOT NULL DEFAULT 'unknown'\n, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);\nCREATE TABLE tags (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\nCREATE TABLE vision_tags (\n vision_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (vision_id, tag_id),\n FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE TABLE audio_tags (\n audio_chunk_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (audio_chunk_id, tag_id),\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id);\nCREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id);\nCREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);\nCREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);\nCREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);\nCREATE TABLE speakers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT,\n metadata JSON\n, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);\nCREATE TABLE speaker_embeddings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding FLOAT[512] NOT NULL\n check(\n typeof(embedding) == 'blob'\n and vec_length(embedding) == 512\n ),\n speaker_id INTEGER REFERENCES speakers(id)\n);\nCREATE TABLE IF NOT EXISTS \"audio_transcriptions\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n audio_chunk_id INTEGER NOT NULL,\n offset_index INTEGER NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n transcription TEXT NOT NULL,\n device TEXT NOT NULL DEFAULT '',\n is_input_device BOOLEAN NOT NULL DEFAULT TRUE,\n speaker_id INTEGER,\n transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME,\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)\n);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);\nCREATE INDEX idx_ocr_text_length ON ocr_text (text_length);\nCREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);\nCREATE TABLE ui_events (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n session_id TEXT,\n relative_ms INTEGER NOT NULL DEFAULT 0,\n event_type TEXT NOT NULL, -- click, move, scroll, key, text, app_switch, window_focus, clipboard\n -- Position\n x INTEGER,\n y INTEGER,\n delta_x INTEGER,\n delta_y INTEGER,\n -- Mouse/key\n button INTEGER,\n click_count INTEGER,\n key_code INTEGER,\n modifiers INTEGER,\n -- Text content\n text_content TEXT,\n text_length INTEGER,\n -- App context\n app_name TEXT,\n app_pid INTEGER,\n window_title TEXT,\n browser_url TEXT,\n -- Element context (from accessibility APIs)\n element_role TEXT,\n element_name TEXT,\n element_value TEXT,\n element_description TEXT,\n element_automation_id TEXT,\n element_bounds TEXT, -- JSON: {\"x\":0,\"y\":0,\"width\":100,\"height\":50}\n -- Frame correlation\n frame_id INTEGER,\n -- Sync columns\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME\n);\nCREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX idx_ui_events_event_type ON ui_events(event_type);\nCREATE INDEX idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX idx_ui_events_session_id ON ui_events(session_id);\nCREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id);\nCREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at);\nCREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL;\nCREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content,\n app_name,\n window_title,\n element_name,\n content='ui_events',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* ui_events_fts(text_content,app_name,window_title,element_name) */;\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER ui_events_ad AFTER DELETE ON ui_events BEGIN\n INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)\n VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);\nEND;\nCREATE TRIGGER ui_events_au AFTER UPDATE ON ui_events BEGIN\n INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)\n VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);\n INSERT INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);\nEND;\nCREATE UNIQUE INDEX idx_audio_transcription_chunk_text\nON audio_transcriptions(audio_chunk_id, transcription);\nCREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name);\nCREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC);\nCREATE TABLE pipe_executions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n pipe_name TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'queued',\n trigger_type TEXT NOT NULL DEFAULT 'manual',\n pid INTEGER,\n model TEXT,\n provider TEXT,\n started_at TEXT,\n finished_at TEXT,\n stdout TEXT DEFAULT '',\n stderr TEXT DEFAULT '',\n exit_code INTEGER,\n error_type TEXT,\n error_message TEXT,\n duration_ms INTEGER\n, session_path TEXT);\nCREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status);\nCREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running';\nCREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC);\nCREATE TABLE pipe_scheduler_state (\n pipe_name TEXT PRIMARY KEY,\n last_run_at TEXT,\n last_success_at TEXT,\n consecutive_failures INTEGER DEFAULT 0\n);\nCREATE TABLE IF NOT EXISTS \"frames\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n video_chunk_id INTEGER DEFAULT NULL,\n offset_index INTEGER NOT NULL DEFAULT 0,\n timestamp TIMESTAMP NOT NULL,\n name TEXT,\n app_name TEXT DEFAULT NULL,\n window_name TEXT DEFAULT NULL,\n focused BOOLEAN DEFAULT NULL,\n browser_url TEXT DEFAULT NULL,\n device_name TEXT NOT NULL DEFAULT '',\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME,\n -- New event-driven capture columns\n snapshot_path TEXT DEFAULT NULL,\n accessibility_text TEXT DEFAULT NULL,\n accessibility_tree_json TEXT DEFAULT NULL,\n content_hash INTEGER DEFAULT NULL,\n simhash INTEGER DEFAULT NULL,\n capture_trigger TEXT DEFAULT NULL,\n text_source TEXT DEFAULT NULL, cloud_blob_id TEXT DEFAULT NULL, full_text TEXT DEFAULT NULL, elements_ref_frame_id INTEGER DEFAULT NULL,\n FOREIGN KEY (video_chunk_id) REFERENCES video_chunks(id)\n);\nCREATE INDEX idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX idx_frames_timestamp_device\n ON frames(timestamp, device_name);\nCREATE INDEX idx_frames_snapshot_path\n ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL;\nCREATE TRIGGER ui_events_ai AFTER INSERT ON ui_events BEGIN\n INSERT OR IGNORE INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);\nEND;\nCREATE TABLE meetings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n meeting_start TEXT NOT NULL,\n meeting_end TEXT,\n meeting_app TEXT NOT NULL,\n title TEXT,\n attendees TEXT,\n detection_source TEXT NOT NULL DEFAULT 'app',\n created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\n, note TEXT);\nCREATE INDEX idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX idx_meetings_end ON meetings(meeting_end);\nCREATE TABLE elements (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n frame_id INTEGER NOT NULL,\n source TEXT NOT NULL, -- 'ocr' | 'accessibility'\n role TEXT NOT NULL, -- OCR: 'page','block','paragraph','line','word'\n -- AX: 'AXButton','AXTextField','AXStaticText', etc.\n text TEXT, -- element text content (NULL for container nodes)\n parent_id INTEGER, -- self-referential FK for tree hierarchy (NULL = root)\n depth INTEGER NOT NULL DEFAULT 0, -- tree depth (0 = root)\n left_bound REAL, -- normalized 0-1 bounding box\n top_bound REAL,\n width_bound REAL,\n height_bound REAL,\n confidence REAL, -- OCR confidence (0-100), NULL for AX\n sort_order INTEGER NOT NULL DEFAULT 0, properties TEXT, -- sibling order within parent\n FOREIGN KEY (frame_id) REFERENCES frames(id),\n FOREIGN KEY (parent_id) REFERENCES elements(id)\n);\nCREATE INDEX idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX idx_elements_parent_id ON elements(parent_id);\nCREATE INDEX idx_elements_source ON elements(source);\nCREATE INDEX idx_elements_frame_source ON elements(frame_id, source);\nCREATE VIRTUAL TABLE elements_fts USING fts5(\n text,\n role,\n frame_id UNINDEXED,\n content='elements',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* elements_fts(text,role,frame_id) */;\nCREATE TABLE IF NOT EXISTS 'elements_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'elements_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'elements_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'elements_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER elements_ai AFTER INSERT ON elements\nWHEN NEW.text IS NOT NULL AND NEW.text != ''\nBEGIN\n INSERT INTO elements_fts(rowid, text, role, frame_id)\n VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);\nEND;\nCREATE TRIGGER elements_ad AFTER DELETE ON elements\nWHEN OLD.text IS NOT NULL AND OLD.text != ''\nBEGIN\n INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)\n VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);\nEND;\nCREATE TRIGGER elements_au AFTER UPDATE ON elements\nWHEN OLD.text IS NOT NULL AND OLD.text != ''\nBEGIN\n INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)\n VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);\n INSERT INTO elements_fts(rowid, text, role, frame_id)\n VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);\nEND;\nCREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(\n transcription,\n device,\n speaker_id,\n content='audio_transcriptions',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* audio_transcriptions_fts(transcription,device,speaker_id) */;\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions\nWHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE INDEX idx_video_chunks_cloud_blob_id\n ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL;\nCREATE INDEX idx_frames_cloud_blob_id\n ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL;\nCREATE TABLE memories (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n content TEXT NOT NULL,\n source TEXT NOT NULL DEFAULT 'user',\n source_context TEXT,\n tags TEXT DEFAULT '[]',\n importance REAL DEFAULT 0.5,\n created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),\n updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\n, frame_id INTEGER REFERENCES frames(id) ON DELETE SET NULL);\nCREATE INDEX idx_memories_created_at ON memories(created_at);\nCREATE INDEX idx_memories_importance ON memories(importance DESC);\nCREATE INDEX idx_memories_source ON memories(source);\nCREATE VIRTUAL TABLE memories_fts USING fts5(\n content,\n tags,\n content='memories',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* memories_fts(content,tags) */;\nCREATE TABLE IF NOT EXISTS 'memories_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'memories_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'memories_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'memories_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER memories_ai AFTER INSERT ON memories\nWHEN NEW.content IS NOT NULL AND NEW.content != ''\nBEGIN\n INSERT INTO memories_fts(rowid, content, tags)\n VALUES (NEW.id, NEW.content, COALESCE(NEW.tags, ''));\nEND;\nCREATE TRIGGER memories_ad AFTER DELETE ON memories\nWHEN OLD.content IS NOT NULL AND OLD.content != ''\nBEGIN\n INSERT INTO memories_fts(memories_fts, rowid, content, tags)\n VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));\nEND;\nCREATE TRIGGER memories_au AFTER UPDATE ON memories\nWHEN OLD.content IS NOT NULL AND OLD.content != ''\nBEGIN\n INSERT INTO memories_fts(memories_fts, rowid, content, tags)\n VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));\n INSERT INTO memories_fts(rowid, content, tags)\n VALUES (NEW.id, COALESCE(NEW.content, ''), COALESCE(NEW.tags, ''));\nEND;\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text,\n app_name,\n window_name,\n browser_url,\n id UNINDEXED,\n tokenize='unicode61'\n)\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":"drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\"\n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema\"\nCREATE TABLE _sqlx_migrations (\n version BIGINT PRIMARY KEY,\n description TEXT NOT NULL,\n installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,\n success BOOLEAN NOT NULL,\n checksum BLOB NOT NULL,\n execution_time BIGINT NOT NULL\n);\nCREATE TABLE video_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL);\nCREATE TABLE sqlite_sequence(name,seq);\nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE TABLE IF NOT EXISTS \"ocr_text\" (\n frame_id INTEGER NOT NULL,\n text TEXT NOT NULL,\n text_json TEXT,\n app_name TEXT NOT NULL DEFAULT '',\n ocr_engine TEXT NOT NULL DEFAULT 'unknown'\n, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);\nCREATE TABLE tags (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\nCREATE TABLE vision_tags (\n vision_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (vision_id, tag_id),\n FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE TABLE audio_tags (\n audio_chunk_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (audio_chunk_id, tag_id),\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id);\nCREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id);\nCREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);\nCREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);\nCREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);\nCREATE TABLE speakers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT,\n metadata JSON\n, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);\nCREATE TABLE speaker_embeddings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding FLOAT[512] NOT NULL\n check(\n typeof(embedding) == 'blob'\n and vec_length(embedding) == 512\n ),\n speaker_id INTEGER REFERENCES speakers(id)\n);\nCREATE TABLE IF NOT EXISTS \"audio_transcriptions\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n audio_chunk_id INTEGER NOT NULL,\n offset_index INTEGER NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n transcription TEXT NOT NULL,\n device TEXT NOT NULL DEFAULT '',\n is_input_device BOOLEAN NOT NULL DEFAULT TRUE,\n speaker_id INTEGER,\n transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME,\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)\n);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);\nCREATE INDEX idx_ocr_text_length ON ocr_text (text_length);\nCREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);\nCREATE TABLE ui_events (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n session_id TEXT,\n relative_ms INTEGER NOT NULL DEFAULT 0,\n event_type TEXT NOT NULL, -- click, move, scroll, key, text, app_switch, window_focus, clipboard\n -- Position\n x INTEGER,\n y INTEGER,\n delta_x INTEGER,\n delta_y INTEGER,\n -- Mouse/key\n button INTEGER,\n click_count INTEGER,\n key_code INTEGER,\n modifiers INTEGER,\n -- Text content\n text_content TEXT,\n text_length INTEGER,\n -- App context\n app_name TEXT,\n app_pid INTEGER,\n window_title TEXT,\n browser_url TEXT,\n -- Element context (from accessibility APIs)\n element_role TEXT,\n element_name TEXT,\n element_value TEXT,\n element_description TEXT,\n element_automation_id TEXT,\n element_bounds TEXT, -- JSON: {\"x\":0,\"y\":0,\"width\":100,\"height\":50}\n -- Frame correlation\n frame_id INTEGER,\n -- Sync columns\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME\n);\nCREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX idx_ui_events_event_type ON ui_events(event_type);\nCREATE INDEX idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX idx_ui_events_session_id ON ui_events(session_id);\nCREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id);\nCREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at);\nCREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL;\nCREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content,\n app_name,\n window_title,\n element_name,\n content='ui_events',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* ui_events_fts(text_content,app_name,window_title,element_name) */;\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER ui_events_ad AFTER DELETE ON ui_events BEGIN\n INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)\n VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);\nEND;\nCREATE TRIGGER ui_events_au AFTER UPDATE ON ui_events BEGIN\n INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)\n VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);\n INSERT INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);\nEND;\nCREATE UNIQUE INDEX idx_audio_transcription_chunk_text\nON audio_transcriptions(audio_chunk_id, transcription);\nCREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name);\nCREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC);\nCREATE TABLE pipe_executions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n pipe_name TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'queued',\n trigger_type TEXT NOT NULL DEFAULT 'manual',\n pid INTEGER,\n model TEXT,\n provider TEXT,\n started_at TEXT,\n finished_at TEXT,\n stdout TEXT DEFAULT '',\n stderr TEXT DEFAULT '',\n exit_code INTEGER,\n error_type TEXT,\n error_message TEXT,\n duration_ms INTEGER\n, session_path TEXT);\nCREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status);\nCREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running';\nCREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC);\nCREATE TABLE pipe_scheduler_state (\n pipe_name TEXT PRIMARY KEY,\n last_run_at TEXT,\n last_success_at TEXT,\n consecutive_failures INTEGER DEFAULT 0\n);\nCREATE TABLE IF NOT EXISTS \"frames\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n video_chunk_id INTEGER DEFAULT NULL,\n offset_index INTEGER NOT NULL DEFAULT 0,\n timestamp TIMESTAMP NOT NULL,\n name TEXT,\n app_name TEXT DEFAULT NULL,\n window_name TEXT DEFAULT NULL,\n focused BOOLEAN DEFAULT NULL,\n browser_url TEXT DEFAULT NULL,\n device_name TEXT NOT NULL DEFAULT '',\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME,\n -- New event-driven capture columns\n snapshot_path TEXT DEFAULT NULL,\n accessibility_text TEXT DEFAULT NULL,\n accessibility_tree_json TEXT DEFAULT NULL,\n content_hash INTEGER DEFAULT NULL,\n simhash INTEGER DEFAULT NULL,\n capture_trigger TEXT DEFAULT NULL,\n text_source TEXT DEFAULT NULL, cloud_blob_id TEXT DEFAULT NULL, full_text TEXT DEFAULT NULL, elements_ref_frame_id INTEGER DEFAULT NULL,\n FOREIGN KEY (video_chunk_id) REFERENCES video_chunks(id)\n);\nCREATE INDEX idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX idx_frames_timestamp_device\n ON frames(timestamp, device_name);\nCREATE INDEX idx_frames_snapshot_path\n ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL;\nCREATE TRIGGER ui_events_ai AFTER INSERT ON ui_events BEGIN\n INSERT OR IGNORE INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);\nEND;\nCREATE TABLE meetings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n meeting_start TEXT NOT NULL,\n meeting_end TEXT,\n meeting_app TEXT NOT NULL,\n title TEXT,\n attendees TEXT,\n detection_source TEXT NOT NULL DEFAULT 'app',\n created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\n, note TEXT);\nCREATE INDEX idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX idx_meetings_end ON meetings(meeting_end);\nCREATE TABLE elements (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n frame_id INTEGER NOT NULL,\n source TEXT NOT NULL, -- 'ocr' | 'accessibility'\n role TEXT NOT NULL, -- OCR: 'page','block','paragraph','line','word'\n -- AX: 'AXButton','AXTextField','AXStaticText', etc.\n text TEXT, -- element text content (NULL for container nodes)\n parent_id INTEGER, -- self-referential FK for tree hierarchy (NULL = root)\n depth INTEGER NOT NULL DEFAULT 0, -- tree depth (0 = root)\n left_bound REAL, -- normalized 0-1 bounding box\n top_bound REAL,\n width_bound REAL,\n height_bound REAL,\n confidence REAL, -- OCR confidence (0-100), NULL for AX\n sort_order INTEGER NOT NULL DEFAULT 0, properties TEXT, -- sibling order within parent\n FOREIGN KEY (frame_id) REFERENCES frames(id),\n FOREIGN KEY (parent_id) REFERENCES elements(id)\n);\nCREATE INDEX idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX idx_elements_parent_id ON elements(parent_id);\nCREATE INDEX idx_elements_source ON elements(source);\nCREATE INDEX idx_elements_frame_source ON elements(frame_id, source);\nCREATE VIRTUAL TABLE elements_fts USING fts5(\n text,\n role,\n frame_id UNINDEXED,\n content='elements',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* elements_fts(text,role,frame_id) */;\nCREATE TABLE IF NOT EXISTS 'elements_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'elements_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'elements_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'elements_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER elements_ai AFTER INSERT ON elements\nWHEN NEW.text IS NOT NULL AND NEW.text != ''\nBEGIN\n INSERT INTO elements_fts(rowid, text, role, frame_id)\n VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);\nEND;\nCREATE TRIGGER elements_ad AFTER DELETE ON elements\nWHEN OLD.text IS NOT NULL AND OLD.text != ''\nBEGIN\n INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)\n VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);\nEND;\nCREATE TRIGGER elements_au AFTER UPDATE ON elements\nWHEN OLD.text IS NOT NULL AND OLD.text != ''\nBEGIN\n INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)\n VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);\n INSERT INTO elements_fts(rowid, text, role, frame_id)\n VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);\nEND;\nCREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(\n transcription,\n device,\n speaker_id,\n content='audio_transcriptions',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* audio_transcriptions_fts(transcription,device,speaker_id) */;\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions\nWHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE INDEX idx_video_chunks_cloud_blob_id\n ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL;\nCREATE INDEX idx_frames_cloud_blob_id\n ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL;\nCREATE TABLE memories (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n content TEXT NOT NULL,\n source TEXT NOT NULL DEFAULT 'user',\n source_context TEXT,\n tags TEXT DEFAULT '[]',\n importance REAL DEFAULT 0.5,\n created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),\n updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\n, frame_id INTEGER REFERENCES frames(id) ON DELETE SET NULL);\nCREATE INDEX idx_memories_created_at ON memories(created_at);\nCREATE INDEX idx_memories_importance ON memories(importance DESC);\nCREATE INDEX idx_memories_source ON memories(source);\nCREATE VIRTUAL TABLE memories_fts USING fts5(\n content,\n tags,\n content='memories',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* memories_fts(content,tags) */;\nCREATE TABLE IF NOT EXISTS 'memories_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'memories_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'memories_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'memories_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER memories_ai AFTER INSERT ON memories\nWHEN NEW.content IS NOT NULL AND NEW.content != ''\nBEGIN\n INSERT INTO memories_fts(rowid, content, tags)\n VALUES (NEW.id, NEW.content, COALESCE(NEW.tags, ''));\nEND;\nCREATE TRIGGER memories_ad AFTER DELETE ON memories\nWHEN OLD.content IS NOT NULL AND OLD.content != ''\nBEGIN\n INSERT INTO memories_fts(memories_fts, rowid, content, tags)\n VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));\nEND;\nCREATE TRIGGER memories_au AFTER UPDATE ON memories\nWHEN OLD.content IS NOT NULL AND OLD.content != ''\nBEGIN\n INSERT INTO memories_fts(memories_fts, rowid, content, tags)\n VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));\n INSERT INTO memories_fts(rowid, content, tags)\n VALUES (NEW.id, COALESCE(NEW.content, ''), COALESCE(NEW.tags, ''));\nEND;\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text,\n app_name,\n window_name,\n browser_url,\n id UNINDEXED,\n tokenize='unicode61'\n)\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
5853192385605379516
|
3173372984674339333
|
visual_change
|
accessibility
|
NULL
|
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema"
CREATE TABLE _sqlx_migrations (
version BIGINT PRIMARY KEY,
description TEXT NOT NULL,
installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
success BOOLEAN NOT NULL,
checksum BLOB NOT NULL,
execution_time BIGINT NOT NULL
);
CREATE TABLE video_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL);
CREATE TABLE sqlite_sequence(name,seq);
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE TABLE IF NOT EXISTS "ocr_text" (
frame_id INTEGER NOT NULL,
text TEXT NOT NULL,
text_json TEXT,
app_name TEXT NOT NULL DEFAULT '',
ocr_engine TEXT NOT NULL DEFAULT 'unknown'
, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);
CREATE TABLE tags (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE vision_tags (
vision_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (vision_id, tag_id),
FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE TABLE audio_tags (
audio_chunk_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (audio_chunk_id, tag_id),
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id);
CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id);
CREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);
CREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);
CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);
CREATE TABLE speakers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
metadata JSON
, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);
CREATE TABLE speaker_embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
embedding FLOAT[512] NOT NULL
check(
typeof(embedding) == 'blob'
and vec_length(embedding) == 512
),
speaker_id INTEGER REFERENCES speakers(id)
);
CREATE TABLE IF NOT EXISTS "audio_transcriptions" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_chunk_id INTEGER NOT NULL,
offset_index INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
transcription TEXT NOT NULL,
device TEXT NOT NULL DEFAULT '',
is_input_device BOOLEAN NOT NULL DEFAULT TRUE,
speaker_id INTEGER,
transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME,
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)
);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);
CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);
CREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);
CREATE TABLE ui_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
session_id TEXT,
relative_ms INTEGER NOT NULL DEFAULT 0,
event_type TEXT NOT NULL, -- click, move, scroll, key, text, app_switch, window_focus, clipboard
-- Position
x INTEGER,
y INTEGER,
delta_x INTEGER,
delta_y INTEGER,
-- Mouse/key
button INTEGER,
click_count INTEGER,
key_code INTEGER,
modifiers INTEGER,
-- Text content
text_content TEXT,
text_length INTEGER,
-- App context
app_name TEXT,
app_pid INTEGER,
window_title TEXT,
browser_url TEXT,
-- Element context (from accessibility APIs)
element_role TEXT,
element_name TEXT,
element_value TEXT,
element_description TEXT,
element_automation_id TEXT,
element_bounds TEXT, -- JSON: {"x":0,"y":0,"width":100,"height":50}
-- Frame correlation
frame_id INTEGER,
-- Sync columns
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME
);
CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX idx_ui_events_event_type ON ui_events(event_type);
CREATE INDEX idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX idx_ui_events_session_id ON ui_events(session_id);
CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id);
CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at);
CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL;
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
)
/* ui_events_fts(text_content,app_name,window_title,element_name) */;
CREATE TABLE IF NOT EXISTS 'ui_events_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'ui_events_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'ui_events_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'ui_events_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER ui_events_ad AFTER DELETE ON ui_events BEGIN
INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)
VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);
END;
CREATE TRIGGER ui_events_au AFTER UPDATE ON ui_events BEGIN
INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)
VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);
INSERT INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)
VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);
END;
CREATE UNIQUE INDEX idx_audio_transcription_chunk_text
ON audio_transcriptions(audio_chunk_id, transcription);
CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name);
CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC);
CREATE TABLE pipe_executions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
pipe_name TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'queued',
trigger_type TEXT NOT NULL DEFAULT 'manual',
pid INTEGER,
model TEXT,
provider TEXT,
started_at TEXT,
finished_at TEXT,
stdout TEXT DEFAULT '',
stderr TEXT DEFAULT '',
exit_code INTEGER,
error_type TEXT,
error_message TEXT,
duration_ms INTEGER
, session_path TEXT);
CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status);
CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running';
CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC);
CREATE TABLE pipe_scheduler_state (
pipe_name TEXT PRIMARY KEY,
last_run_at TEXT,
last_success_at TEXT,
consecutive_failures INTEGER DEFAULT 0
);
CREATE TABLE IF NOT EXISTS "frames" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
video_chunk_id INTEGER DEFAULT NULL,
offset_index INTEGER NOT NULL DEFAULT 0,
timestamp TIMESTAMP NOT NULL,
name TEXT,
app_name TEXT DEFAULT NULL,
window_name TEXT DEFAULT NULL,
focused BOOLEAN DEFAULT NULL,
browser_url TEXT DEFAULT NULL,
device_name TEXT NOT NULL DEFAULT '',
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME,
-- New event-driven capture columns
snapshot_path TEXT DEFAULT NULL,
accessibility_text TEXT DEFAULT NULL,
accessibility_tree_json TEXT DEFAULT NULL,
content_hash INTEGER DEFAULT NULL,
simhash INTEGER DEFAULT NULL,
capture_trigger TEXT DEFAULT NULL,
text_source TEXT DEFAULT NULL, cloud_blob_id TEXT DEFAULT NULL, full_text TEXT DEFAULT NULL, elements_ref_frame_id INTEGER DEFAULT NULL,
FOREIGN KEY (video_chunk_id) REFERENCES video_chunks(id)
);
CREATE INDEX idx_frames_timestamp ON frames(timestamp);
CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name);
CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL;
CREATE TRIGGER ui_events_ai AFTER INSERT ON ui_events BEGIN
INSERT OR IGNORE INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)
VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);
END;
CREATE TABLE meetings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
meeting_start TEXT NOT NULL,
meeting_end TEXT,
meeting_app TEXT NOT NULL,
title TEXT,
attendees TEXT,
detection_source TEXT NOT NULL DEFAULT 'app',
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
, note TEXT);
CREATE INDEX idx_meetings_start ON meetings(meeting_start);
CREATE INDEX idx_meetings_end ON meetings(meeting_end);
CREATE TABLE elements (
id INTEGER PRIMARY KEY AUTOINCREMENT,
frame_id INTEGER NOT NULL,
source TEXT NOT NULL, -- 'ocr' | 'accessibility'
role TEXT NOT NULL, -- OCR: 'page','block','paragraph','line','word'
-- AX: 'AXButton','AXTextField','AXStaticText', etc.
text TEXT, -- element text content (NULL for container nodes)
parent_id INTEGER, -- self-referential FK for tree hierarchy (NULL = root)
depth INTEGER NOT NULL DEFAULT 0, -- tree depth (0 = root)
left_bound REAL, -- normalized 0-1 bounding box
top_bound REAL,
width_bound REAL,
height_bound REAL,
confidence REAL, -- OCR confidence (0-100), NULL for AX
sort_order INTEGER NOT NULL DEFAULT 0, properties TEXT, -- sibling order within parent
FOREIGN KEY (frame_id) REFERENCES frames(id),
FOREIGN KEY (parent_id) REFERENCES elements(id)
);
CREATE INDEX idx_elements_frame_id ON elements(frame_id);
CREATE INDEX idx_elements_parent_id ON elements(parent_id);
CREATE INDEX idx_elements_source ON elements(source);
CREATE INDEX idx_elements_frame_source ON elements(frame_id, source);
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
/* elements_fts(text,role,frame_id) */;
CREATE TABLE IF NOT EXISTS 'elements_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'elements_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'elements_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'elements_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER elements_ai AFTER INSERT ON elements
WHEN NEW.text IS NOT NULL AND NEW.text != ''
BEGIN
INSERT INTO elements_fts(rowid, text, role, frame_id)
VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);
END;
CREATE TRIGGER elements_ad AFTER DELETE ON elements
WHEN OLD.text IS NOT NULL AND OLD.text != ''
BEGIN
INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)
VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);
END;
CREATE TRIGGER elements_au AFTER UPDATE ON elements
WHEN OLD.text IS NOT NULL AND OLD.text != ''
BEGIN
INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)
VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);
INSERT INTO elements_fts(rowid, text, role, frame_id)
VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);
END;
CREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(
transcription,
device,
speaker_id,
content='audio_transcriptions',
content_rowid='id',
tokenize='unicode61'
)
/* audio_transcriptions_fts(transcription,device,speaker_id) */;
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions
WHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL;
CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL;
CREATE TABLE memories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT NOT NULL,
source TEXT NOT NULL DEFAULT 'user',
source_context TEXT,
tags TEXT DEFAULT '[]',
importance REAL DEFAULT 0.5,
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
, frame_id INTEGER REFERENCES frames(id) ON DELETE SET NULL);
CREATE INDEX idx_memories_created_at ON memories(created_at);
CREATE INDEX idx_memories_importance ON memories(importance DESC);
CREATE INDEX idx_memories_source ON memories(source);
CREATE VIRTUAL TABLE memories_fts USING fts5(
content,
tags,
content='memories',
content_rowid='id',
tokenize='unicode61'
)
/* memories_fts(content,tags) */;
CREATE TABLE IF NOT EXISTS 'memories_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'memories_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'memories_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'memories_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER memories_ai AFTER INSERT ON memories
WHEN NEW.content IS NOT NULL AND NEW.content != ''
BEGIN
INSERT INTO memories_fts(rowid, content, tags)
VALUES (NEW.id, NEW.content, COALESCE(NEW.tags, ''));
END;
CREATE TRIGGER memories_ad AFTER DELETE ON memories
WHEN OLD.content IS NOT NULL AND OLD.content != ''
BEGIN
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));
END;
CREATE TRIGGER memories_au AFTER UPDATE ON memories
WHEN OLD.content IS NOT NULL AND OLD.content != ''
BEGIN
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));
INSERT INTO memories_fts(rowid, content, tags)
VALUES (NEW.id, COALESCE(NEW.content, ''), COALESCE(NEW.tags, ''));
END;
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
id UNINDEXED,
tokenize='unicode61'
)
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
707
|
|
709
|
16
|
62
|
2026-04-11T12:08:32.704096+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909312704_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEdit ViewSessionScriptsProfilesWindowHe iTerm2ShellEdit ViewSessionScriptsProfilesWindowHelpr,o l•0100% <-zshDOCKERO ₴1tokenize='unicode61'DEV (-zsh)O $2APP (-zsh)• *3-zsh• 84/* frames_fts(full_text,app_name, window_name,browser_url, id) */;CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, CO, c1, c2, с3, с4);CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TRIGGER frames_ai AFTER INSERT ON framesWHEN NEW.full_text IS NOT NULL AND NEW.full_text != "*BEGININSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)VALUES (NEW.id,NEW.full_text,COALESCE(NEW.app_name,"'),COALESCE(NEW.window_name,COALESCECNEW.browser_url,-zsh• *5-zshSat 11 Apr 15:08:32-zshT81X7);END;CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON framesBEGINDELETE FROM frames_fts WHERE id = OLD.id;INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)SELECTNEW. id,COALESCECNEW.full_text,"*),COALESCE(NEW.app_name,"*),COALESCE(NEW.window_name,"'),COALESCE(NEW.browser_url,"*)WHERE NEW.full_text IS NOT NULL AND NEW.full_text != "*;END;BEGINCREATE TRIGGER frames_ad AFTER DELETE ON framesDELETE FROM frames_fts WHERE id = OLD.id;END;CREATE INDEX idx_memories_frame_id ON memories(frame_id);CREATE INDEX idx_elements_source_role_textON elements(source, role, frame_id)WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
NULL
|
-5615697679527450473
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEdit ViewSessionScriptsProfilesWindowHe iTerm2ShellEdit ViewSessionScriptsProfilesWindowHelpr,o l•0100% <-zshDOCKERO ₴1tokenize='unicode61'DEV (-zsh)O $2APP (-zsh)• *3-zsh• 84/* frames_fts(full_text,app_name, window_name,browser_url, id) */;CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, CO, c1, c2, с3, с4);CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TRIGGER frames_ai AFTER INSERT ON framesWHEN NEW.full_text IS NOT NULL AND NEW.full_text != "*BEGININSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)VALUES (NEW.id,NEW.full_text,COALESCE(NEW.app_name,"'),COALESCE(NEW.window_name,COALESCECNEW.browser_url,-zsh• *5-zshSat 11 Apr 15:08:32-zshT81X7);END;CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON framesBEGINDELETE FROM frames_fts WHERE id = OLD.id;INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)SELECTNEW. id,COALESCECNEW.full_text,"*),COALESCE(NEW.app_name,"*),COALESCE(NEW.window_name,"'),COALESCE(NEW.browser_url,"*)WHERE NEW.full_text IS NOT NULL AND NEW.full_text != "*;END;BEGINCREATE TRIGGER frames_ad AFTER DELETE ON framesDELETE FROM frames_fts WHERE id = OLD.id;END;CREATE INDEX idx_memories_frame_id ON memories(frame_id);CREATE INDEX idx_elements_source_role_textON elements(source, role, frame_id)WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
NULL
|
|
710
|
16
|
63
|
2026-04-11T12:08:33.989521+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909313989_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2Shell Edit ViewSessionScriptsProfilesWindo iTerm2Shell Edit ViewSessionScriptsProfilesWindowHelp-zshDOCKERO ₴1tokenize='unicode61'DEV (-zsh)• $2APP (-zsh)• *3-zsh• x4/* frames_fts(full_text,app_name, window_name,browser_url, id) */;CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, cO, c1, c2, с3, c4);CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TRIGGER frames_ai AFTER INSERT ON framesWHEN NEW.full_text IS NOT NULL AND NEW.full_text != "'BEGININSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)VALUES (NEW.id,NEW.full_text,COALESCE(NEW.app_name,"'),COALESCE(NEW.window_name,COALESCECNEW.browser_url,-zsh• *5-zsh100% <7₴86Sat 11 Apr 15:08:33-zshT81X7);END;CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON framesBEGINDELETE FROM frames_fts WHERE id = OLD.id;INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)SELECTNEW. id,COALESCECNEW.full_text,"*),COALESCE(NEW.app_name,"*),COALESCE(NEW.window_name,"'),COALESCE(NEW.browser_url,"*)WHERE NEW.full_text IS NOT NULL AND NEW.full_text != "*;END;BEGINCREATE TRIGGER frames_ad AFTER DELETE ON framesDELETE FROM frames_fts WHERE id = OLD.id;END;CREATE INDEX idx_memories_frame_id ON memories(frame_id);CREATE INDEX idx_elements_source_role_textON elements(source, role, frame_id)WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
NULL
|
3950025176691117525
|
NULL
|
clipboard
|
ocr
|
NULL
|
iTerm2Shell Edit ViewSessionScriptsProfilesWindo iTerm2Shell Edit ViewSessionScriptsProfilesWindowHelp-zshDOCKERO ₴1tokenize='unicode61'DEV (-zsh)• $2APP (-zsh)• *3-zsh• x4/* frames_fts(full_text,app_name, window_name,browser_url, id) */;CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, cO, c1, c2, с3, c4);CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TRIGGER frames_ai AFTER INSERT ON framesWHEN NEW.full_text IS NOT NULL AND NEW.full_text != "'BEGININSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)VALUES (NEW.id,NEW.full_text,COALESCE(NEW.app_name,"'),COALESCE(NEW.window_name,COALESCECNEW.browser_url,-zsh• *5-zsh100% <7₴86Sat 11 Apr 15:08:33-zshT81X7);END;CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON framesBEGINDELETE FROM frames_fts WHERE id = OLD.id;INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)SELECTNEW. id,COALESCECNEW.full_text,"*),COALESCE(NEW.app_name,"*),COALESCE(NEW.window_name,"'),COALESCE(NEW.browser_url,"*)WHERE NEW.full_text IS NOT NULL AND NEW.full_text != "*;END;BEGINCREATE TRIGGER frames_ad AFTER DELETE ON framesDELETE FROM frames_fts WHERE id = OLD.id;END;CREATE INDEX idx_memories_frame_id ON memories(frame_id);CREATE INDEX idx_elements_source_role_textON elements(source, role, frame_id)WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
709
|
|
711
|
16
|
64
|
2026-04-11T12:08:47.580256+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909327580_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2Shell Edit ViewSessionScriptsProfilesWindo iTerm2Shell Edit ViewSessionScriptsProfilesWindowHelp-zshDOCKERO ₴1tokenize='unicode61'DEV (-zsh)• $2APP (-zsh)• *3-zsh• x4/* frames_fts(full_text,app_name, window_name,browser_url, id) */;CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, cO, c1, c2, с3, c4);CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TRIGGER frames_ai AFTER INSERT ON framesWHEN NEW.full_text IS NOT NULL AND NEW.full_text != "'BEGININSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)VALUES (NEW.id,NEW.full_text,COALESCE(NEW.app_name,"'),COALESCE(NEW.window_name,COALESCECNEW.browser_url,-zsh• x5-zsh100% C47O ₴6Sat 11 Apr 15:08:47-zshT81X7);END;CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON framesBEGINDELETE FROM frames_fts WHERE id = OLD.id;INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)SELECTNEW. id,COALESCECNEW.full_text,"*),COALESCE(NEW.app_name,"*),COALESCE(NEW.window_name,"'),COALESCE(NEW.browser_url,"*)WHERE NEW.full_text IS NOT NULL AND NEW.full_text != "*;END;BEGINCREATE TRIGGER frames_ad AFTER DELETE ON framesDELETE FROM frames_fts WHERE id = OLD.id;END;CREATE INDEX idx_memories_frame_id ON memories(frame_id);CREATE INDEX idx_elements_source_role_textON elements(source, role, frame_id)WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
NULL
|
-8655137736130020582
|
NULL
|
visual_change
|
ocr
|
NULL
|
iTerm2Shell Edit ViewSessionScriptsProfilesWindo iTerm2Shell Edit ViewSessionScriptsProfilesWindowHelp-zshDOCKERO ₴1tokenize='unicode61'DEV (-zsh)• $2APP (-zsh)• *3-zsh• x4/* frames_fts(full_text,app_name, window_name,browser_url, id) */;CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, cO, c1, c2, с3, c4);CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TRIGGER frames_ai AFTER INSERT ON framesWHEN NEW.full_text IS NOT NULL AND NEW.full_text != "'BEGININSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)VALUES (NEW.id,NEW.full_text,COALESCE(NEW.app_name,"'),COALESCE(NEW.window_name,COALESCECNEW.browser_url,-zsh• x5-zsh100% C47O ₴6Sat 11 Apr 15:08:47-zshT81X7);END;CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON framesBEGINDELETE FROM frames_fts WHERE id = OLD.id;INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)SELECTNEW. id,COALESCECNEW.full_text,"*),COALESCE(NEW.app_name,"*),COALESCE(NEW.window_name,"'),COALESCE(NEW.browser_url,"*)WHERE NEW.full_text IS NOT NULL AND NEW.full_text != "*;END;BEGINCREATE TRIGGER frames_ad AFTER DELETE ON framesDELETE FROM frames_fts WHERE id = OLD.id;END;CREATE INDEX idx_memories_frame_id ON memories(frame_id);CREATE INDEX idx_elements_source_role_textON elements(source, role, frame_id)WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
NULL
|
|
712
|
16
|
65
|
2026-04-11T12:08:50.622650+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909330622_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2Shell Edit ViewSessionScriptsProfilesWindo iTerm2Shell Edit ViewSessionScriptsProfilesWindowHelp-zshDOCKERO ₴1tokenize='unicode61'DEV (-zsh)• $2APP (-zsh)• *3-zsh• x4/* frames_fts(full_text,app_name, window_name,browser_url, id) */;CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, cO, c1, c2, с3, c4);CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TRIGGER frames_ai AFTER INSERT ON framesWHEN NEW.full_text IS NOT NULL AND NEW.full_text != "'BEGININSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)VALUES (NEW.id,NEW.full_text,COALESCE(NEW.app_name,"'),COALESCE(NEW.window_name,COALESCECNEW.browser_url,-zsh• x5-zsh100% CO ₴6Sat 11 Apr 15:08:50-zshT81X7);END;CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON framesBEGINDELETE FROM frames_fts WHERE id = OLD.id;INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)SELECTNEW.id,COALESCECNEW.full_text,"*),COALESCE(NEW.app_name,"*),COALESCE(NEW.window_name,"'),COALESCE(NEW.browser_url,"*)WHERE NEW.full_text IS NOT NULL AND NEW.full_text != "*;END;BEGINCREATE TRIGGER frames_ad AFTER DELETE ON framesDELETE FROM frames_fts WHERE id = OLD.id;END;CREATE INDEX idx_memories_frame_id ON memories(frame_id);CREATE INDEX idx_elements_source_role_textON elements(source, role, frame_id)WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
NULL
|
8462451458226595770
|
NULL
|
visual_change
|
ocr
|
NULL
|
iTerm2Shell Edit ViewSessionScriptsProfilesWindo iTerm2Shell Edit ViewSessionScriptsProfilesWindowHelp-zshDOCKERO ₴1tokenize='unicode61'DEV (-zsh)• $2APP (-zsh)• *3-zsh• x4/* frames_fts(full_text,app_name, window_name,browser_url, id) */;CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, cO, c1, c2, с3, c4);CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TRIGGER frames_ai AFTER INSERT ON framesWHEN NEW.full_text IS NOT NULL AND NEW.full_text != "'BEGININSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)VALUES (NEW.id,NEW.full_text,COALESCE(NEW.app_name,"'),COALESCE(NEW.window_name,COALESCECNEW.browser_url,-zsh• x5-zsh100% CO ₴6Sat 11 Apr 15:08:50-zshT81X7);END;CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON framesBEGINDELETE FROM frames_fts WHERE id = OLD.id;INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)SELECTNEW.id,COALESCECNEW.full_text,"*),COALESCE(NEW.app_name,"*),COALESCE(NEW.window_name,"'),COALESCE(NEW.browser_url,"*)WHERE NEW.full_text IS NOT NULL AND NEW.full_text != "*;END;BEGINCREATE TRIGGER frames_ad AFTER DELETE ON framesDELETE FROM frames_fts WHERE id = OLD.id;END;CREATE INDEX idx_memories_frame_id ON memories(frame_id);CREATE INDEX idx_elements_source_role_textON elements(source, role, frame_id)WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
711
|
|
713
|
16
|
66
|
2026-04-11T12:08:54.418635+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909334418_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2Shell Edit ViewSessionScriptsProfilesWindo iTerm2Shell Edit ViewSessionScriptsProfilesWindowHelp-zshDOCKERO ₴1tokenize='unicode61'DEV (-zsh)• $2APP (-zsh)• *3-zsh• x4/* frames_fts(full_text,app_name, window_name,browser_url, id) */;CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, cO, c1, c2, с3, c4);CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TRIGGER frames_ai AFTER INSERT ON framesWHEN NEW.full_text IS NOT NULL AND NEW.full_text != "'BEGININSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)VALUES (NEW.id,NEW.full_text,COALESCE(NEW.app_name,"'),COALESCE(NEW.window_name,COALESCECNEW.browser_url,-zsh• *5-zsh100% C47O ₴6Sat 11 Apr 15:08:54-zshT81X7);END;CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON framesBEGINDELETE FROM frames_fts WHERE id = OLD.id;INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)SELECTNEW.id,COALESCECNEW.full_text,"*),COALESCE(NEW.app_name,"*),COALESCE(NEW.window_name,"'),COALESCE(NEW.browser_url,"*)WHERE NEW.full_text IS NOT NULL AND NEW.full_text != "*;END;BEGINCREATE TRIGGER frames_ad AFTER DELETE ON framesDELETE FROM frames_fts WHERE id = OLD.id;END;CREATE INDEX idx_memories_frame_id ON memories(frame_id);CREATE INDEX idx_elements_source_role_textON elements(source, role, frame_id)WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
NULL
|
3295833833635013458
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2Shell Edit ViewSessionScriptsProfilesWindo iTerm2Shell Edit ViewSessionScriptsProfilesWindowHelp-zshDOCKERO ₴1tokenize='unicode61'DEV (-zsh)• $2APP (-zsh)• *3-zsh• x4/* frames_fts(full_text,app_name, window_name,browser_url, id) */;CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, cO, c1, c2, с3, c4);CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TRIGGER frames_ai AFTER INSERT ON framesWHEN NEW.full_text IS NOT NULL AND NEW.full_text != "'BEGININSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)VALUES (NEW.id,NEW.full_text,COALESCE(NEW.app_name,"'),COALESCE(NEW.window_name,COALESCECNEW.browser_url,-zsh• *5-zsh100% C47O ₴6Sat 11 Apr 15:08:54-zshT81X7);END;CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON framesBEGINDELETE FROM frames_fts WHERE id = OLD.id;INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)SELECTNEW.id,COALESCECNEW.full_text,"*),COALESCE(NEW.app_name,"*),COALESCE(NEW.window_name,"'),COALESCE(NEW.browser_url,"*)WHERE NEW.full_text IS NOT NULL AND NEW.full_text != "*;END;BEGINCREATE TRIGGER frames_ad AFTER DELETE ON framesDELETE FROM frames_fts WHERE id = OLD.id;END;CREATE INDEX idx_memories_frame_id ON memories(frame_id);CREATE INDEX idx_elements_source_role_textON elements(source, role, frame_id)WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
NULL
|
|
714
|
NULL
|
0
|
2026-04-11T12:08:55.143763+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909335143_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema"
CREATE TABLE _sqlx_migrations (
version BIGINT PRIMARY KEY,
description TEXT NOT NULL,
installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
success BOOLEAN NOT NULL,
checksum BLOB NOT NULL,
execution_time BIGINT NOT NULL
);
CREATE TABLE video_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL);
CREATE TABLE sqlite_sequence(name,seq);
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE TABLE IF NOT EXISTS "ocr_text" (
frame_id INTEGER NOT NULL,
text TEXT NOT NULL,
text_json TEXT,
app_name TEXT NOT NULL DEFAULT '',
ocr_engine TEXT NOT NULL DEFAULT 'unknown'
, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);
CREATE TABLE tags (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE vision_tags (
vision_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (vision_id, tag_id),
FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE TABLE audio_tags (
audio_chunk_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (audio_chunk_id, tag_id),
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id);
CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id);
CREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);
CREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);
CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);
CREATE TABLE speakers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
metadata JSON
, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);
CREATE TABLE speaker_embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
embedding FLOAT[512] NOT NULL
check(
typeof(embedding) == 'blob'
and vec_length(embedding) == 512
),
speaker_id INTEGER REFERENCES speakers(id)
);
CREATE TABLE IF NOT EXISTS "audio_transcriptions" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_chunk_id INTEGER NOT NULL,
offset_index INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
transcription TEXT NOT NULL,
device TEXT NOT NULL DEFAULT '',
is_input_device BOOLEAN NOT NULL DEFAULT TRUE,
speaker_id INTEGER,
transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME,
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)
);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);
CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);
CREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);
CREATE TABLE ui_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
session_id TEXT,
relative_ms INTEGER NOT NULL DEFAULT 0,
event_type TEXT NOT NULL, -- click, move, scroll, key, text, app_switch, window_focus, clipboard
-- Position
x INTEGER,
y INTEGER,
delta_x INTEGER,
delta_y INTEGER,
-- Mouse/key
button INTEGER,
click_count INTEGER,
key_code INTEGER,
modifiers INTEGER,
-- Text content
text_content TEXT,
text_length INTEGER,
-- App context
app_name TEXT,
app_pid INTEGER,
window_title TEXT,
browser_url TEXT,
-- Element context (from accessibility APIs)
element_role TEXT,
element_name TEXT,
element_value TEXT,
element_description TEXT,
element_automation_id TEXT,
element_bounds TEXT, -- JSON: {"x":0,"y":0,"width":100,"height":50}
-- Frame correlation
frame_id INTEGER,
-- Sync columns
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME
);
CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX idx_ui_events_event_type ON ui_events(event_type);
CREATE INDEX idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX idx_ui_events_session_id ON ui_events(session_id);
CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id);
CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at);
CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL;
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
)
/* ui_events_fts(text_content,app_name,window_title,element_name) */;
CREATE TABLE IF NOT EXISTS 'ui_events_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'ui_events_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'ui_events_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'ui_events_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER ui_events_ad AFTER DELETE ON ui_events BEGIN
INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)
VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);
END;
CREATE TRIGGER ui_events_au AFTER UPDATE ON ui_events BEGIN
INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)
VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);
INSERT INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)
VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);
END;
CREATE UNIQUE INDEX idx_audio_transcription_chunk_text
ON audio_transcriptions(audio_chunk_id, transcription);
CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name);
CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC);
CREATE TABLE pipe_executions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
pipe_name TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'queued',
trigger_type TEXT NOT NULL DEFAULT 'manual',
pid INTEGER,
model TEXT,
provider TEXT,
started_at TEXT,
finished_at TEXT,
stdout TEXT DEFAULT '',
stderr TEXT DEFAULT '',
exit_code INTEGER,
error_type TEXT,
error_message TEXT,
duration_ms INTEGER
, session_path TEXT);
CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status);
CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running';
CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC);
CREATE TABLE pipe_scheduler_state (
pipe_name TEXT PRIMARY KEY,
last_run_at TEXT,
last_success_at TEXT,
consecutive_failures INTEGER DEFAULT 0
);
CREATE TABLE IF NOT EXISTS "frames" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
video_chunk_id INTEGER DEFAULT NULL,
offset_index INTEGER NOT NULL DEFAULT 0,
timestamp TIMESTAMP NOT NULL,
name TEXT,
app_name TEXT DEFAULT NULL,
window_name TEXT DEFAULT NULL,
focused BOOLEAN DEFAULT NULL,
browser_url TEXT DEFAULT NULL,
device_name TEXT NOT NULL DEFAULT '',
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME,
-- New event-driven capture columns
snapshot_path TEXT DEFAULT NULL,
accessibility_text TEXT DEFAULT NULL,
accessibility_tree_json TEXT DEFAULT NULL,
content_hash INTEGER DEFAULT NULL,
simhash INTEGER DEFAULT NULL,
capture_trigger TEXT DEFAULT NULL,
text_source TEXT DEFAULT NULL, cloud_blob_id TEXT DEFAULT NULL, full_text TEXT DEFAULT NULL, elements_ref_frame_id INTEGER DEFAULT NULL,
FOREIGN KEY (video_chunk_id) REFERENCES video_chunks(id)
);
CREATE INDEX idx_frames_timestamp ON frames(timestamp);
CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name);
CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL;
CREATE TRIGGER ui_events_ai AFTER INSERT ON ui_events BEGIN
INSERT OR IGNORE INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)
VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);
END;
CREATE TABLE meetings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
meeting_start TEXT NOT NULL,
meeting_end TEXT,
meeting_app TEXT NOT NULL,
title TEXT,
attendees TEXT,
detection_source TEXT NOT NULL DEFAULT 'app',
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
, note TEXT);
CREATE INDEX idx_meetings_start ON meetings(meeting_start);
CREATE INDEX idx_meetings_end ON meetings(meeting_end);
CREATE TABLE elements (
id INTEGER PRIMARY KEY AUTOINCREMENT,
frame_id INTEGER NOT NULL,
source TEXT NOT NULL, -- 'ocr' | 'accessibility'
role TEXT NOT NULL, -- OCR: 'page','block','paragraph','line','word'
-- AX: 'AXButton','AXTextField','AXStaticText', etc.
text TEXT, -- element text content (NULL for container nodes)
parent_id INTEGER, -- self-referential FK for tree hierarchy (NULL = root)
depth INTEGER NOT NULL DEFAULT 0, -- tree depth (0 = root)
left_bound REAL, -- normalized 0-1 bounding box
top_bound REAL,
width_bound REAL,
height_bound REAL,
confidence REAL, -- OCR confidence (0-100), NULL for AX
sort_order INTEGER NOT NULL DEFAULT 0, properties TEXT, -- sibling order within parent
FOREIGN KEY (frame_id) REFERENCES frames(id),
FOREIGN KEY (parent_id) REFERENCES elements(id)
);
CREATE INDEX idx_elements_frame_id ON elements(frame_id);
CREATE INDEX idx_elements_parent_id ON elements(parent_id);
CREATE INDEX idx_elements_source ON elements(source);
CREATE INDEX idx_elements_frame_source ON elements(frame_id, source);
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
/* elements_fts(text,role,frame_id) */;
CREATE TABLE IF NOT EXISTS 'elements_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'elements_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'elements_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'elements_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER elements_ai AFTER INSERT ON elements
WHEN NEW.text IS NOT NULL AND NEW.text != ''
BEGIN
INSERT INTO elements_fts(rowid, text, role, frame_id)
VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);
END;
CREATE TRIGGER elements_ad AFTER DELETE ON elements
WHEN OLD.text IS NOT NULL AND OLD.text != ''
BEGIN
INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)
VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);
END;
CREATE TRIGGER elements_au AFTER UPDATE ON elements
WHEN OLD.text IS NOT NULL AND OLD.text != ''
BEGIN
INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)
VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);
INSERT INTO elements_fts(rowid, text, role, frame_id)
VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);
END;
CREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(
transcription,
device,
speaker_id,
content='audio_transcriptions',
content_rowid='id',
tokenize='unicode61'
)
/* audio_transcriptions_fts(transcription,device,speaker_id) */;
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions
WHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL;
CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL;
CREATE TABLE memories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT NOT NULL,
source TEXT NOT NULL DEFAULT 'user',
source_context TEXT,
tags TEXT DEFAULT '[]',
importance REAL DEFAULT 0.5,
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
, frame_id INTEGER REFERENCES frames(id) ON DELETE SET NULL);
CREATE INDEX idx_memories_created_at ON memories(created_at);
CREATE INDEX idx_memories_importance ON memories(importance DESC);
CREATE INDEX idx_memories_source ON memories(source);
CREATE VIRTUAL TABLE memories_fts USING fts5(
content,
tags,
content='memories',
content_rowid='id',
tokenize='unicode61'
)
/* memories_fts(content,tags) */;
CREATE TABLE IF NOT EXISTS 'memories_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'memories_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'memories_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'memories_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER memories_ai AFTER INSERT ON memories
WHEN NEW.content IS NOT NULL AND NEW.content != ''
BEGIN
INSERT INTO memories_fts(rowid, content, tags)
VALUES (NEW.id, NEW.content, COALESCE(NEW.tags, ''));
END;
CREATE TRIGGER memories_ad AFTER DELETE ON memories
WHEN OLD.content IS NOT NULL AND OLD.content != ''
BEGIN
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));
END;
CREATE TRIGGER memories_au AFTER UPDATE ON memories
WHEN OLD.content IS NOT NULL AND OLD.content != ''
BEGIN
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));
INSERT INTO memories_fts(rowid, content, tags)
VALUES (NEW.id, COALESCE(NEW.content, ''), COALESCE(NEW.tags, ''));
END;
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
id UNINDEXED,
tokenize='unicode61'
)
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\"\n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema\"\nCREATE TABLE _sqlx_migrations (\n version BIGINT PRIMARY KEY,\n description TEXT NOT NULL,\n installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,\n success BOOLEAN NOT NULL,\n checksum BLOB NOT NULL,\n execution_time BIGINT NOT NULL\n);\nCREATE TABLE video_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL);\nCREATE TABLE sqlite_sequence(name,seq);\nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE TABLE IF NOT EXISTS \"ocr_text\" (\n frame_id INTEGER NOT NULL,\n text TEXT NOT NULL,\n text_json TEXT,\n app_name TEXT NOT NULL DEFAULT '',\n ocr_engine TEXT NOT NULL DEFAULT 'unknown'\n, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);\nCREATE TABLE tags (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\nCREATE TABLE vision_tags (\n vision_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (vision_id, tag_id),\n FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE TABLE audio_tags (\n audio_chunk_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (audio_chunk_id, tag_id),\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id);\nCREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id);\nCREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);\nCREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);\nCREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);\nCREATE TABLE speakers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT,\n metadata JSON\n, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);\nCREATE TABLE speaker_embeddings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding FLOAT[512] NOT NULL\n check(\n typeof(embedding) == 'blob'\n and vec_length(embedding) == 512\n ),\n speaker_id INTEGER REFERENCES speakers(id)\n);\nCREATE TABLE IF NOT EXISTS \"audio_transcriptions\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n audio_chunk_id INTEGER NOT NULL,\n offset_index INTEGER NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n transcription TEXT NOT NULL,\n device TEXT NOT NULL DEFAULT '',\n is_input_device BOOLEAN NOT NULL DEFAULT TRUE,\n speaker_id INTEGER,\n transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME,\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)\n);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);\nCREATE INDEX idx_ocr_text_length ON ocr_text (text_length);\nCREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);\nCREATE TABLE ui_events (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n session_id TEXT,\n relative_ms INTEGER NOT NULL DEFAULT 0,\n event_type TEXT NOT NULL, -- click, move, scroll, key, text, app_switch, window_focus, clipboard\n -- Position\n x INTEGER,\n y INTEGER,\n delta_x INTEGER,\n delta_y INTEGER,\n -- Mouse/key\n button INTEGER,\n click_count INTEGER,\n key_code INTEGER,\n modifiers INTEGER,\n -- Text content\n text_content TEXT,\n text_length INTEGER,\n -- App context\n app_name TEXT,\n app_pid INTEGER,\n window_title TEXT,\n browser_url TEXT,\n -- Element context (from accessibility APIs)\n element_role TEXT,\n element_name TEXT,\n element_value TEXT,\n element_description TEXT,\n element_automation_id TEXT,\n element_bounds TEXT, -- JSON: {\"x\":0,\"y\":0,\"width\":100,\"height\":50}\n -- Frame correlation\n frame_id INTEGER,\n -- Sync columns\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME\n);\nCREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX idx_ui_events_event_type ON ui_events(event_type);\nCREATE INDEX idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX idx_ui_events_session_id ON ui_events(session_id);\nCREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id);\nCREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at);\nCREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL;\nCREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content,\n app_name,\n window_title,\n element_name,\n content='ui_events',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* ui_events_fts(text_content,app_name,window_title,element_name) */;\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER ui_events_ad AFTER DELETE ON ui_events BEGIN\n INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)\n VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);\nEND;\nCREATE TRIGGER ui_events_au AFTER UPDATE ON ui_events BEGIN\n INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)\n VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);\n INSERT INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);\nEND;\nCREATE UNIQUE INDEX idx_audio_transcription_chunk_text\nON audio_transcriptions(audio_chunk_id, transcription);\nCREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name);\nCREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC);\nCREATE TABLE pipe_executions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n pipe_name TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'queued',\n trigger_type TEXT NOT NULL DEFAULT 'manual',\n pid INTEGER,\n model TEXT,\n provider TEXT,\n started_at TEXT,\n finished_at TEXT,\n stdout TEXT DEFAULT '',\n stderr TEXT DEFAULT '',\n exit_code INTEGER,\n error_type TEXT,\n error_message TEXT,\n duration_ms INTEGER\n, session_path TEXT);\nCREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status);\nCREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running';\nCREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC);\nCREATE TABLE pipe_scheduler_state (\n pipe_name TEXT PRIMARY KEY,\n last_run_at TEXT,\n last_success_at TEXT,\n consecutive_failures INTEGER DEFAULT 0\n);\nCREATE TABLE IF NOT EXISTS \"frames\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n video_chunk_id INTEGER DEFAULT NULL,\n offset_index INTEGER NOT NULL DEFAULT 0,\n timestamp TIMESTAMP NOT NULL,\n name TEXT,\n app_name TEXT DEFAULT NULL,\n window_name TEXT DEFAULT NULL,\n focused BOOLEAN DEFAULT NULL,\n browser_url TEXT DEFAULT NULL,\n device_name TEXT NOT NULL DEFAULT '',\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME,\n -- New event-driven capture columns\n snapshot_path TEXT DEFAULT NULL,\n accessibility_text TEXT DEFAULT NULL,\n accessibility_tree_json TEXT DEFAULT NULL,\n content_hash INTEGER DEFAULT NULL,\n simhash INTEGER DEFAULT NULL,\n capture_trigger TEXT DEFAULT NULL,\n text_source TEXT DEFAULT NULL, cloud_blob_id TEXT DEFAULT NULL, full_text TEXT DEFAULT NULL, elements_ref_frame_id INTEGER DEFAULT NULL,\n FOREIGN KEY (video_chunk_id) REFERENCES video_chunks(id)\n);\nCREATE INDEX idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX idx_frames_timestamp_device\n ON frames(timestamp, device_name);\nCREATE INDEX idx_frames_snapshot_path\n ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL;\nCREATE TRIGGER ui_events_ai AFTER INSERT ON ui_events BEGIN\n INSERT OR IGNORE INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);\nEND;\nCREATE TABLE meetings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n meeting_start TEXT NOT NULL,\n meeting_end TEXT,\n meeting_app TEXT NOT NULL,\n title TEXT,\n attendees TEXT,\n detection_source TEXT NOT NULL DEFAULT 'app',\n created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\n, note TEXT);\nCREATE INDEX idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX idx_meetings_end ON meetings(meeting_end);\nCREATE TABLE elements (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n frame_id INTEGER NOT NULL,\n source TEXT NOT NULL, -- 'ocr' | 'accessibility'\n role TEXT NOT NULL, -- OCR: 'page','block','paragraph','line','word'\n -- AX: 'AXButton','AXTextField','AXStaticText', etc.\n text TEXT, -- element text content (NULL for container nodes)\n parent_id INTEGER, -- self-referential FK for tree hierarchy (NULL = root)\n depth INTEGER NOT NULL DEFAULT 0, -- tree depth (0 = root)\n left_bound REAL, -- normalized 0-1 bounding box\n top_bound REAL,\n width_bound REAL,\n height_bound REAL,\n confidence REAL, -- OCR confidence (0-100), NULL for AX\n sort_order INTEGER NOT NULL DEFAULT 0, properties TEXT, -- sibling order within parent\n FOREIGN KEY (frame_id) REFERENCES frames(id),\n FOREIGN KEY (parent_id) REFERENCES elements(id)\n);\nCREATE INDEX idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX idx_elements_parent_id ON elements(parent_id);\nCREATE INDEX idx_elements_source ON elements(source);\nCREATE INDEX idx_elements_frame_source ON elements(frame_id, source);\nCREATE VIRTUAL TABLE elements_fts USING fts5(\n text,\n role,\n frame_id UNINDEXED,\n content='elements',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* elements_fts(text,role,frame_id) */;\nCREATE TABLE IF NOT EXISTS 'elements_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'elements_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'elements_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'elements_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER elements_ai AFTER INSERT ON elements\nWHEN NEW.text IS NOT NULL AND NEW.text != ''\nBEGIN\n INSERT INTO elements_fts(rowid, text, role, frame_id)\n VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);\nEND;\nCREATE TRIGGER elements_ad AFTER DELETE ON elements\nWHEN OLD.text IS NOT NULL AND OLD.text != ''\nBEGIN\n INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)\n VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);\nEND;\nCREATE TRIGGER elements_au AFTER UPDATE ON elements\nWHEN OLD.text IS NOT NULL AND OLD.text != ''\nBEGIN\n INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)\n VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);\n INSERT INTO elements_fts(rowid, text, role, frame_id)\n VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);\nEND;\nCREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(\n transcription,\n device,\n speaker_id,\n content='audio_transcriptions',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* audio_transcriptions_fts(transcription,device,speaker_id) */;\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions\nWHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE INDEX idx_video_chunks_cloud_blob_id\n ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL;\nCREATE INDEX idx_frames_cloud_blob_id\n ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL;\nCREATE TABLE memories (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n content TEXT NOT NULL,\n source TEXT NOT NULL DEFAULT 'user',\n source_context TEXT,\n tags TEXT DEFAULT '[]',\n importance REAL DEFAULT 0.5,\n created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),\n updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\n, frame_id INTEGER REFERENCES frames(id) ON DELETE SET NULL);\nCREATE INDEX idx_memories_created_at ON memories(created_at);\nCREATE INDEX idx_memories_importance ON memories(importance DESC);\nCREATE INDEX idx_memories_source ON memories(source);\nCREATE VIRTUAL TABLE memories_fts USING fts5(\n content,\n tags,\n content='memories',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* memories_fts(content,tags) */;\nCREATE TABLE IF NOT EXISTS 'memories_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'memories_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'memories_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'memories_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER memories_ai AFTER INSERT ON memories\nWHEN NEW.content IS NOT NULL AND NEW.content != ''\nBEGIN\n INSERT INTO memories_fts(rowid, content, tags)\n VALUES (NEW.id, NEW.content, COALESCE(NEW.tags, ''));\nEND;\nCREATE TRIGGER memories_ad AFTER DELETE ON memories\nWHEN OLD.content IS NOT NULL AND OLD.content != ''\nBEGIN\n INSERT INTO memories_fts(memories_fts, rowid, content, tags)\n VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));\nEND;\nCREATE TRIGGER memories_au AFTER UPDATE ON memories\nWHEN OLD.content IS NOT NULL AND OLD.content != ''\nBEGIN\n INSERT INTO memories_fts(memories_fts, rowid, content, tags)\n VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));\n INSERT INTO memories_fts(rowid, content, tags)\n VALUES (NEW.id, COALESCE(NEW.content, ''), COALESCE(NEW.tags, ''));\nEND;\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text,\n app_name,\n window_name,\n browser_url,\n id UNINDEXED,\n tokenize='unicode61'\n)\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":"drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\"\n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema\"\nCREATE TABLE _sqlx_migrations (\n version BIGINT PRIMARY KEY,\n description TEXT NOT NULL,\n installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,\n success BOOLEAN NOT NULL,\n checksum BLOB NOT NULL,\n execution_time BIGINT NOT NULL\n);\nCREATE TABLE video_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL);\nCREATE TABLE sqlite_sequence(name,seq);\nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE TABLE IF NOT EXISTS \"ocr_text\" (\n frame_id INTEGER NOT NULL,\n text TEXT NOT NULL,\n text_json TEXT,\n app_name TEXT NOT NULL DEFAULT '',\n ocr_engine TEXT NOT NULL DEFAULT 'unknown'\n, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);\nCREATE TABLE tags (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\nCREATE TABLE vision_tags (\n vision_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (vision_id, tag_id),\n FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE TABLE audio_tags (\n audio_chunk_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (audio_chunk_id, tag_id),\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id);\nCREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id);\nCREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);\nCREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);\nCREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);\nCREATE TABLE speakers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT,\n metadata JSON\n, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);\nCREATE TABLE speaker_embeddings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding FLOAT[512] NOT NULL\n check(\n typeof(embedding) == 'blob'\n and vec_length(embedding) == 512\n ),\n speaker_id INTEGER REFERENCES speakers(id)\n);\nCREATE TABLE IF NOT EXISTS \"audio_transcriptions\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n audio_chunk_id INTEGER NOT NULL,\n offset_index INTEGER NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n transcription TEXT NOT NULL,\n device TEXT NOT NULL DEFAULT '',\n is_input_device BOOLEAN NOT NULL DEFAULT TRUE,\n speaker_id INTEGER,\n transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME,\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)\n);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);\nCREATE INDEX idx_ocr_text_length ON ocr_text (text_length);\nCREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);\nCREATE TABLE ui_events (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n session_id TEXT,\n relative_ms INTEGER NOT NULL DEFAULT 0,\n event_type TEXT NOT NULL, -- click, move, scroll, key, text, app_switch, window_focus, clipboard\n -- Position\n x INTEGER,\n y INTEGER,\n delta_x INTEGER,\n delta_y INTEGER,\n -- Mouse/key\n button INTEGER,\n click_count INTEGER,\n key_code INTEGER,\n modifiers INTEGER,\n -- Text content\n text_content TEXT,\n text_length INTEGER,\n -- App context\n app_name TEXT,\n app_pid INTEGER,\n window_title TEXT,\n browser_url TEXT,\n -- Element context (from accessibility APIs)\n element_role TEXT,\n element_name TEXT,\n element_value TEXT,\n element_description TEXT,\n element_automation_id TEXT,\n element_bounds TEXT, -- JSON: {\"x\":0,\"y\":0,\"width\":100,\"height\":50}\n -- Frame correlation\n frame_id INTEGER,\n -- Sync columns\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME\n);\nCREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX idx_ui_events_event_type ON ui_events(event_type);\nCREATE INDEX idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX idx_ui_events_session_id ON ui_events(session_id);\nCREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id);\nCREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at);\nCREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL;\nCREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content,\n app_name,\n window_title,\n element_name,\n content='ui_events',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* ui_events_fts(text_content,app_name,window_title,element_name) */;\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER ui_events_ad AFTER DELETE ON ui_events BEGIN\n INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)\n VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);\nEND;\nCREATE TRIGGER ui_events_au AFTER UPDATE ON ui_events BEGIN\n INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)\n VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);\n INSERT INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);\nEND;\nCREATE UNIQUE INDEX idx_audio_transcription_chunk_text\nON audio_transcriptions(audio_chunk_id, transcription);\nCREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name);\nCREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC);\nCREATE TABLE pipe_executions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n pipe_name TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'queued',\n trigger_type TEXT NOT NULL DEFAULT 'manual',\n pid INTEGER,\n model TEXT,\n provider TEXT,\n started_at TEXT,\n finished_at TEXT,\n stdout TEXT DEFAULT '',\n stderr TEXT DEFAULT '',\n exit_code INTEGER,\n error_type TEXT,\n error_message TEXT,\n duration_ms INTEGER\n, session_path TEXT);\nCREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status);\nCREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running';\nCREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC);\nCREATE TABLE pipe_scheduler_state (\n pipe_name TEXT PRIMARY KEY,\n last_run_at TEXT,\n last_success_at TEXT,\n consecutive_failures INTEGER DEFAULT 0\n);\nCREATE TABLE IF NOT EXISTS \"frames\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n video_chunk_id INTEGER DEFAULT NULL,\n offset_index INTEGER NOT NULL DEFAULT 0,\n timestamp TIMESTAMP NOT NULL,\n name TEXT,\n app_name TEXT DEFAULT NULL,\n window_name TEXT DEFAULT NULL,\n focused BOOLEAN DEFAULT NULL,\n browser_url TEXT DEFAULT NULL,\n device_name TEXT NOT NULL DEFAULT '',\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME,\n -- New event-driven capture columns\n snapshot_path TEXT DEFAULT NULL,\n accessibility_text TEXT DEFAULT NULL,\n accessibility_tree_json TEXT DEFAULT NULL,\n content_hash INTEGER DEFAULT NULL,\n simhash INTEGER DEFAULT NULL,\n capture_trigger TEXT DEFAULT NULL,\n text_source TEXT DEFAULT NULL, cloud_blob_id TEXT DEFAULT NULL, full_text TEXT DEFAULT NULL, elements_ref_frame_id INTEGER DEFAULT NULL,\n FOREIGN KEY (video_chunk_id) REFERENCES video_chunks(id)\n);\nCREATE INDEX idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX idx_frames_timestamp_device\n ON frames(timestamp, device_name);\nCREATE INDEX idx_frames_snapshot_path\n ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL;\nCREATE TRIGGER ui_events_ai AFTER INSERT ON ui_events BEGIN\n INSERT OR IGNORE INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);\nEND;\nCREATE TABLE meetings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n meeting_start TEXT NOT NULL,\n meeting_end TEXT,\n meeting_app TEXT NOT NULL,\n title TEXT,\n attendees TEXT,\n detection_source TEXT NOT NULL DEFAULT 'app',\n created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\n, note TEXT);\nCREATE INDEX idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX idx_meetings_end ON meetings(meeting_end);\nCREATE TABLE elements (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n frame_id INTEGER NOT NULL,\n source TEXT NOT NULL, -- 'ocr' | 'accessibility'\n role TEXT NOT NULL, -- OCR: 'page','block','paragraph','line','word'\n -- AX: 'AXButton','AXTextField','AXStaticText', etc.\n text TEXT, -- element text content (NULL for container nodes)\n parent_id INTEGER, -- self-referential FK for tree hierarchy (NULL = root)\n depth INTEGER NOT NULL DEFAULT 0, -- tree depth (0 = root)\n left_bound REAL, -- normalized 0-1 bounding box\n top_bound REAL,\n width_bound REAL,\n height_bound REAL,\n confidence REAL, -- OCR confidence (0-100), NULL for AX\n sort_order INTEGER NOT NULL DEFAULT 0, properties TEXT, -- sibling order within parent\n FOREIGN KEY (frame_id) REFERENCES frames(id),\n FOREIGN KEY (parent_id) REFERENCES elements(id)\n);\nCREATE INDEX idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX idx_elements_parent_id ON elements(parent_id);\nCREATE INDEX idx_elements_source ON elements(source);\nCREATE INDEX idx_elements_frame_source ON elements(frame_id, source);\nCREATE VIRTUAL TABLE elements_fts USING fts5(\n text,\n role,\n frame_id UNINDEXED,\n content='elements',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* elements_fts(text,role,frame_id) */;\nCREATE TABLE IF NOT EXISTS 'elements_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'elements_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'elements_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'elements_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER elements_ai AFTER INSERT ON elements\nWHEN NEW.text IS NOT NULL AND NEW.text != ''\nBEGIN\n INSERT INTO elements_fts(rowid, text, role, frame_id)\n VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);\nEND;\nCREATE TRIGGER elements_ad AFTER DELETE ON elements\nWHEN OLD.text IS NOT NULL AND OLD.text != ''\nBEGIN\n INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)\n VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);\nEND;\nCREATE TRIGGER elements_au AFTER UPDATE ON elements\nWHEN OLD.text IS NOT NULL AND OLD.text != ''\nBEGIN\n INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)\n VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);\n INSERT INTO elements_fts(rowid, text, role, frame_id)\n VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);\nEND;\nCREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(\n transcription,\n device,\n speaker_id,\n content='audio_transcriptions',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* audio_transcriptions_fts(transcription,device,speaker_id) */;\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions\nWHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE INDEX idx_video_chunks_cloud_blob_id\n ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL;\nCREATE INDEX idx_frames_cloud_blob_id\n ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL;\nCREATE TABLE memories (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n content TEXT NOT NULL,\n source TEXT NOT NULL DEFAULT 'user',\n source_context TEXT,\n tags TEXT DEFAULT '[]',\n importance REAL DEFAULT 0.5,\n created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),\n updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\n, frame_id INTEGER REFERENCES frames(id) ON DELETE SET NULL);\nCREATE INDEX idx_memories_created_at ON memories(created_at);\nCREATE INDEX idx_memories_importance ON memories(importance DESC);\nCREATE INDEX idx_memories_source ON memories(source);\nCREATE VIRTUAL TABLE memories_fts USING fts5(\n content,\n tags,\n content='memories',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* memories_fts(content,tags) */;\nCREATE TABLE IF NOT EXISTS 'memories_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'memories_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'memories_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'memories_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER memories_ai AFTER INSERT ON memories\nWHEN NEW.content IS NOT NULL AND NEW.content != ''\nBEGIN\n INSERT INTO memories_fts(rowid, content, tags)\n VALUES (NEW.id, NEW.content, COALESCE(NEW.tags, ''));\nEND;\nCREATE TRIGGER memories_ad AFTER DELETE ON memories\nWHEN OLD.content IS NOT NULL AND OLD.content != ''\nBEGIN\n INSERT INTO memories_fts(memories_fts, rowid, content, tags)\n VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));\nEND;\nCREATE TRIGGER memories_au AFTER UPDATE ON memories\nWHEN OLD.content IS NOT NULL AND OLD.content != ''\nBEGIN\n INSERT INTO memories_fts(memories_fts, rowid, content, tags)\n VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));\n INSERT INTO memories_fts(rowid, content, tags)\n VALUES (NEW.id, COALESCE(NEW.content, ''), COALESCE(NEW.tags, ''));\nEND;\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text,\n app_name,\n window_name,\n browser_url,\n id UNINDEXED,\n tokenize='unicode61'\n)\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
5853192385605379516
|
3173372984674339333
|
click
|
accessibility
|
NULL
|
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema"
CREATE TABLE _sqlx_migrations (
version BIGINT PRIMARY KEY,
description TEXT NOT NULL,
installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
success BOOLEAN NOT NULL,
checksum BLOB NOT NULL,
execution_time BIGINT NOT NULL
);
CREATE TABLE video_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL);
CREATE TABLE sqlite_sequence(name,seq);
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE TABLE IF NOT EXISTS "ocr_text" (
frame_id INTEGER NOT NULL,
text TEXT NOT NULL,
text_json TEXT,
app_name TEXT NOT NULL DEFAULT '',
ocr_engine TEXT NOT NULL DEFAULT 'unknown'
, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);
CREATE TABLE tags (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE vision_tags (
vision_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (vision_id, tag_id),
FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE TABLE audio_tags (
audio_chunk_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (audio_chunk_id, tag_id),
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id);
CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id);
CREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);
CREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);
CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);
CREATE TABLE speakers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
metadata JSON
, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);
CREATE TABLE speaker_embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
embedding FLOAT[512] NOT NULL
check(
typeof(embedding) == 'blob'
and vec_length(embedding) == 512
),
speaker_id INTEGER REFERENCES speakers(id)
);
CREATE TABLE IF NOT EXISTS "audio_transcriptions" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_chunk_id INTEGER NOT NULL,
offset_index INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
transcription TEXT NOT NULL,
device TEXT NOT NULL DEFAULT '',
is_input_device BOOLEAN NOT NULL DEFAULT TRUE,
speaker_id INTEGER,
transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME,
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)
);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);
CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);
CREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);
CREATE TABLE ui_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
session_id TEXT,
relative_ms INTEGER NOT NULL DEFAULT 0,
event_type TEXT NOT NULL, -- click, move, scroll, key, text, app_switch, window_focus, clipboard
-- Position
x INTEGER,
y INTEGER,
delta_x INTEGER,
delta_y INTEGER,
-- Mouse/key
button INTEGER,
click_count INTEGER,
key_code INTEGER,
modifiers INTEGER,
-- Text content
text_content TEXT,
text_length INTEGER,
-- App context
app_name TEXT,
app_pid INTEGER,
window_title TEXT,
browser_url TEXT,
-- Element context (from accessibility APIs)
element_role TEXT,
element_name TEXT,
element_value TEXT,
element_description TEXT,
element_automation_id TEXT,
element_bounds TEXT, -- JSON: {"x":0,"y":0,"width":100,"height":50}
-- Frame correlation
frame_id INTEGER,
-- Sync columns
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME
);
CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX idx_ui_events_event_type ON ui_events(event_type);
CREATE INDEX idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX idx_ui_events_session_id ON ui_events(session_id);
CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id);
CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at);
CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL;
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
)
/* ui_events_fts(text_content,app_name,window_title,element_name) */;
CREATE TABLE IF NOT EXISTS 'ui_events_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'ui_events_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'ui_events_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'ui_events_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER ui_events_ad AFTER DELETE ON ui_events BEGIN
INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)
VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);
END;
CREATE TRIGGER ui_events_au AFTER UPDATE ON ui_events BEGIN
INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)
VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);
INSERT INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)
VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);
END;
CREATE UNIQUE INDEX idx_audio_transcription_chunk_text
ON audio_transcriptions(audio_chunk_id, transcription);
CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name);
CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC);
CREATE TABLE pipe_executions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
pipe_name TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'queued',
trigger_type TEXT NOT NULL DEFAULT 'manual',
pid INTEGER,
model TEXT,
provider TEXT,
started_at TEXT,
finished_at TEXT,
stdout TEXT DEFAULT '',
stderr TEXT DEFAULT '',
exit_code INTEGER,
error_type TEXT,
error_message TEXT,
duration_ms INTEGER
, session_path TEXT);
CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status);
CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running';
CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC);
CREATE TABLE pipe_scheduler_state (
pipe_name TEXT PRIMARY KEY,
last_run_at TEXT,
last_success_at TEXT,
consecutive_failures INTEGER DEFAULT 0
);
CREATE TABLE IF NOT EXISTS "frames" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
video_chunk_id INTEGER DEFAULT NULL,
offset_index INTEGER NOT NULL DEFAULT 0,
timestamp TIMESTAMP NOT NULL,
name TEXT,
app_name TEXT DEFAULT NULL,
window_name TEXT DEFAULT NULL,
focused BOOLEAN DEFAULT NULL,
browser_url TEXT DEFAULT NULL,
device_name TEXT NOT NULL DEFAULT '',
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME,
-- New event-driven capture columns
snapshot_path TEXT DEFAULT NULL,
accessibility_text TEXT DEFAULT NULL,
accessibility_tree_json TEXT DEFAULT NULL,
content_hash INTEGER DEFAULT NULL,
simhash INTEGER DEFAULT NULL,
capture_trigger TEXT DEFAULT NULL,
text_source TEXT DEFAULT NULL, cloud_blob_id TEXT DEFAULT NULL, full_text TEXT DEFAULT NULL, elements_ref_frame_id INTEGER DEFAULT NULL,
FOREIGN KEY (video_chunk_id) REFERENCES video_chunks(id)
);
CREATE INDEX idx_frames_timestamp ON frames(timestamp);
CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name);
CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL;
CREATE TRIGGER ui_events_ai AFTER INSERT ON ui_events BEGIN
INSERT OR IGNORE INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)
VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);
END;
CREATE TABLE meetings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
meeting_start TEXT NOT NULL,
meeting_end TEXT,
meeting_app TEXT NOT NULL,
title TEXT,
attendees TEXT,
detection_source TEXT NOT NULL DEFAULT 'app',
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
, note TEXT);
CREATE INDEX idx_meetings_start ON meetings(meeting_start);
CREATE INDEX idx_meetings_end ON meetings(meeting_end);
CREATE TABLE elements (
id INTEGER PRIMARY KEY AUTOINCREMENT,
frame_id INTEGER NOT NULL,
source TEXT NOT NULL, -- 'ocr' | 'accessibility'
role TEXT NOT NULL, -- OCR: 'page','block','paragraph','line','word'
-- AX: 'AXButton','AXTextField','AXStaticText', etc.
text TEXT, -- element text content (NULL for container nodes)
parent_id INTEGER, -- self-referential FK for tree hierarchy (NULL = root)
depth INTEGER NOT NULL DEFAULT 0, -- tree depth (0 = root)
left_bound REAL, -- normalized 0-1 bounding box
top_bound REAL,
width_bound REAL,
height_bound REAL,
confidence REAL, -- OCR confidence (0-100), NULL for AX
sort_order INTEGER NOT NULL DEFAULT 0, properties TEXT, -- sibling order within parent
FOREIGN KEY (frame_id) REFERENCES frames(id),
FOREIGN KEY (parent_id) REFERENCES elements(id)
);
CREATE INDEX idx_elements_frame_id ON elements(frame_id);
CREATE INDEX idx_elements_parent_id ON elements(parent_id);
CREATE INDEX idx_elements_source ON elements(source);
CREATE INDEX idx_elements_frame_source ON elements(frame_id, source);
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
/* elements_fts(text,role,frame_id) */;
CREATE TABLE IF NOT EXISTS 'elements_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'elements_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'elements_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'elements_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER elements_ai AFTER INSERT ON elements
WHEN NEW.text IS NOT NULL AND NEW.text != ''
BEGIN
INSERT INTO elements_fts(rowid, text, role, frame_id)
VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);
END;
CREATE TRIGGER elements_ad AFTER DELETE ON elements
WHEN OLD.text IS NOT NULL AND OLD.text != ''
BEGIN
INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)
VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);
END;
CREATE TRIGGER elements_au AFTER UPDATE ON elements
WHEN OLD.text IS NOT NULL AND OLD.text != ''
BEGIN
INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)
VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);
INSERT INTO elements_fts(rowid, text, role, frame_id)
VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);
END;
CREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(
transcription,
device,
speaker_id,
content='audio_transcriptions',
content_rowid='id',
tokenize='unicode61'
)
/* audio_transcriptions_fts(transcription,device,speaker_id) */;
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions
WHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL;
CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL;
CREATE TABLE memories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT NOT NULL,
source TEXT NOT NULL DEFAULT 'user',
source_context TEXT,
tags TEXT DEFAULT '[]',
importance REAL DEFAULT 0.5,
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
, frame_id INTEGER REFERENCES frames(id) ON DELETE SET NULL);
CREATE INDEX idx_memories_created_at ON memories(created_at);
CREATE INDEX idx_memories_importance ON memories(importance DESC);
CREATE INDEX idx_memories_source ON memories(source);
CREATE VIRTUAL TABLE memories_fts USING fts5(
content,
tags,
content='memories',
content_rowid='id',
tokenize='unicode61'
)
/* memories_fts(content,tags) */;
CREATE TABLE IF NOT EXISTS 'memories_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'memories_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'memories_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'memories_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER memories_ai AFTER INSERT ON memories
WHEN NEW.content IS NOT NULL AND NEW.content != ''
BEGIN
INSERT INTO memories_fts(rowid, content, tags)
VALUES (NEW.id, NEW.content, COALESCE(NEW.tags, ''));
END;
CREATE TRIGGER memories_ad AFTER DELETE ON memories
WHEN OLD.content IS NOT NULL AND OLD.content != ''
BEGIN
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));
END;
CREATE TRIGGER memories_au AFTER UPDATE ON memories
WHEN OLD.content IS NOT NULL AND OLD.content != ''
BEGIN
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));
INSERT INTO memories_fts(rowid, content, tags)
VALUES (NEW.id, COALESCE(NEW.content, ''), COALESCE(NEW.tags, ''));
END;
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
id UNINDEXED,
tokenize='unicode61'
)
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
713
|
|
715
|
17
|
0
|
2026-04-11T12:09:26.746273+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909366746_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema"
CREATE TABLE _sqlx_migrations (
version BIGINT PRIMARY KEY,
description TEXT NOT NULL,
installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
success BOOLEAN NOT NULL,
checksum BLOB NOT NULL,
execution_time BIGINT NOT NULL
);
CREATE TABLE video_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL);
CREATE TABLE sqlite_sequence(name,seq);
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE TABLE IF NOT EXISTS "ocr_text" (
frame_id INTEGER NOT NULL,
text TEXT NOT NULL,
text_json TEXT,
app_name TEXT NOT NULL DEFAULT '',
ocr_engine TEXT NOT NULL DEFAULT 'unknown'
, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);
CREATE TABLE tags (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE vision_tags (
vision_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (vision_id, tag_id),
FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE TABLE audio_tags (
audio_chunk_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (audio_chunk_id, tag_id),
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id);
CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id);
CREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);
CREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);
CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);
CREATE TABLE speakers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
metadata JSON
, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);
CREATE TABLE speaker_embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
embedding FLOAT[512] NOT NULL
check(
typeof(embedding) == 'blob'
and vec_length(embedding) == 512
),
speaker_id INTEGER REFERENCES speakers(id)
);
CREATE TABLE IF NOT EXISTS "audio_transcriptions" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_chunk_id INTEGER NOT NULL,
offset_index INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
transcription TEXT NOT NULL,
device TEXT NOT NULL DEFAULT '',
is_input_device BOOLEAN NOT NULL DEFAULT TRUE,
speaker_id INTEGER,
transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME,
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)
);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);
CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);
CREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);
CREATE TABLE ui_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
session_id TEXT,
relative_ms INTEGER NOT NULL DEFAULT 0,
event_type TEXT NOT NULL, -- click, move, scroll, key, text, app_switch, window_focus, clipboard
-- Position
x INTEGER,
y INTEGER,
delta_x INTEGER,
delta_y INTEGER,
-- Mouse/key
button INTEGER,
click_count INTEGER,
key_code INTEGER,
modifiers INTEGER,
-- Text content
text_content TEXT,
text_length INTEGER,
-- App context
app_name TEXT,
app_pid INTEGER,
window_title TEXT,
browser_url TEXT,
-- Element context (from accessibility APIs)
element_role TEXT,
element_name TEXT,
element_value TEXT,
element_description TEXT,
element_automation_id TEXT,
element_bounds TEXT, -- JSON: {"x":0,"y":0,"width":100,"height":50}
-- Frame correlation
frame_id INTEGER,
-- Sync columns
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME
);
CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX idx_ui_events_event_type ON ui_events(event_type);
CREATE INDEX idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX idx_ui_events_session_id ON ui_events(session_id);
CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id);
CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at);
CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL;
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
)
/* ui_events_fts(text_content,app_name,window_title,element_name) */;
CREATE TABLE IF NOT EXISTS 'ui_events_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'ui_events_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'ui_events_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'ui_events_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER ui_events_ad AFTER DELETE ON ui_events BEGIN
INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)
VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);
END;
CREATE TRIGGER ui_events_au AFTER UPDATE ON ui_events BEGIN
INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)
VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);
INSERT INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)
VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);
END;
CREATE UNIQUE INDEX idx_audio_transcription_chunk_text
ON audio_transcriptions(audio_chunk_id, transcription);
CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name);
CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC);
CREATE TABLE pipe_executions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
pipe_name TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'queued',
trigger_type TEXT NOT NULL DEFAULT 'manual',
pid INTEGER,
model TEXT,
provider TEXT,
started_at TEXT,
finished_at TEXT,
stdout TEXT DEFAULT '',
stderr TEXT DEFAULT '',
exit_code INTEGER,
error_type TEXT,
error_message TEXT,
duration_ms INTEGER
, session_path TEXT);
CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status);
CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running';
CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC);
CREATE TABLE pipe_scheduler_state (
pipe_name TEXT PRIMARY KEY,
last_run_at TEXT,
last_success_at TEXT,
consecutive_failures INTEGER DEFAULT 0
);
CREATE TABLE IF NOT EXISTS "frames" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
video_chunk_id INTEGER DEFAULT NULL,
offset_index INTEGER NOT NULL DEFAULT 0,
timestamp TIMESTAMP NOT NULL,
name TEXT,
app_name TEXT DEFAULT NULL,
window_name TEXT DEFAULT NULL,
focused BOOLEAN DEFAULT NULL,
browser_url TEXT DEFAULT NULL,
device_name TEXT NOT NULL DEFAULT '',
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME,
-- New event-driven capture columns
snapshot_path TEXT DEFAULT NULL,
accessibility_text TEXT DEFAULT NULL,
accessibility_tree_json TEXT DEFAULT NULL,
content_hash INTEGER DEFAULT NULL,
simhash INTEGER DEFAULT NULL,
capture_trigger TEXT DEFAULT NULL,
text_source TEXT DEFAULT NULL, cloud_blob_id TEXT DEFAULT NULL, full_text TEXT DEFAULT NULL, elements_ref_frame_id INTEGER DEFAULT NULL,
FOREIGN KEY (video_chunk_id) REFERENCES video_chunks(id)
);
CREATE INDEX idx_frames_timestamp ON frames(timestamp);
CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name);
CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL;
CREATE TRIGGER ui_events_ai AFTER INSERT ON ui_events BEGIN
INSERT OR IGNORE INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)
VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);
END;
CREATE TABLE meetings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
meeting_start TEXT NOT NULL,
meeting_end TEXT,
meeting_app TEXT NOT NULL,
title TEXT,
attendees TEXT,
detection_source TEXT NOT NULL DEFAULT 'app',
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
, note TEXT);
CREATE INDEX idx_meetings_start ON meetings(meeting_start);
CREATE INDEX idx_meetings_end ON meetings(meeting_end);
CREATE TABLE elements (
id INTEGER PRIMARY KEY AUTOINCREMENT,
frame_id INTEGER NOT NULL,
source TEXT NOT NULL, -- 'ocr' | 'accessibility'
role TEXT NOT NULL, -- OCR: 'page','block','paragraph','line','word'
-- AX: 'AXButton','AXTextField','AXStaticText', etc.
text TEXT, -- element text content (NULL for container nodes)
parent_id INTEGER, -- self-referential FK for tree hierarchy (NULL = root)
depth INTEGER NOT NULL DEFAULT 0, -- tree depth (0 = root)
left_bound REAL, -- normalized 0-1 bounding box
top_bound REAL,
width_bound REAL,
height_bound REAL,
confidence REAL, -- OCR confidence (0-100), NULL for AX
sort_order INTEGER NOT NULL DEFAULT 0, properties TEXT, -- sibling order within parent
FOREIGN KEY (frame_id) REFERENCES frames(id),
FOREIGN KEY (parent_id) REFERENCES elements(id)
);
CREATE INDEX idx_elements_frame_id ON elements(frame_id);
CREATE INDEX idx_elements_parent_id ON elements(parent_id);
CREATE INDEX idx_elements_source ON elements(source);
CREATE INDEX idx_elements_frame_source ON elements(frame_id, source);
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
/* elements_fts(text,role,frame_id) */;
CREATE TABLE IF NOT EXISTS 'elements_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'elements_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'elements_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'elements_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER elements_ai AFTER INSERT ON elements
WHEN NEW.text IS NOT NULL AND NEW.text != ''
BEGIN
INSERT INTO elements_fts(rowid, text, role, frame_id)
VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);
END;
CREATE TRIGGER elements_ad AFTER DELETE ON elements
WHEN OLD.text IS NOT NULL AND OLD.text != ''
BEGIN
INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)
VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);
END;
CREATE TRIGGER elements_au AFTER UPDATE ON elements
WHEN OLD.text IS NOT NULL AND OLD.text != ''
BEGIN
INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)
VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);
INSERT INTO elements_fts(rowid, text, role, frame_id)
VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);
END;
CREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(
transcription,
device,
speaker_id,
content='audio_transcriptions',
content_rowid='id',
tokenize='unicode61'
)
/* audio_transcriptions_fts(transcription,device,speaker_id) */;
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions
WHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL;
CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL;
CREATE TABLE memories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT NOT NULL,
source TEXT NOT NULL DEFAULT 'user',
source_context TEXT,
tags TEXT DEFAULT '[]',
importance REAL DEFAULT 0.5,
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
, frame_id INTEGER REFERENCES frames(id) ON DELETE SET NULL);
CREATE INDEX idx_memories_created_at ON memories(created_at);
CREATE INDEX idx_memories_importance ON memories(importance DESC);
CREATE INDEX idx_memories_source ON memories(source);
CREATE VIRTUAL TABLE memories_fts USING fts5(
content,
tags,
content='memories',
content_rowid='id',
tokenize='unicode61'
)
/* memories_fts(content,tags) */;
CREATE TABLE IF NOT EXISTS 'memories_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'memories_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'memories_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'memories_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER memories_ai AFTER INSERT ON memories
WHEN NEW.content IS NOT NULL AND NEW.content != ''
BEGIN
INSERT INTO memories_fts(rowid, content, tags)
VALUES (NEW.id, NEW.content, COALESCE(NEW.tags, ''));
END;
CREATE TRIGGER memories_ad AFTER DELETE ON memories
WHEN OLD.content IS NOT NULL AND OLD.content != ''
BEGIN
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));
END;
CREATE TRIGGER memories_au AFTER UPDATE ON memories
WHEN OLD.content IS NOT NULL AND OLD.content != ''
BEGIN
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));
INSERT INTO memories_fts(rowid, content, tags)
VALUES (NEW.id, COALESCE(NEW.content, ''), COALESCE(NEW.tags, ''));
END;
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
id UNINDEXED,
tokenize='unicode61'
)
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\"\n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema\"\nCREATE TABLE _sqlx_migrations (\n version BIGINT PRIMARY KEY,\n description TEXT NOT NULL,\n installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,\n success BOOLEAN NOT NULL,\n checksum BLOB NOT NULL,\n execution_time BIGINT NOT NULL\n);\nCREATE TABLE video_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL);\nCREATE TABLE sqlite_sequence(name,seq);\nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE TABLE IF NOT EXISTS \"ocr_text\" (\n frame_id INTEGER NOT NULL,\n text TEXT NOT NULL,\n text_json TEXT,\n app_name TEXT NOT NULL DEFAULT '',\n ocr_engine TEXT NOT NULL DEFAULT 'unknown'\n, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);\nCREATE TABLE tags (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\nCREATE TABLE vision_tags (\n vision_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (vision_id, tag_id),\n FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE TABLE audio_tags (\n audio_chunk_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (audio_chunk_id, tag_id),\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id);\nCREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id);\nCREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);\nCREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);\nCREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);\nCREATE TABLE speakers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT,\n metadata JSON\n, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);\nCREATE TABLE speaker_embeddings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding FLOAT[512] NOT NULL\n check(\n typeof(embedding) == 'blob'\n and vec_length(embedding) == 512\n ),\n speaker_id INTEGER REFERENCES speakers(id)\n);\nCREATE TABLE IF NOT EXISTS \"audio_transcriptions\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n audio_chunk_id INTEGER NOT NULL,\n offset_index INTEGER NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n transcription TEXT NOT NULL,\n device TEXT NOT NULL DEFAULT '',\n is_input_device BOOLEAN NOT NULL DEFAULT TRUE,\n speaker_id INTEGER,\n transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME,\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)\n);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);\nCREATE INDEX idx_ocr_text_length ON ocr_text (text_length);\nCREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);\nCREATE TABLE ui_events (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n session_id TEXT,\n relative_ms INTEGER NOT NULL DEFAULT 0,\n event_type TEXT NOT NULL, -- click, move, scroll, key, text, app_switch, window_focus, clipboard\n -- Position\n x INTEGER,\n y INTEGER,\n delta_x INTEGER,\n delta_y INTEGER,\n -- Mouse/key\n button INTEGER,\n click_count INTEGER,\n key_code INTEGER,\n modifiers INTEGER,\n -- Text content\n text_content TEXT,\n text_length INTEGER,\n -- App context\n app_name TEXT,\n app_pid INTEGER,\n window_title TEXT,\n browser_url TEXT,\n -- Element context (from accessibility APIs)\n element_role TEXT,\n element_name TEXT,\n element_value TEXT,\n element_description TEXT,\n element_automation_id TEXT,\n element_bounds TEXT, -- JSON: {\"x\":0,\"y\":0,\"width\":100,\"height\":50}\n -- Frame correlation\n frame_id INTEGER,\n -- Sync columns\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME\n);\nCREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX idx_ui_events_event_type ON ui_events(event_type);\nCREATE INDEX idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX idx_ui_events_session_id ON ui_events(session_id);\nCREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id);\nCREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at);\nCREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL;\nCREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content,\n app_name,\n window_title,\n element_name,\n content='ui_events',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* ui_events_fts(text_content,app_name,window_title,element_name) */;\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER ui_events_ad AFTER DELETE ON ui_events BEGIN\n INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)\n VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);\nEND;\nCREATE TRIGGER ui_events_au AFTER UPDATE ON ui_events BEGIN\n INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)\n VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);\n INSERT INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);\nEND;\nCREATE UNIQUE INDEX idx_audio_transcription_chunk_text\nON audio_transcriptions(audio_chunk_id, transcription);\nCREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name);\nCREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC);\nCREATE TABLE pipe_executions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n pipe_name TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'queued',\n trigger_type TEXT NOT NULL DEFAULT 'manual',\n pid INTEGER,\n model TEXT,\n provider TEXT,\n started_at TEXT,\n finished_at TEXT,\n stdout TEXT DEFAULT '',\n stderr TEXT DEFAULT '',\n exit_code INTEGER,\n error_type TEXT,\n error_message TEXT,\n duration_ms INTEGER\n, session_path TEXT);\nCREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status);\nCREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running';\nCREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC);\nCREATE TABLE pipe_scheduler_state (\n pipe_name TEXT PRIMARY KEY,\n last_run_at TEXT,\n last_success_at TEXT,\n consecutive_failures INTEGER DEFAULT 0\n);\nCREATE TABLE IF NOT EXISTS \"frames\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n video_chunk_id INTEGER DEFAULT NULL,\n offset_index INTEGER NOT NULL DEFAULT 0,\n timestamp TIMESTAMP NOT NULL,\n name TEXT,\n app_name TEXT DEFAULT NULL,\n window_name TEXT DEFAULT NULL,\n focused BOOLEAN DEFAULT NULL,\n browser_url TEXT DEFAULT NULL,\n device_name TEXT NOT NULL DEFAULT '',\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME,\n -- New event-driven capture columns\n snapshot_path TEXT DEFAULT NULL,\n accessibility_text TEXT DEFAULT NULL,\n accessibility_tree_json TEXT DEFAULT NULL,\n content_hash INTEGER DEFAULT NULL,\n simhash INTEGER DEFAULT NULL,\n capture_trigger TEXT DEFAULT NULL,\n text_source TEXT DEFAULT NULL, cloud_blob_id TEXT DEFAULT NULL, full_text TEXT DEFAULT NULL, elements_ref_frame_id INTEGER DEFAULT NULL,\n FOREIGN KEY (video_chunk_id) REFERENCES video_chunks(id)\n);\nCREATE INDEX idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX idx_frames_timestamp_device\n ON frames(timestamp, device_name);\nCREATE INDEX idx_frames_snapshot_path\n ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL;\nCREATE TRIGGER ui_events_ai AFTER INSERT ON ui_events BEGIN\n INSERT OR IGNORE INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);\nEND;\nCREATE TABLE meetings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n meeting_start TEXT NOT NULL,\n meeting_end TEXT,\n meeting_app TEXT NOT NULL,\n title TEXT,\n attendees TEXT,\n detection_source TEXT NOT NULL DEFAULT 'app',\n created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\n, note TEXT);\nCREATE INDEX idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX idx_meetings_end ON meetings(meeting_end);\nCREATE TABLE elements (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n frame_id INTEGER NOT NULL,\n source TEXT NOT NULL, -- 'ocr' | 'accessibility'\n role TEXT NOT NULL, -- OCR: 'page','block','paragraph','line','word'\n -- AX: 'AXButton','AXTextField','AXStaticText', etc.\n text TEXT, -- element text content (NULL for container nodes)\n parent_id INTEGER, -- self-referential FK for tree hierarchy (NULL = root)\n depth INTEGER NOT NULL DEFAULT 0, -- tree depth (0 = root)\n left_bound REAL, -- normalized 0-1 bounding box\n top_bound REAL,\n width_bound REAL,\n height_bound REAL,\n confidence REAL, -- OCR confidence (0-100), NULL for AX\n sort_order INTEGER NOT NULL DEFAULT 0, properties TEXT, -- sibling order within parent\n FOREIGN KEY (frame_id) REFERENCES frames(id),\n FOREIGN KEY (parent_id) REFERENCES elements(id)\n);\nCREATE INDEX idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX idx_elements_parent_id ON elements(parent_id);\nCREATE INDEX idx_elements_source ON elements(source);\nCREATE INDEX idx_elements_frame_source ON elements(frame_id, source);\nCREATE VIRTUAL TABLE elements_fts USING fts5(\n text,\n role,\n frame_id UNINDEXED,\n content='elements',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* elements_fts(text,role,frame_id) */;\nCREATE TABLE IF NOT EXISTS 'elements_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'elements_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'elements_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'elements_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER elements_ai AFTER INSERT ON elements\nWHEN NEW.text IS NOT NULL AND NEW.text != ''\nBEGIN\n INSERT INTO elements_fts(rowid, text, role, frame_id)\n VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);\nEND;\nCREATE TRIGGER elements_ad AFTER DELETE ON elements\nWHEN OLD.text IS NOT NULL AND OLD.text != ''\nBEGIN\n INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)\n VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);\nEND;\nCREATE TRIGGER elements_au AFTER UPDATE ON elements\nWHEN OLD.text IS NOT NULL AND OLD.text != ''\nBEGIN\n INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)\n VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);\n INSERT INTO elements_fts(rowid, text, role, frame_id)\n VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);\nEND;\nCREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(\n transcription,\n device,\n speaker_id,\n content='audio_transcriptions',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* audio_transcriptions_fts(transcription,device,speaker_id) */;\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions\nWHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE INDEX idx_video_chunks_cloud_blob_id\n ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL;\nCREATE INDEX idx_frames_cloud_blob_id\n ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL;\nCREATE TABLE memories (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n content TEXT NOT NULL,\n source TEXT NOT NULL DEFAULT 'user',\n source_context TEXT,\n tags TEXT DEFAULT '[]',\n importance REAL DEFAULT 0.5,\n created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),\n updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\n, frame_id INTEGER REFERENCES frames(id) ON DELETE SET NULL);\nCREATE INDEX idx_memories_created_at ON memories(created_at);\nCREATE INDEX idx_memories_importance ON memories(importance DESC);\nCREATE INDEX idx_memories_source ON memories(source);\nCREATE VIRTUAL TABLE memories_fts USING fts5(\n content,\n tags,\n content='memories',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* memories_fts(content,tags) */;\nCREATE TABLE IF NOT EXISTS 'memories_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'memories_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'memories_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'memories_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER memories_ai AFTER INSERT ON memories\nWHEN NEW.content IS NOT NULL AND NEW.content != ''\nBEGIN\n INSERT INTO memories_fts(rowid, content, tags)\n VALUES (NEW.id, NEW.content, COALESCE(NEW.tags, ''));\nEND;\nCREATE TRIGGER memories_ad AFTER DELETE ON memories\nWHEN OLD.content IS NOT NULL AND OLD.content != ''\nBEGIN\n INSERT INTO memories_fts(memories_fts, rowid, content, tags)\n VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));\nEND;\nCREATE TRIGGER memories_au AFTER UPDATE ON memories\nWHEN OLD.content IS NOT NULL AND OLD.content != ''\nBEGIN\n INSERT INTO memories_fts(memories_fts, rowid, content, tags)\n VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));\n INSERT INTO memories_fts(rowid, content, tags)\n VALUES (NEW.id, COALESCE(NEW.content, ''), COALESCE(NEW.tags, ''));\nEND;\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text,\n app_name,\n window_name,\n browser_url,\n id UNINDEXED,\n tokenize='unicode61'\n)\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":"drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\"\n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema\"\nCREATE TABLE _sqlx_migrations (\n version BIGINT PRIMARY KEY,\n description TEXT NOT NULL,\n installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,\n success BOOLEAN NOT NULL,\n checksum BLOB NOT NULL,\n execution_time BIGINT NOT NULL\n);\nCREATE TABLE video_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL);\nCREATE TABLE sqlite_sequence(name,seq);\nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE TABLE IF NOT EXISTS \"ocr_text\" (\n frame_id INTEGER NOT NULL,\n text TEXT NOT NULL,\n text_json TEXT,\n app_name TEXT NOT NULL DEFAULT '',\n ocr_engine TEXT NOT NULL DEFAULT 'unknown'\n, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);\nCREATE TABLE tags (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\nCREATE TABLE vision_tags (\n vision_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (vision_id, tag_id),\n FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE TABLE audio_tags (\n audio_chunk_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (audio_chunk_id, tag_id),\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id);\nCREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id);\nCREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);\nCREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);\nCREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);\nCREATE TABLE speakers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT,\n metadata JSON\n, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);\nCREATE TABLE speaker_embeddings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding FLOAT[512] NOT NULL\n check(\n typeof(embedding) == 'blob'\n and vec_length(embedding) == 512\n ),\n speaker_id INTEGER REFERENCES speakers(id)\n);\nCREATE TABLE IF NOT EXISTS \"audio_transcriptions\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n audio_chunk_id INTEGER NOT NULL,\n offset_index INTEGER NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n transcription TEXT NOT NULL,\n device TEXT NOT NULL DEFAULT '',\n is_input_device BOOLEAN NOT NULL DEFAULT TRUE,\n speaker_id INTEGER,\n transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME,\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)\n);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);\nCREATE INDEX idx_ocr_text_length ON ocr_text (text_length);\nCREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);\nCREATE TABLE ui_events (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n session_id TEXT,\n relative_ms INTEGER NOT NULL DEFAULT 0,\n event_type TEXT NOT NULL, -- click, move, scroll, key, text, app_switch, window_focus, clipboard\n -- Position\n x INTEGER,\n y INTEGER,\n delta_x INTEGER,\n delta_y INTEGER,\n -- Mouse/key\n button INTEGER,\n click_count INTEGER,\n key_code INTEGER,\n modifiers INTEGER,\n -- Text content\n text_content TEXT,\n text_length INTEGER,\n -- App context\n app_name TEXT,\n app_pid INTEGER,\n window_title TEXT,\n browser_url TEXT,\n -- Element context (from accessibility APIs)\n element_role TEXT,\n element_name TEXT,\n element_value TEXT,\n element_description TEXT,\n element_automation_id TEXT,\n element_bounds TEXT, -- JSON: {\"x\":0,\"y\":0,\"width\":100,\"height\":50}\n -- Frame correlation\n frame_id INTEGER,\n -- Sync columns\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME\n);\nCREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX idx_ui_events_event_type ON ui_events(event_type);\nCREATE INDEX idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX idx_ui_events_session_id ON ui_events(session_id);\nCREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id);\nCREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at);\nCREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL;\nCREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content,\n app_name,\n window_title,\n element_name,\n content='ui_events',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* ui_events_fts(text_content,app_name,window_title,element_name) */;\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER ui_events_ad AFTER DELETE ON ui_events BEGIN\n INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)\n VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);\nEND;\nCREATE TRIGGER ui_events_au AFTER UPDATE ON ui_events BEGIN\n INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)\n VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);\n INSERT INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);\nEND;\nCREATE UNIQUE INDEX idx_audio_transcription_chunk_text\nON audio_transcriptions(audio_chunk_id, transcription);\nCREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name);\nCREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC);\nCREATE TABLE pipe_executions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n pipe_name TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'queued',\n trigger_type TEXT NOT NULL DEFAULT 'manual',\n pid INTEGER,\n model TEXT,\n provider TEXT,\n started_at TEXT,\n finished_at TEXT,\n stdout TEXT DEFAULT '',\n stderr TEXT DEFAULT '',\n exit_code INTEGER,\n error_type TEXT,\n error_message TEXT,\n duration_ms INTEGER\n, session_path TEXT);\nCREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status);\nCREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running';\nCREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC);\nCREATE TABLE pipe_scheduler_state (\n pipe_name TEXT PRIMARY KEY,\n last_run_at TEXT,\n last_success_at TEXT,\n consecutive_failures INTEGER DEFAULT 0\n);\nCREATE TABLE IF NOT EXISTS \"frames\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n video_chunk_id INTEGER DEFAULT NULL,\n offset_index INTEGER NOT NULL DEFAULT 0,\n timestamp TIMESTAMP NOT NULL,\n name TEXT,\n app_name TEXT DEFAULT NULL,\n window_name TEXT DEFAULT NULL,\n focused BOOLEAN DEFAULT NULL,\n browser_url TEXT DEFAULT NULL,\n device_name TEXT NOT NULL DEFAULT '',\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME,\n -- New event-driven capture columns\n snapshot_path TEXT DEFAULT NULL,\n accessibility_text TEXT DEFAULT NULL,\n accessibility_tree_json TEXT DEFAULT NULL,\n content_hash INTEGER DEFAULT NULL,\n simhash INTEGER DEFAULT NULL,\n capture_trigger TEXT DEFAULT NULL,\n text_source TEXT DEFAULT NULL, cloud_blob_id TEXT DEFAULT NULL, full_text TEXT DEFAULT NULL, elements_ref_frame_id INTEGER DEFAULT NULL,\n FOREIGN KEY (video_chunk_id) REFERENCES video_chunks(id)\n);\nCREATE INDEX idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX idx_frames_timestamp_device\n ON frames(timestamp, device_name);\nCREATE INDEX idx_frames_snapshot_path\n ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL;\nCREATE TRIGGER ui_events_ai AFTER INSERT ON ui_events BEGIN\n INSERT OR IGNORE INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);\nEND;\nCREATE TABLE meetings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n meeting_start TEXT NOT NULL,\n meeting_end TEXT,\n meeting_app TEXT NOT NULL,\n title TEXT,\n attendees TEXT,\n detection_source TEXT NOT NULL DEFAULT 'app',\n created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\n, note TEXT);\nCREATE INDEX idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX idx_meetings_end ON meetings(meeting_end);\nCREATE TABLE elements (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n frame_id INTEGER NOT NULL,\n source TEXT NOT NULL, -- 'ocr' | 'accessibility'\n role TEXT NOT NULL, -- OCR: 'page','block','paragraph','line','word'\n -- AX: 'AXButton','AXTextField','AXStaticText', etc.\n text TEXT, -- element text content (NULL for container nodes)\n parent_id INTEGER, -- self-referential FK for tree hierarchy (NULL = root)\n depth INTEGER NOT NULL DEFAULT 0, -- tree depth (0 = root)\n left_bound REAL, -- normalized 0-1 bounding box\n top_bound REAL,\n width_bound REAL,\n height_bound REAL,\n confidence REAL, -- OCR confidence (0-100), NULL for AX\n sort_order INTEGER NOT NULL DEFAULT 0, properties TEXT, -- sibling order within parent\n FOREIGN KEY (frame_id) REFERENCES frames(id),\n FOREIGN KEY (parent_id) REFERENCES elements(id)\n);\nCREATE INDEX idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX idx_elements_parent_id ON elements(parent_id);\nCREATE INDEX idx_elements_source ON elements(source);\nCREATE INDEX idx_elements_frame_source ON elements(frame_id, source);\nCREATE VIRTUAL TABLE elements_fts USING fts5(\n text,\n role,\n frame_id UNINDEXED,\n content='elements',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* elements_fts(text,role,frame_id) */;\nCREATE TABLE IF NOT EXISTS 'elements_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'elements_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'elements_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'elements_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER elements_ai AFTER INSERT ON elements\nWHEN NEW.text IS NOT NULL AND NEW.text != ''\nBEGIN\n INSERT INTO elements_fts(rowid, text, role, frame_id)\n VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);\nEND;\nCREATE TRIGGER elements_ad AFTER DELETE ON elements\nWHEN OLD.text IS NOT NULL AND OLD.text != ''\nBEGIN\n INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)\n VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);\nEND;\nCREATE TRIGGER elements_au AFTER UPDATE ON elements\nWHEN OLD.text IS NOT NULL AND OLD.text != ''\nBEGIN\n INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)\n VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);\n INSERT INTO elements_fts(rowid, text, role, frame_id)\n VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);\nEND;\nCREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(\n transcription,\n device,\n speaker_id,\n content='audio_transcriptions',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* audio_transcriptions_fts(transcription,device,speaker_id) */;\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions\nWHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE INDEX idx_video_chunks_cloud_blob_id\n ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL;\nCREATE INDEX idx_frames_cloud_blob_id\n ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL;\nCREATE TABLE memories (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n content TEXT NOT NULL,\n source TEXT NOT NULL DEFAULT 'user',\n source_context TEXT,\n tags TEXT DEFAULT '[]',\n importance REAL DEFAULT 0.5,\n created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),\n updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\n, frame_id INTEGER REFERENCES frames(id) ON DELETE SET NULL);\nCREATE INDEX idx_memories_created_at ON memories(created_at);\nCREATE INDEX idx_memories_importance ON memories(importance DESC);\nCREATE INDEX idx_memories_source ON memories(source);\nCREATE VIRTUAL TABLE memories_fts USING fts5(\n content,\n tags,\n content='memories',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* memories_fts(content,tags) */;\nCREATE TABLE IF NOT EXISTS 'memories_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'memories_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'memories_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'memories_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER memories_ai AFTER INSERT ON memories\nWHEN NEW.content IS NOT NULL AND NEW.content != ''\nBEGIN\n INSERT INTO memories_fts(rowid, content, tags)\n VALUES (NEW.id, NEW.content, COALESCE(NEW.tags, ''));\nEND;\nCREATE TRIGGER memories_ad AFTER DELETE ON memories\nWHEN OLD.content IS NOT NULL AND OLD.content != ''\nBEGIN\n INSERT INTO memories_fts(memories_fts, rowid, content, tags)\n VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));\nEND;\nCREATE TRIGGER memories_au AFTER UPDATE ON memories\nWHEN OLD.content IS NOT NULL AND OLD.content != ''\nBEGIN\n INSERT INTO memories_fts(memories_fts, rowid, content, tags)\n VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));\n INSERT INTO memories_fts(rowid, content, tags)\n VALUES (NEW.id, COALESCE(NEW.content, ''), COALESCE(NEW.tags, ''));\nEND;\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text,\n app_name,\n window_name,\n browser_url,\n id UNINDEXED,\n tokenize='unicode61'\n)\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
5853192385605379516
|
3173372984674339333
|
idle
|
accessibility
|
NULL
|
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema"
CREATE TABLE _sqlx_migrations (
version BIGINT PRIMARY KEY,
description TEXT NOT NULL,
installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
success BOOLEAN NOT NULL,
checksum BLOB NOT NULL,
execution_time BIGINT NOT NULL
);
CREATE TABLE video_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL);
CREATE TABLE sqlite_sequence(name,seq);
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE TABLE IF NOT EXISTS "ocr_text" (
frame_id INTEGER NOT NULL,
text TEXT NOT NULL,
text_json TEXT,
app_name TEXT NOT NULL DEFAULT '',
ocr_engine TEXT NOT NULL DEFAULT 'unknown'
, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);
CREATE TABLE tags (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE vision_tags (
vision_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (vision_id, tag_id),
FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE TABLE audio_tags (
audio_chunk_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (audio_chunk_id, tag_id),
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id);
CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id);
CREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);
CREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);
CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);
CREATE TABLE speakers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
metadata JSON
, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);
CREATE TABLE speaker_embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
embedding FLOAT[512] NOT NULL
check(
typeof(embedding) == 'blob'
and vec_length(embedding) == 512
),
speaker_id INTEGER REFERENCES speakers(id)
);
CREATE TABLE IF NOT EXISTS "audio_transcriptions" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_chunk_id INTEGER NOT NULL,
offset_index INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
transcription TEXT NOT NULL,
device TEXT NOT NULL DEFAULT '',
is_input_device BOOLEAN NOT NULL DEFAULT TRUE,
speaker_id INTEGER,
transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME,
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)
);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);
CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);
CREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);
CREATE TABLE ui_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
session_id TEXT,
relative_ms INTEGER NOT NULL DEFAULT 0,
event_type TEXT NOT NULL, -- click, move, scroll, key, text, app_switch, window_focus, clipboard
-- Position
x INTEGER,
y INTEGER,
delta_x INTEGER,
delta_y INTEGER,
-- Mouse/key
button INTEGER,
click_count INTEGER,
key_code INTEGER,
modifiers INTEGER,
-- Text content
text_content TEXT,
text_length INTEGER,
-- App context
app_name TEXT,
app_pid INTEGER,
window_title TEXT,
browser_url TEXT,
-- Element context (from accessibility APIs)
element_role TEXT,
element_name TEXT,
element_value TEXT,
element_description TEXT,
element_automation_id TEXT,
element_bounds TEXT, -- JSON: {"x":0,"y":0,"width":100,"height":50}
-- Frame correlation
frame_id INTEGER,
-- Sync columns
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME
);
CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX idx_ui_events_event_type ON ui_events(event_type);
CREATE INDEX idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX idx_ui_events_session_id ON ui_events(session_id);
CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id);
CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at);
CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL;
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
)
/* ui_events_fts(text_content,app_name,window_title,element_name) */;
CREATE TABLE IF NOT EXISTS 'ui_events_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'ui_events_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'ui_events_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'ui_events_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER ui_events_ad AFTER DELETE ON ui_events BEGIN
INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)
VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);
END;
CREATE TRIGGER ui_events_au AFTER UPDATE ON ui_events BEGIN
INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)
VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);
INSERT INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)
VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);
END;
CREATE UNIQUE INDEX idx_audio_transcription_chunk_text
ON audio_transcriptions(audio_chunk_id, transcription);
CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name);
CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC);
CREATE TABLE pipe_executions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
pipe_name TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'queued',
trigger_type TEXT NOT NULL DEFAULT 'manual',
pid INTEGER,
model TEXT,
provider TEXT,
started_at TEXT,
finished_at TEXT,
stdout TEXT DEFAULT '',
stderr TEXT DEFAULT '',
exit_code INTEGER,
error_type TEXT,
error_message TEXT,
duration_ms INTEGER
, session_path TEXT);
CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status);
CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running';
CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC);
CREATE TABLE pipe_scheduler_state (
pipe_name TEXT PRIMARY KEY,
last_run_at TEXT,
last_success_at TEXT,
consecutive_failures INTEGER DEFAULT 0
);
CREATE TABLE IF NOT EXISTS "frames" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
video_chunk_id INTEGER DEFAULT NULL,
offset_index INTEGER NOT NULL DEFAULT 0,
timestamp TIMESTAMP NOT NULL,
name TEXT,
app_name TEXT DEFAULT NULL,
window_name TEXT DEFAULT NULL,
focused BOOLEAN DEFAULT NULL,
browser_url TEXT DEFAULT NULL,
device_name TEXT NOT NULL DEFAULT '',
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME,
-- New event-driven capture columns
snapshot_path TEXT DEFAULT NULL,
accessibility_text TEXT DEFAULT NULL,
accessibility_tree_json TEXT DEFAULT NULL,
content_hash INTEGER DEFAULT NULL,
simhash INTEGER DEFAULT NULL,
capture_trigger TEXT DEFAULT NULL,
text_source TEXT DEFAULT NULL, cloud_blob_id TEXT DEFAULT NULL, full_text TEXT DEFAULT NULL, elements_ref_frame_id INTEGER DEFAULT NULL,
FOREIGN KEY (video_chunk_id) REFERENCES video_chunks(id)
);
CREATE INDEX idx_frames_timestamp ON frames(timestamp);
CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name);
CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL;
CREATE TRIGGER ui_events_ai AFTER INSERT ON ui_events BEGIN
INSERT OR IGNORE INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)
VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);
END;
CREATE TABLE meetings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
meeting_start TEXT NOT NULL,
meeting_end TEXT,
meeting_app TEXT NOT NULL,
title TEXT,
attendees TEXT,
detection_source TEXT NOT NULL DEFAULT 'app',
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
, note TEXT);
CREATE INDEX idx_meetings_start ON meetings(meeting_start);
CREATE INDEX idx_meetings_end ON meetings(meeting_end);
CREATE TABLE elements (
id INTEGER PRIMARY KEY AUTOINCREMENT,
frame_id INTEGER NOT NULL,
source TEXT NOT NULL, -- 'ocr' | 'accessibility'
role TEXT NOT NULL, -- OCR: 'page','block','paragraph','line','word'
-- AX: 'AXButton','AXTextField','AXStaticText', etc.
text TEXT, -- element text content (NULL for container nodes)
parent_id INTEGER, -- self-referential FK for tree hierarchy (NULL = root)
depth INTEGER NOT NULL DEFAULT 0, -- tree depth (0 = root)
left_bound REAL, -- normalized 0-1 bounding box
top_bound REAL,
width_bound REAL,
height_bound REAL,
confidence REAL, -- OCR confidence (0-100), NULL for AX
sort_order INTEGER NOT NULL DEFAULT 0, properties TEXT, -- sibling order within parent
FOREIGN KEY (frame_id) REFERENCES frames(id),
FOREIGN KEY (parent_id) REFERENCES elements(id)
);
CREATE INDEX idx_elements_frame_id ON elements(frame_id);
CREATE INDEX idx_elements_parent_id ON elements(parent_id);
CREATE INDEX idx_elements_source ON elements(source);
CREATE INDEX idx_elements_frame_source ON elements(frame_id, source);
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
/* elements_fts(text,role,frame_id) */;
CREATE TABLE IF NOT EXISTS 'elements_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'elements_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'elements_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'elements_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER elements_ai AFTER INSERT ON elements
WHEN NEW.text IS NOT NULL AND NEW.text != ''
BEGIN
INSERT INTO elements_fts(rowid, text, role, frame_id)
VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);
END;
CREATE TRIGGER elements_ad AFTER DELETE ON elements
WHEN OLD.text IS NOT NULL AND OLD.text != ''
BEGIN
INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)
VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);
END;
CREATE TRIGGER elements_au AFTER UPDATE ON elements
WHEN OLD.text IS NOT NULL AND OLD.text != ''
BEGIN
INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)
VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);
INSERT INTO elements_fts(rowid, text, role, frame_id)
VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);
END;
CREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(
transcription,
device,
speaker_id,
content='audio_transcriptions',
content_rowid='id',
tokenize='unicode61'
)
/* audio_transcriptions_fts(transcription,device,speaker_id) */;
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions
WHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL;
CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL;
CREATE TABLE memories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT NOT NULL,
source TEXT NOT NULL DEFAULT 'user',
source_context TEXT,
tags TEXT DEFAULT '[]',
importance REAL DEFAULT 0.5,
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
, frame_id INTEGER REFERENCES frames(id) ON DELETE SET NULL);
CREATE INDEX idx_memories_created_at ON memories(created_at);
CREATE INDEX idx_memories_importance ON memories(importance DESC);
CREATE INDEX idx_memories_source ON memories(source);
CREATE VIRTUAL TABLE memories_fts USING fts5(
content,
tags,
content='memories',
content_rowid='id',
tokenize='unicode61'
)
/* memories_fts(content,tags) */;
CREATE TABLE IF NOT EXISTS 'memories_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'memories_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'memories_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'memories_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER memories_ai AFTER INSERT ON memories
WHEN NEW.content IS NOT NULL AND NEW.content != ''
BEGIN
INSERT INTO memories_fts(rowid, content, tags)
VALUES (NEW.id, NEW.content, COALESCE(NEW.tags, ''));
END;
CREATE TRIGGER memories_ad AFTER DELETE ON memories
WHEN OLD.content IS NOT NULL AND OLD.content != ''
BEGIN
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));
END;
CREATE TRIGGER memories_au AFTER UPDATE ON memories
WHEN OLD.content IS NOT NULL AND OLD.content != ''
BEGIN
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));
INSERT INTO memories_fts(rowid, content, tags)
VALUES (NEW.id, COALESCE(NEW.content, ''), COALESCE(NEW.tags, ''));
END;
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
id UNINDEXED,
tokenize='unicode61'
)
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
|
716
|
17
|
1
|
2026-04-11T12:09:32.797426+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909372797_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEdit ViewSessionScriptsProfilesWindowHe iTerm2ShellEdit ViewSessionScriptsProfilesWindowHelp-zshDOCKERO ₴1tokenize='unicode61'DEV (-zsh)O $2APP (-zsh)• *3-zsh• 84/* frames_fts(full_text,app_name, window_name,browser_url, id) */;CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, CO, c1, c2, с3, с4);CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TRIGGER frames_ai AFTER INSERT ON framesWHEN NEW.full_text IS NOT NULL AND NEW.full_text != "*BEGININSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)VALUES (NEW.id,NEW.full_text,COALESCE(NEW.app_name,"'),COALESCE(NEW.window_name,COALESCECNEW.browser_url,-zsh• *5-zsh100% <47O ₴6Sat 11 Apr 15:09:32-zshT81X7);END;CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON framesBEGINDELETE FROM frames_fts WHERE id = OLD.id;INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)SELECTNEW. id,COALESCECNEW.full_text,"*),COALESCE(NEW.app_name,"*),COALESCE(NEW.window_name,"'),COALESCE(NEW.browser_url,"*)WHERE NEW.full_text IS NOT NULL AND NEW.full_text != "*;END;BEGINCREATE TRIGGER frames_ad AFTER DELETE ON framesDELETE FROM frames_fts WHERE id = OLD.id;END;CREATE INDEX idx_memories_frame_id ON memories(frame_id);CREATE INDEX idx_elements_source_role_textON elements(source, role, frame_id)WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
NULL
|
3776369863370969961
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEdit ViewSessionScriptsProfilesWindowHe iTerm2ShellEdit ViewSessionScriptsProfilesWindowHelp-zshDOCKERO ₴1tokenize='unicode61'DEV (-zsh)O $2APP (-zsh)• *3-zsh• 84/* frames_fts(full_text,app_name, window_name,browser_url, id) */;CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, CO, c1, c2, с3, с4);CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TRIGGER frames_ai AFTER INSERT ON framesWHEN NEW.full_text IS NOT NULL AND NEW.full_text != "*BEGININSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)VALUES (NEW.id,NEW.full_text,COALESCE(NEW.app_name,"'),COALESCE(NEW.window_name,COALESCECNEW.browser_url,-zsh• *5-zsh100% <47O ₴6Sat 11 Apr 15:09:32-zshT81X7);END;CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON framesBEGINDELETE FROM frames_fts WHERE id = OLD.id;INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)SELECTNEW. id,COALESCECNEW.full_text,"*),COALESCE(NEW.app_name,"*),COALESCE(NEW.window_name,"'),COALESCE(NEW.browser_url,"*)WHERE NEW.full_text IS NOT NULL AND NEW.full_text != "*;END;BEGINCREATE TRIGGER frames_ad AFTER DELETE ON framesDELETE FROM frames_fts WHERE id = OLD.id;END;CREATE INDEX idx_memories_frame_id ON memories(frame_id);CREATE INDEX idx_elements_source_role_textON elements(source, role, frame_id)WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
715
|
|
717
|
17
|
2
|
2026-04-11T12:09:33.439918+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909373439_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2Shell Edit ViewSessionScriptsProfilesWindo iTerm2Shell Edit ViewSessionScriptsProfilesWindowHelp-zshDOCKERO ₴1tokenize='unicode61'DEV (-zsh)• $2APP (-zsh)• *3-zsh• x4/* frames_fts(full_text,app_name, window_name,browser_url, id) */;CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, cO, c1, c2, с3, c4);CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TRIGGER frames_ai AFTER INSERT ON framesWHEN NEW.full_text IS NOT NULL AND NEW.full_text != "'BEGININSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)VALUES (NEW.id,NEW.full_text,COALESCE(NEW.app_name,"'),COALESCE(NEW.window_name,COALESCECNEW.browser_url,-zsh• x5-zsh100% C47O ₴6Sat 11 Apr 15:09:33-zshT81X7+);END;CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON framesBEGINDELETE FROM frames_fts WHERE id = OLD.id;INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)SELECTNEW.id,COALESCECNEW.full_text,"*),COALESCE(NEW.app_name,"*),COALESCE(NEW.window_name,"'),COALESCE(NEW.browser_url,"*)WHERE NEW.full_text IS NOT NULL AND NEW.full_text != "*;END;BEGINCREATE TRIGGER frames_ad AFTER DELETE ON framesDELETE FROM frames_fts WHERE id = OLD.id;END;CREATE INDEX idx_memories_frame_id ON memories(frame_id);CREATE INDEX idx_elements_source_role_textON elements(source, role, frame_id)WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
NULL
|
-3171887111164154172
|
NULL
|
visual_change
|
ocr
|
NULL
|
iTerm2Shell Edit ViewSessionScriptsProfilesWindo iTerm2Shell Edit ViewSessionScriptsProfilesWindowHelp-zshDOCKERO ₴1tokenize='unicode61'DEV (-zsh)• $2APP (-zsh)• *3-zsh• x4/* frames_fts(full_text,app_name, window_name,browser_url, id) */;CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, cO, c1, c2, с3, c4);CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TRIGGER frames_ai AFTER INSERT ON framesWHEN NEW.full_text IS NOT NULL AND NEW.full_text != "'BEGININSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)VALUES (NEW.id,NEW.full_text,COALESCE(NEW.app_name,"'),COALESCE(NEW.window_name,COALESCECNEW.browser_url,-zsh• x5-zsh100% C47O ₴6Sat 11 Apr 15:09:33-zshT81X7+);END;CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON framesBEGINDELETE FROM frames_fts WHERE id = OLD.id;INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)SELECTNEW.id,COALESCECNEW.full_text,"*),COALESCE(NEW.app_name,"*),COALESCE(NEW.window_name,"'),COALESCE(NEW.browser_url,"*)WHERE NEW.full_text IS NOT NULL AND NEW.full_text != "*;END;BEGINCREATE TRIGGER frames_ad AFTER DELETE ON framesDELETE FROM frames_fts WHERE id = OLD.id;END;CREATE INDEX idx_memories_frame_id ON memories(frame_id);CREATE INDEX idx_elements_source_role_textON elements(source, role, frame_id)WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
NULL
|
|
718
|
17
|
3
|
2026-04-11T12:09:34.648071+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909374648_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2Shell Edit ViewSessionScriptsProfilesWindo iTerm2Shell Edit ViewSessionScriptsProfilesWindowHelp-zshDOCKERO ₴1tokenize='unicode61'DEV (-zsh)• $2APP (-zsh)• *3-zsh• x4/* frames_fts(full_text,app_name, window_name,browser_url, id) */;CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, cO, c1, c2, с3, c4);CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TRIGGER frames_ai AFTER INSERT ON framesWHEN NEW.full_text IS NOT NULL AND NEW.full_text != "'BEGININSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)VALUES (NEW.id,NEW.full_text,COALESCE(NEW.app_name,"'),COALESCE(NEW.window_name,COALESCECNEW.browser_url,-zsh• x5-zsh100% C47O ₴6Sat 11 Apr 15:09:34-zshT81X7);END;CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON framesBEGINDELETE FROM frames_fts WHERE id = OLD.id;INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)SELECTNEW.id,COALESCECNEW.full_text,"*),COALESCE(NEW.app_name,"*),COALESCE(NEW.window_name,"'),COALESCE(NEW.browser_url,"*)WHERE NEW.full_text IS NOT NULL AND NEW.full_text != "*;END;BEGINCREATE TRIGGER frames_ad AFTER DELETE ON framesDELETE FROM frames_fts WHERE id = OLD.id;END;CREATE INDEX idx_memories_frame_id ON memories(frame_id);CREATE INDEX idx_elements_source_role_textON elements(source, role, frame_id)WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
NULL
|
-7498872109541583616
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2Shell Edit ViewSessionScriptsProfilesWindo iTerm2Shell Edit ViewSessionScriptsProfilesWindowHelp-zshDOCKERO ₴1tokenize='unicode61'DEV (-zsh)• $2APP (-zsh)• *3-zsh• x4/* frames_fts(full_text,app_name, window_name,browser_url, id) */;CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, cO, c1, c2, с3, c4);CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;CREATE TRIGGER frames_ai AFTER INSERT ON framesWHEN NEW.full_text IS NOT NULL AND NEW.full_text != "'BEGININSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)VALUES (NEW.id,NEW.full_text,COALESCE(NEW.app_name,"'),COALESCE(NEW.window_name,COALESCECNEW.browser_url,-zsh• x5-zsh100% C47O ₴6Sat 11 Apr 15:09:34-zshT81X7);END;CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON framesBEGINDELETE FROM frames_fts WHERE id = OLD.id;INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)SELECTNEW.id,COALESCECNEW.full_text,"*),COALESCE(NEW.app_name,"*),COALESCE(NEW.window_name,"'),COALESCE(NEW.browser_url,"*)WHERE NEW.full_text IS NOT NULL AND NEW.full_text != "*;END;BEGINCREATE TRIGGER frames_ad AFTER DELETE ON framesDELETE FROM frames_fts WHERE id = OLD.id;END;CREATE INDEX idx_memories_frame_id ON memories(frame_id);CREATE INDEX idx_elements_source_role_textON elements(source, role, frame_id)WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $...
|
717
|
|
719
|
17
|
4
|
2026-04-11T12:09:36.183080+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909376183_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema"
CREATE TABLE _sqlx_migrations (
version BIGINT PRIMARY KEY,
description TEXT NOT NULL,
installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
success BOOLEAN NOT NULL,
checksum BLOB NOT NULL,
execution_time BIGINT NOT NULL
);
CREATE TABLE video_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL);
CREATE TABLE sqlite_sequence(name,seq);
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE TABLE IF NOT EXISTS "ocr_text" (
frame_id INTEGER NOT NULL,
text TEXT NOT NULL,
text_json TEXT,
app_name TEXT NOT NULL DEFAULT '',
ocr_engine TEXT NOT NULL DEFAULT 'unknown'
, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);
CREATE TABLE tags (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE vision_tags (
vision_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (vision_id, tag_id),
FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE TABLE audio_tags (
audio_chunk_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (audio_chunk_id, tag_id),
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id);
CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id);
CREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);
CREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);
CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);
CREATE TABLE speakers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
metadata JSON
, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);
CREATE TABLE speaker_embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
embedding FLOAT[512] NOT NULL
check(
typeof(embedding) == 'blob'
and vec_length(embedding) == 512
),
speaker_id INTEGER REFERENCES speakers(id)
);
CREATE TABLE IF NOT EXISTS "audio_transcriptions" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_chunk_id INTEGER NOT NULL,
offset_index INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
transcription TEXT NOT NULL,
device TEXT NOT NULL DEFAULT '',
is_input_device BOOLEAN NOT NULL DEFAULT TRUE,
speaker_id INTEGER,
transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME,
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)
);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);
CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);
CREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);
CREATE TABLE ui_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
session_id TEXT,
relative_ms INTEGER NOT NULL DEFAULT 0,
event_type TEXT NOT NULL, -- click, move, scroll, key, text, app_switch, window_focus, clipboard
-- Position
x INTEGER,
y INTEGER,
delta_x INTEGER,
delta_y INTEGER,
-- Mouse/key
button INTEGER,
click_count INTEGER,
key_code INTEGER,
modifiers INTEGER,
-- Text content
text_content TEXT,
text_length INTEGER,
-- App context
app_name TEXT,
app_pid INTEGER,
window_title TEXT,
browser_url TEXT,
-- Element context (from accessibility APIs)
element_role TEXT,
element_name TEXT,
element_value TEXT,
element_description TEXT,
element_automation_id TEXT,
element_bounds TEXT, -- JSON: {"x":0,"y":0,"width":100,"height":50}
-- Frame correlation
frame_id INTEGER,
-- Sync columns
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME
);
CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX idx_ui_events_event_type ON ui_events(event_type);
CREATE INDEX idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX idx_ui_events_session_id ON ui_events(session_id);
CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id);
CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at);
CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL;
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
)
/* ui_events_fts(text_content,app_name,window_title,element_name) */;
CREATE TABLE IF NOT EXISTS 'ui_events_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'ui_events_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'ui_events_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'ui_events_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER ui_events_ad AFTER DELETE ON ui_events BEGIN
INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)
VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);
END;
CREATE TRIGGER ui_events_au AFTER UPDATE ON ui_events BEGIN
INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)
VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);
INSERT INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)
VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);
END;
CREATE UNIQUE INDEX idx_audio_transcription_chunk_text
ON audio_transcriptions(audio_chunk_id, transcription);
CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name);
CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC);
CREATE TABLE pipe_executions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
pipe_name TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'queued',
trigger_type TEXT NOT NULL DEFAULT 'manual',
pid INTEGER,
model TEXT,
provider TEXT,
started_at TEXT,
finished_at TEXT,
stdout TEXT DEFAULT '',
stderr TEXT DEFAULT '',
exit_code INTEGER,
error_type TEXT,
error_message TEXT,
duration_ms INTEGER
, session_path TEXT);
CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status);
CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running';
CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC);
CREATE TABLE pipe_scheduler_state (
pipe_name TEXT PRIMARY KEY,
last_run_at TEXT,
last_success_at TEXT,
consecutive_failures INTEGER DEFAULT 0
);
CREATE TABLE IF NOT EXISTS "frames" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
video_chunk_id INTEGER DEFAULT NULL,
offset_index INTEGER NOT NULL DEFAULT 0,
timestamp TIMESTAMP NOT NULL,
name TEXT,
app_name TEXT DEFAULT NULL,
window_name TEXT DEFAULT NULL,
focused BOOLEAN DEFAULT NULL,
browser_url TEXT DEFAULT NULL,
device_name TEXT NOT NULL DEFAULT '',
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME,
-- New event-driven capture columns
snapshot_path TEXT DEFAULT NULL,
accessibility_text TEXT DEFAULT NULL,
accessibility_tree_json TEXT DEFAULT NULL,
content_hash INTEGER DEFAULT NULL,
simhash INTEGER DEFAULT NULL,
capture_trigger TEXT DEFAULT NULL,
text_source TEXT DEFAULT NULL, cloud_blob_id TEXT DEFAULT NULL, full_text TEXT DEFAULT NULL, elements_ref_frame_id INTEGER DEFAULT NULL,
FOREIGN KEY (video_chunk_id) REFERENCES video_chunks(id)
);
CREATE INDEX idx_frames_timestamp ON frames(timestamp);
CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name);
CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL;
CREATE TRIGGER ui_events_ai AFTER INSERT ON ui_events BEGIN
INSERT OR IGNORE INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)
VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);
END;
CREATE TABLE meetings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
meeting_start TEXT NOT NULL,
meeting_end TEXT,
meeting_app TEXT NOT NULL,
title TEXT,
attendees TEXT,
detection_source TEXT NOT NULL DEFAULT 'app',
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
, note TEXT);
CREATE INDEX idx_meetings_start ON meetings(meeting_start);
CREATE INDEX idx_meetings_end ON meetings(meeting_end);
CREATE TABLE elements (
id INTEGER PRIMARY KEY AUTOINCREMENT,
frame_id INTEGER NOT NULL,
source TEXT NOT NULL, -- 'ocr' | 'accessibility'
role TEXT NOT NULL, -- OCR: 'page','block','paragraph','line','word'
-- AX: 'AXButton','AXTextField','AXStaticText', etc.
text TEXT, -- element text content (NULL for container nodes)
parent_id INTEGER, -- self-referential FK for tree hierarchy (NULL = root)
depth INTEGER NOT NULL DEFAULT 0, -- tree depth (0 = root)
left_bound REAL, -- normalized 0-1 bounding box
top_bound REAL,
width_bound REAL,
height_bound REAL,
confidence REAL, -- OCR confidence (0-100), NULL for AX
sort_order INTEGER NOT NULL DEFAULT 0, properties TEXT, -- sibling order within parent
FOREIGN KEY (frame_id) REFERENCES frames(id),
FOREIGN KEY (parent_id) REFERENCES elements(id)
);
CREATE INDEX idx_elements_frame_id ON elements(frame_id);
CREATE INDEX idx_elements_parent_id ON elements(parent_id);
CREATE INDEX idx_elements_source ON elements(source);
CREATE INDEX idx_elements_frame_source ON elements(frame_id, source);
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
/* elements_fts(text,role,frame_id) */;
CREATE TABLE IF NOT EXISTS 'elements_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'elements_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'elements_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'elements_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER elements_ai AFTER INSERT ON elements
WHEN NEW.text IS NOT NULL AND NEW.text != ''
BEGIN
INSERT INTO elements_fts(rowid, text, role, frame_id)
VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);
END;
CREATE TRIGGER elements_ad AFTER DELETE ON elements
WHEN OLD.text IS NOT NULL AND OLD.text != ''
BEGIN
INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)
VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);
END;
CREATE TRIGGER elements_au AFTER UPDATE ON elements
WHEN OLD.text IS NOT NULL AND OLD.text != ''
BEGIN
INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)
VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);
INSERT INTO elements_fts(rowid, text, role, frame_id)
VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);
END;
CREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(
transcription,
device,
speaker_id,
content='audio_transcriptions',
content_rowid='id',
tokenize='unicode61'
)
/* audio_transcriptions_fts(transcription,device,speaker_id) */;
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions
WHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL;
CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL;
CREATE TABLE memories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT NOT NULL,
source TEXT NOT NULL DEFAULT 'user',
source_context TEXT,
tags TEXT DEFAULT '[]',
importance REAL DEFAULT 0.5,
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
, frame_id INTEGER REFERENCES frames(id) ON DELETE SET NULL);
CREATE INDEX idx_memories_created_at ON memories(created_at);
CREATE INDEX idx_memories_importance ON memories(importance DESC);
CREATE INDEX idx_memories_source ON memories(source);
CREATE VIRTUAL TABLE memories_fts USING fts5(
content,
tags,
content='memories',
content_rowid='id',
tokenize='unicode61'
)
/* memories_fts(content,tags) */;
CREATE TABLE IF NOT EXISTS 'memories_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'memories_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'memories_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'memories_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER memories_ai AFTER INSERT ON memories
WHEN NEW.content IS NOT NULL AND NEW.content != ''
BEGIN
INSERT INTO memories_fts(rowid, content, tags)
VALUES (NEW.id, NEW.content, COALESCE(NEW.tags, ''));
END;
CREATE TRIGGER memories_ad AFTER DELETE ON memories
WHEN OLD.content IS NOT NULL AND OLD.content != ''
BEGIN
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));
END;
CREATE TRIGGER memories_au AFTER UPDATE ON memories
WHEN OLD.content IS NOT NULL AND OLD.content != ''
BEGIN
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));
INSERT INTO memories_fts(rowid, content, tags)
VALUES (NEW.id, COALESCE(NEW.content, ''), COALESCE(NEW.tags, ''));
END;
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
id UNINDEXED,
tokenize='unicode61'
)
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\"\n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema\"\nCREATE TABLE _sqlx_migrations (\n version BIGINT PRIMARY KEY,\n description TEXT NOT NULL,\n installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,\n success BOOLEAN NOT NULL,\n checksum BLOB NOT NULL,\n execution_time BIGINT NOT NULL\n);\nCREATE TABLE video_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL);\nCREATE TABLE sqlite_sequence(name,seq);\nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE TABLE IF NOT EXISTS \"ocr_text\" (\n frame_id INTEGER NOT NULL,\n text TEXT NOT NULL,\n text_json TEXT,\n app_name TEXT NOT NULL DEFAULT '',\n ocr_engine TEXT NOT NULL DEFAULT 'unknown'\n, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);\nCREATE TABLE tags (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\nCREATE TABLE vision_tags (\n vision_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (vision_id, tag_id),\n FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE TABLE audio_tags (\n audio_chunk_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (audio_chunk_id, tag_id),\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id);\nCREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id);\nCREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);\nCREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);\nCREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);\nCREATE TABLE speakers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT,\n metadata JSON\n, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);\nCREATE TABLE speaker_embeddings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding FLOAT[512] NOT NULL\n check(\n typeof(embedding) == 'blob'\n and vec_length(embedding) == 512\n ),\n speaker_id INTEGER REFERENCES speakers(id)\n);\nCREATE TABLE IF NOT EXISTS \"audio_transcriptions\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n audio_chunk_id INTEGER NOT NULL,\n offset_index INTEGER NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n transcription TEXT NOT NULL,\n device TEXT NOT NULL DEFAULT '',\n is_input_device BOOLEAN NOT NULL DEFAULT TRUE,\n speaker_id INTEGER,\n transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME,\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)\n);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);\nCREATE INDEX idx_ocr_text_length ON ocr_text (text_length);\nCREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);\nCREATE TABLE ui_events (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n session_id TEXT,\n relative_ms INTEGER NOT NULL DEFAULT 0,\n event_type TEXT NOT NULL, -- click, move, scroll, key, text, app_switch, window_focus, clipboard\n -- Position\n x INTEGER,\n y INTEGER,\n delta_x INTEGER,\n delta_y INTEGER,\n -- Mouse/key\n button INTEGER,\n click_count INTEGER,\n key_code INTEGER,\n modifiers INTEGER,\n -- Text content\n text_content TEXT,\n text_length INTEGER,\n -- App context\n app_name TEXT,\n app_pid INTEGER,\n window_title TEXT,\n browser_url TEXT,\n -- Element context (from accessibility APIs)\n element_role TEXT,\n element_name TEXT,\n element_value TEXT,\n element_description TEXT,\n element_automation_id TEXT,\n element_bounds TEXT, -- JSON: {\"x\":0,\"y\":0,\"width\":100,\"height\":50}\n -- Frame correlation\n frame_id INTEGER,\n -- Sync columns\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME\n);\nCREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX idx_ui_events_event_type ON ui_events(event_type);\nCREATE INDEX idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX idx_ui_events_session_id ON ui_events(session_id);\nCREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id);\nCREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at);\nCREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL;\nCREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content,\n app_name,\n window_title,\n element_name,\n content='ui_events',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* ui_events_fts(text_content,app_name,window_title,element_name) */;\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER ui_events_ad AFTER DELETE ON ui_events BEGIN\n INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)\n VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);\nEND;\nCREATE TRIGGER ui_events_au AFTER UPDATE ON ui_events BEGIN\n INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)\n VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);\n INSERT INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);\nEND;\nCREATE UNIQUE INDEX idx_audio_transcription_chunk_text\nON audio_transcriptions(audio_chunk_id, transcription);\nCREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name);\nCREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC);\nCREATE TABLE pipe_executions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n pipe_name TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'queued',\n trigger_type TEXT NOT NULL DEFAULT 'manual',\n pid INTEGER,\n model TEXT,\n provider TEXT,\n started_at TEXT,\n finished_at TEXT,\n stdout TEXT DEFAULT '',\n stderr TEXT DEFAULT '',\n exit_code INTEGER,\n error_type TEXT,\n error_message TEXT,\n duration_ms INTEGER\n, session_path TEXT);\nCREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status);\nCREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running';\nCREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC);\nCREATE TABLE pipe_scheduler_state (\n pipe_name TEXT PRIMARY KEY,\n last_run_at TEXT,\n last_success_at TEXT,\n consecutive_failures INTEGER DEFAULT 0\n);\nCREATE TABLE IF NOT EXISTS \"frames\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n video_chunk_id INTEGER DEFAULT NULL,\n offset_index INTEGER NOT NULL DEFAULT 0,\n timestamp TIMESTAMP NOT NULL,\n name TEXT,\n app_name TEXT DEFAULT NULL,\n window_name TEXT DEFAULT NULL,\n focused BOOLEAN DEFAULT NULL,\n browser_url TEXT DEFAULT NULL,\n device_name TEXT NOT NULL DEFAULT '',\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME,\n -- New event-driven capture columns\n snapshot_path TEXT DEFAULT NULL,\n accessibility_text TEXT DEFAULT NULL,\n accessibility_tree_json TEXT DEFAULT NULL,\n content_hash INTEGER DEFAULT NULL,\n simhash INTEGER DEFAULT NULL,\n capture_trigger TEXT DEFAULT NULL,\n text_source TEXT DEFAULT NULL, cloud_blob_id TEXT DEFAULT NULL, full_text TEXT DEFAULT NULL, elements_ref_frame_id INTEGER DEFAULT NULL,\n FOREIGN KEY (video_chunk_id) REFERENCES video_chunks(id)\n);\nCREATE INDEX idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX idx_frames_timestamp_device\n ON frames(timestamp, device_name);\nCREATE INDEX idx_frames_snapshot_path\n ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL;\nCREATE TRIGGER ui_events_ai AFTER INSERT ON ui_events BEGIN\n INSERT OR IGNORE INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);\nEND;\nCREATE TABLE meetings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n meeting_start TEXT NOT NULL,\n meeting_end TEXT,\n meeting_app TEXT NOT NULL,\n title TEXT,\n attendees TEXT,\n detection_source TEXT NOT NULL DEFAULT 'app',\n created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\n, note TEXT);\nCREATE INDEX idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX idx_meetings_end ON meetings(meeting_end);\nCREATE TABLE elements (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n frame_id INTEGER NOT NULL,\n source TEXT NOT NULL, -- 'ocr' | 'accessibility'\n role TEXT NOT NULL, -- OCR: 'page','block','paragraph','line','word'\n -- AX: 'AXButton','AXTextField','AXStaticText', etc.\n text TEXT, -- element text content (NULL for container nodes)\n parent_id INTEGER, -- self-referential FK for tree hierarchy (NULL = root)\n depth INTEGER NOT NULL DEFAULT 0, -- tree depth (0 = root)\n left_bound REAL, -- normalized 0-1 bounding box\n top_bound REAL,\n width_bound REAL,\n height_bound REAL,\n confidence REAL, -- OCR confidence (0-100), NULL for AX\n sort_order INTEGER NOT NULL DEFAULT 0, properties TEXT, -- sibling order within parent\n FOREIGN KEY (frame_id) REFERENCES frames(id),\n FOREIGN KEY (parent_id) REFERENCES elements(id)\n);\nCREATE INDEX idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX idx_elements_parent_id ON elements(parent_id);\nCREATE INDEX idx_elements_source ON elements(source);\nCREATE INDEX idx_elements_frame_source ON elements(frame_id, source);\nCREATE VIRTUAL TABLE elements_fts USING fts5(\n text,\n role,\n frame_id UNINDEXED,\n content='elements',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* elements_fts(text,role,frame_id) */;\nCREATE TABLE IF NOT EXISTS 'elements_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'elements_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'elements_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'elements_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER elements_ai AFTER INSERT ON elements\nWHEN NEW.text IS NOT NULL AND NEW.text != ''\nBEGIN\n INSERT INTO elements_fts(rowid, text, role, frame_id)\n VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);\nEND;\nCREATE TRIGGER elements_ad AFTER DELETE ON elements\nWHEN OLD.text IS NOT NULL AND OLD.text != ''\nBEGIN\n INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)\n VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);\nEND;\nCREATE TRIGGER elements_au AFTER UPDATE ON elements\nWHEN OLD.text IS NOT NULL AND OLD.text != ''\nBEGIN\n INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)\n VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);\n INSERT INTO elements_fts(rowid, text, role, frame_id)\n VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);\nEND;\nCREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(\n transcription,\n device,\n speaker_id,\n content='audio_transcriptions',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* audio_transcriptions_fts(transcription,device,speaker_id) */;\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions\nWHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE INDEX idx_video_chunks_cloud_blob_id\n ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL;\nCREATE INDEX idx_frames_cloud_blob_id\n ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL;\nCREATE TABLE memories (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n content TEXT NOT NULL,\n source TEXT NOT NULL DEFAULT 'user',\n source_context TEXT,\n tags TEXT DEFAULT '[]',\n importance REAL DEFAULT 0.5,\n created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),\n updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\n, frame_id INTEGER REFERENCES frames(id) ON DELETE SET NULL);\nCREATE INDEX idx_memories_created_at ON memories(created_at);\nCREATE INDEX idx_memories_importance ON memories(importance DESC);\nCREATE INDEX idx_memories_source ON memories(source);\nCREATE VIRTUAL TABLE memories_fts USING fts5(\n content,\n tags,\n content='memories',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* memories_fts(content,tags) */;\nCREATE TABLE IF NOT EXISTS 'memories_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'memories_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'memories_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'memories_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER memories_ai AFTER INSERT ON memories\nWHEN NEW.content IS NOT NULL AND NEW.content != ''\nBEGIN\n INSERT INTO memories_fts(rowid, content, tags)\n VALUES (NEW.id, NEW.content, COALESCE(NEW.tags, ''));\nEND;\nCREATE TRIGGER memories_ad AFTER DELETE ON memories\nWHEN OLD.content IS NOT NULL AND OLD.content != ''\nBEGIN\n INSERT INTO memories_fts(memories_fts, rowid, content, tags)\n VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));\nEND;\nCREATE TRIGGER memories_au AFTER UPDATE ON memories\nWHEN OLD.content IS NOT NULL AND OLD.content != ''\nBEGIN\n INSERT INTO memories_fts(memories_fts, rowid, content, tags)\n VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));\n INSERT INTO memories_fts(rowid, content, tags)\n VALUES (NEW.id, COALESCE(NEW.content, ''), COALESCE(NEW.tags, ''));\nEND;\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text,\n app_name,\n window_name,\n browser_url,\n id UNINDEXED,\n tokenize='unicode61'\n)\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":"drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nzsh: command not found: #\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -o -name \"*.sqlite\" 2>/dev/null \n/Users/lukas/.screenpipe/db.sqlite\n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/\nls -lah ~/.screenpipe/data/ 2>/dev/null\nzsh: command not found: s\ntotal 0\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .\ndrwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..\ndrwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data\ndrwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions\n-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\\ Support/ -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name \"*.db\" -path \"*screenpipe*\" 2>/dev/null \n/Users/lukas/.screenpipe/data/screenpipe.db\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E \"\\.db|\\.sqlite\"\nscreenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm\nscreenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite\nscreenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nscreenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".tables\"\n_sqlx_migrations meetings \naudio_chunks memories \naudio_tags memories_fts \naudio_transcriptions memories_fts_config \naudio_transcriptions_fts memories_fts_data \naudio_transcriptions_fts_config memories_fts_docsize \naudio_transcriptions_fts_data memories_fts_idx \naudio_transcriptions_fts_docsize ocr_text \naudio_transcriptions_fts_idx pipe_executions \nelements pipe_scheduler_state \nelements_fts speaker_embeddings \nelements_fts_config speakers \nelements_fts_data tags \nelements_fts_docsize ui_events \nelements_fts_idx ui_events_fts \nframes ui_events_fts_config \nframes_fts ui_events_fts_data \nframes_fts_config ui_events_fts_docsize \nframes_fts_content ui_events_fts_idx \nframes_fts_data video_chunks \nframes_fts_docsize vision_tags \nframes_fts_idx \nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \".schema\"\nCREATE TABLE _sqlx_migrations (\n version BIGINT PRIMARY KEY,\n description TEXT NOT NULL,\n installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,\n success BOOLEAN NOT NULL,\n checksum BLOB NOT NULL,\n execution_time BIGINT NOT NULL\n);\nCREATE TABLE video_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL);\nCREATE TABLE sqlite_sequence(name,seq);\nCREATE TABLE audio_chunks (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n file_path TEXT NOT NULL\n, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME);\nCREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);\nCREATE TABLE IF NOT EXISTS \"ocr_text\" (\n frame_id INTEGER NOT NULL,\n text TEXT NOT NULL,\n text_json TEXT,\n app_name TEXT NOT NULL DEFAULT '',\n ocr_engine TEXT NOT NULL DEFAULT 'unknown'\n, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);\nCREATE TABLE tags (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT NOT NULL UNIQUE,\n created_at DATETIME DEFAULT CURRENT_TIMESTAMP\n);\nCREATE TABLE vision_tags (\n vision_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (vision_id, tag_id),\n FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE TABLE audio_tags (\n audio_chunk_id INTEGER NOT NULL,\n tag_id INTEGER NOT NULL,\n PRIMARY KEY (audio_chunk_id, tag_id),\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,\n FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE\n);\nCREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id);\nCREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id);\nCREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);\nCREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);\nCREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);\nCREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);\nCREATE TABLE speakers (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n name TEXT,\n metadata JSON\n, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);\nCREATE TABLE speaker_embeddings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n embedding FLOAT[512] NOT NULL\n check(\n typeof(embedding) == 'blob'\n and vec_length(embedding) == 512\n ),\n speaker_id INTEGER REFERENCES speakers(id)\n);\nCREATE TABLE IF NOT EXISTS \"audio_transcriptions\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n audio_chunk_id INTEGER NOT NULL,\n offset_index INTEGER NOT NULL,\n timestamp TIMESTAMP NOT NULL,\n transcription TEXT NOT NULL,\n device TEXT NOT NULL DEFAULT '',\n is_input_device BOOLEAN NOT NULL DEFAULT TRUE,\n speaker_id INTEGER,\n transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME,\n FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)\n);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);\nCREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);\nCREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);\nCREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);\nCREATE INDEX idx_ocr_text_length ON ocr_text (text_length);\nCREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);\nCREATE TABLE ui_events (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n session_id TEXT,\n relative_ms INTEGER NOT NULL DEFAULT 0,\n event_type TEXT NOT NULL, -- click, move, scroll, key, text, app_switch, window_focus, clipboard\n -- Position\n x INTEGER,\n y INTEGER,\n delta_x INTEGER,\n delta_y INTEGER,\n -- Mouse/key\n button INTEGER,\n click_count INTEGER,\n key_code INTEGER,\n modifiers INTEGER,\n -- Text content\n text_content TEXT,\n text_length INTEGER,\n -- App context\n app_name TEXT,\n app_pid INTEGER,\n window_title TEXT,\n browser_url TEXT,\n -- Element context (from accessibility APIs)\n element_role TEXT,\n element_name TEXT,\n element_value TEXT,\n element_description TEXT,\n element_automation_id TEXT,\n element_bounds TEXT, -- JSON: {\"x\":0,\"y\":0,\"width\":100,\"height\":50}\n -- Frame correlation\n frame_id INTEGER,\n -- Sync columns\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME\n);\nCREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp);\nCREATE INDEX idx_ui_events_event_type ON ui_events(event_type);\nCREATE INDEX idx_ui_events_app_name ON ui_events(app_name);\nCREATE INDEX idx_ui_events_session_id ON ui_events(session_id);\nCREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id);\nCREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id);\nCREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at);\nCREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL;\nCREATE VIRTUAL TABLE ui_events_fts USING fts5(\n text_content,\n app_name,\n window_title,\n element_name,\n content='ui_events',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* ui_events_fts(text_content,app_name,window_title,element_name) */;\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'ui_events_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER ui_events_ad AFTER DELETE ON ui_events BEGIN\n INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)\n VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);\nEND;\nCREATE TRIGGER ui_events_au AFTER UPDATE ON ui_events BEGIN\n INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)\n VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);\n INSERT INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);\nEND;\nCREATE UNIQUE INDEX idx_audio_transcription_chunk_text\nON audio_transcriptions(audio_chunk_id, transcription);\nCREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name);\nCREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC);\nCREATE TABLE pipe_executions (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n pipe_name TEXT NOT NULL,\n status TEXT NOT NULL DEFAULT 'queued',\n trigger_type TEXT NOT NULL DEFAULT 'manual',\n pid INTEGER,\n model TEXT,\n provider TEXT,\n started_at TEXT,\n finished_at TEXT,\n stdout TEXT DEFAULT '',\n stderr TEXT DEFAULT '',\n exit_code INTEGER,\n error_type TEXT,\n error_message TEXT,\n duration_ms INTEGER\n, session_path TEXT);\nCREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status);\nCREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running';\nCREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC);\nCREATE TABLE pipe_scheduler_state (\n pipe_name TEXT PRIMARY KEY,\n last_run_at TEXT,\n last_success_at TEXT,\n consecutive_failures INTEGER DEFAULT 0\n);\nCREATE TABLE IF NOT EXISTS \"frames\" (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n video_chunk_id INTEGER DEFAULT NULL,\n offset_index INTEGER NOT NULL DEFAULT 0,\n timestamp TIMESTAMP NOT NULL,\n name TEXT,\n app_name TEXT DEFAULT NULL,\n window_name TEXT DEFAULT NULL,\n focused BOOLEAN DEFAULT NULL,\n browser_url TEXT DEFAULT NULL,\n device_name TEXT NOT NULL DEFAULT '',\n sync_id TEXT,\n machine_id TEXT,\n synced_at DATETIME,\n -- New event-driven capture columns\n snapshot_path TEXT DEFAULT NULL,\n accessibility_text TEXT DEFAULT NULL,\n accessibility_tree_json TEXT DEFAULT NULL,\n content_hash INTEGER DEFAULT NULL,\n simhash INTEGER DEFAULT NULL,\n capture_trigger TEXT DEFAULT NULL,\n text_source TEXT DEFAULT NULL, cloud_blob_id TEXT DEFAULT NULL, full_text TEXT DEFAULT NULL, elements_ref_frame_id INTEGER DEFAULT NULL,\n FOREIGN KEY (video_chunk_id) REFERENCES video_chunks(id)\n);\nCREATE INDEX idx_frames_timestamp ON frames(timestamp);\nCREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id);\nCREATE INDEX idx_frames_timestamp_device\n ON frames(timestamp, device_name);\nCREATE INDEX idx_frames_snapshot_path\n ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL;\nCREATE TRIGGER ui_events_ai AFTER INSERT ON ui_events BEGIN\n INSERT OR IGNORE INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)\n VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);\nEND;\nCREATE TABLE meetings (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n meeting_start TEXT NOT NULL,\n meeting_end TEXT,\n meeting_app TEXT NOT NULL,\n title TEXT,\n attendees TEXT,\n detection_source TEXT NOT NULL DEFAULT 'app',\n created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\n, note TEXT);\nCREATE INDEX idx_meetings_start ON meetings(meeting_start);\nCREATE INDEX idx_meetings_end ON meetings(meeting_end);\nCREATE TABLE elements (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n frame_id INTEGER NOT NULL,\n source TEXT NOT NULL, -- 'ocr' | 'accessibility'\n role TEXT NOT NULL, -- OCR: 'page','block','paragraph','line','word'\n -- AX: 'AXButton','AXTextField','AXStaticText', etc.\n text TEXT, -- element text content (NULL for container nodes)\n parent_id INTEGER, -- self-referential FK for tree hierarchy (NULL = root)\n depth INTEGER NOT NULL DEFAULT 0, -- tree depth (0 = root)\n left_bound REAL, -- normalized 0-1 bounding box\n top_bound REAL,\n width_bound REAL,\n height_bound REAL,\n confidence REAL, -- OCR confidence (0-100), NULL for AX\n sort_order INTEGER NOT NULL DEFAULT 0, properties TEXT, -- sibling order within parent\n FOREIGN KEY (frame_id) REFERENCES frames(id),\n FOREIGN KEY (parent_id) REFERENCES elements(id)\n);\nCREATE INDEX idx_elements_frame_id ON elements(frame_id);\nCREATE INDEX idx_elements_parent_id ON elements(parent_id);\nCREATE INDEX idx_elements_source ON elements(source);\nCREATE INDEX idx_elements_frame_source ON elements(frame_id, source);\nCREATE VIRTUAL TABLE elements_fts USING fts5(\n text,\n role,\n frame_id UNINDEXED,\n content='elements',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* elements_fts(text,role,frame_id) */;\nCREATE TABLE IF NOT EXISTS 'elements_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'elements_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'elements_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'elements_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER elements_ai AFTER INSERT ON elements\nWHEN NEW.text IS NOT NULL AND NEW.text != ''\nBEGIN\n INSERT INTO elements_fts(rowid, text, role, frame_id)\n VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);\nEND;\nCREATE TRIGGER elements_ad AFTER DELETE ON elements\nWHEN OLD.text IS NOT NULL AND OLD.text != ''\nBEGIN\n INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)\n VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);\nEND;\nCREATE TRIGGER elements_au AFTER UPDATE ON elements\nWHEN OLD.text IS NOT NULL AND OLD.text != ''\nBEGIN\n INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)\n VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);\n INSERT INTO elements_fts(rowid, text, role, frame_id)\n VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);\nEND;\nCREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(\n transcription,\n device,\n speaker_id,\n content='audio_transcriptions',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* audio_transcriptions_fts(transcription,device,speaker_id) */;\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions\nWHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\nEND;\nCREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions\nWHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''\nBEGIN\n INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)\n VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);\n INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)\n VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);\nEND;\nCREATE INDEX idx_video_chunks_cloud_blob_id\n ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL;\nCREATE INDEX idx_frames_cloud_blob_id\n ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL;\nCREATE TABLE memories (\n id INTEGER PRIMARY KEY AUTOINCREMENT,\n content TEXT NOT NULL,\n source TEXT NOT NULL DEFAULT 'user',\n source_context TEXT,\n tags TEXT DEFAULT '[]',\n importance REAL DEFAULT 0.5,\n created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),\n updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))\n, frame_id INTEGER REFERENCES frames(id) ON DELETE SET NULL);\nCREATE INDEX idx_memories_created_at ON memories(created_at);\nCREATE INDEX idx_memories_importance ON memories(importance DESC);\nCREATE INDEX idx_memories_source ON memories(source);\nCREATE VIRTUAL TABLE memories_fts USING fts5(\n content,\n tags,\n content='memories',\n content_rowid='id',\n tokenize='unicode61'\n)\n/* memories_fts(content,tags) */;\nCREATE TABLE IF NOT EXISTS 'memories_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'memories_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'memories_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'memories_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER memories_ai AFTER INSERT ON memories\nWHEN NEW.content IS NOT NULL AND NEW.content != ''\nBEGIN\n INSERT INTO memories_fts(rowid, content, tags)\n VALUES (NEW.id, NEW.content, COALESCE(NEW.tags, ''));\nEND;\nCREATE TRIGGER memories_ad AFTER DELETE ON memories\nWHEN OLD.content IS NOT NULL AND OLD.content != ''\nBEGIN\n INSERT INTO memories_fts(memories_fts, rowid, content, tags)\n VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));\nEND;\nCREATE TRIGGER memories_au AFTER UPDATE ON memories\nWHEN OLD.content IS NOT NULL AND OLD.content != ''\nBEGIN\n INSERT INTO memories_fts(memories_fts, rowid, content, tags)\n VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));\n INSERT INTO memories_fts(rowid, content, tags)\n VALUES (NEW.id, COALESCE(NEW.content, ''), COALESCE(NEW.tags, ''));\nEND;\nCREATE VIRTUAL TABLE frames_fts USING fts5(\n full_text,\n app_name,\n window_name,\n browser_url,\n id UNINDEXED,\n tokenize='unicode61'\n)\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
5853192385605379516
|
3173372984674339333
|
click
|
accessibility
|
NULL
|
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
zsh: command not found: #
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -o -name "*.sqlite" 2>/dev/null
/Users/lukas/.screenpipe/db.sqlite
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ s -lah ~/.screenpipe/
ls -lah ~/.screenpipe/data/ 2>/dev/null
zsh: command not found: s
total 0
drwxr-xr-x 5 lukas staff 160B 11 Apr 15:03 .
drwxr-xr-x 10 lukas staff 320B 11 Apr 14:52 ..
drwxr-xr-x 5 lukas staff 160B 11 Apr 14:52 data
drwxr-xr-x 2 lukas staff 64B 9 Apr 20:05 pending-transcriptions
-rw-r--r-- 1 lukas staff 0B 11 Apr 15:03 screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/Library/Application\ Support/ -name "*.db" -path "*screenpipe*" 2>/dev/null
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ find ~/.screenpipe -name "*.db" -path "*screenpipe*" 2>/dev/null
/Users/lukas/.screenpipe/data/screenpipe.db
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ lsof -p $(pgrep screenpipe) | grep -E "\.db|\.sqlite"
screenpip 20525 lukas txt REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas txt REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 17u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 22u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 23u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 24u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 25u REG 1,15 32768 220914771 /Users/lukas/.screenpipe/db.sqlite-shm
screenpip 20525 lukas 26u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 27u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 28u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 29u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 31u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 33u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 55u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 56u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 57u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 58u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 59u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 60u REG 1,15 70270976 220904259 /Users/lukas/.screenpipe/db.sqlite
screenpip 20525 lukas 61u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
screenpip 20525 lukas 62u REG 1,15 16533592 220914770 /Users/lukas/.screenpipe/db.sqlite-wal
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".tables"
_sqlx_migrations meetings
audio_chunks memories
audio_tags memories_fts
audio_transcriptions memories_fts_config
audio_transcriptions_fts memories_fts_data
audio_transcriptions_fts_config memories_fts_docsize
audio_transcriptions_fts_data memories_fts_idx
audio_transcriptions_fts_docsize ocr_text
audio_transcriptions_fts_idx pipe_executions
elements pipe_scheduler_state
elements_fts speaker_embeddings
elements_fts_config speakers
elements_fts_data tags
elements_fts_docsize ui_events
elements_fts_idx ui_events_fts
frames ui_events_fts_config
frames_fts ui_events_fts_data
frames_fts_config ui_events_fts_docsize
frames_fts_content ui_events_fts_idx
frames_fts_data video_chunks
frames_fts_docsize vision_tags
frames_fts_idx
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite ".schema"
CREATE TABLE _sqlx_migrations (
version BIGINT PRIMARY KEY,
description TEXT NOT NULL,
installed_on TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
success BOOLEAN NOT NULL,
checksum BLOB NOT NULL,
execution_time BIGINT NOT NULL
);
CREATE TABLE video_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, device_name TEXT NOT NULL DEFAULT '', sync_id TEXT, machine_id TEXT, synced_at DATETIME, fps REAL NOT NULL DEFAULT 0.5, cloud_blob_id TEXT DEFAULT NULL);
CREATE TABLE sqlite_sequence(name,seq);
CREATE TABLE audio_chunks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
file_path TEXT NOT NULL
, timestamp TIMESTAMP, sync_id TEXT, machine_id TEXT, synced_at DATETIME);
CREATE INDEX idx_audio_chunks_timestamp ON audio_chunks(timestamp);
CREATE TABLE IF NOT EXISTS "ocr_text" (
frame_id INTEGER NOT NULL,
text TEXT NOT NULL,
text_json TEXT,
app_name TEXT NOT NULL DEFAULT '',
ocr_engine TEXT NOT NULL DEFAULT 'unknown'
, window_name TEXT, focused BOOLEAN DEFAULT FALSE, text_length INTEGER, sync_id TEXT, synced_at DATETIME);
CREATE TABLE tags (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE vision_tags (
vision_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (vision_id, tag_id),
FOREIGN KEY (vision_id) REFERENCES frames(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE TABLE audio_tags (
audio_chunk_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (audio_chunk_id, tag_id),
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags(id) ON DELETE CASCADE
);
CREATE INDEX idx_vision_tags_vision_id ON vision_tags(vision_id);
CREATE INDEX idx_vision_tags_tag_id ON vision_tags(tag_id);
CREATE INDEX idx_audio_tags_audio_chunk_id ON audio_tags(audio_chunk_id);
CREATE INDEX idx_audio_tags_tag_id ON audio_tags(tag_id);
CREATE INDEX idx_ocr_text_frame_id ON ocr_text(frame_id);
CREATE INDEX idx_ocr_text_frame_app_window ON ocr_text(frame_id, app_name, window_name);
CREATE TABLE speakers (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
metadata JSON
, hallucination BOOLEAN DEFAULT FALSE, centroid FLOAT[512], embedding_count INTEGER DEFAULT 0);
CREATE TABLE speaker_embeddings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
embedding FLOAT[512] NOT NULL
check(
typeof(embedding) == 'blob'
and vec_length(embedding) == 512
),
speaker_id INTEGER REFERENCES speakers(id)
);
CREATE TABLE IF NOT EXISTS "audio_transcriptions" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
audio_chunk_id INTEGER NOT NULL,
offset_index INTEGER NOT NULL,
timestamp TIMESTAMP NOT NULL,
transcription TEXT NOT NULL,
device TEXT NOT NULL DEFAULT '',
is_input_device BOOLEAN NOT NULL DEFAULT TRUE,
speaker_id INTEGER,
transcription_engine TEXT NOT NULL DEFAULT 'Whisper', start_time REAL, end_time REAL, text_length INTEGER, sync_id TEXT, synced_at DATETIME,
FOREIGN KEY (audio_chunk_id) REFERENCES audio_chunks(id)
);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id_timestamp ON audio_transcriptions(audio_chunk_id, timestamp);
CREATE INDEX idx_audio_transcriptions_audio_chunk_id ON audio_transcriptions(audio_chunk_id);
CREATE INDEX idx_audio_transcriptions_timestamp ON audio_transcriptions(timestamp);
CREATE INDEX idx_audio_transcriptions_transcription ON audio_transcriptions(transcription);
CREATE INDEX idx_ocr_text_length ON ocr_text (text_length);
CREATE INDEX idx_audio_transcriptions_length ON audio_transcriptions (text_length);
CREATE TABLE ui_events (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
session_id TEXT,
relative_ms INTEGER NOT NULL DEFAULT 0,
event_type TEXT NOT NULL, -- click, move, scroll, key, text, app_switch, window_focus, clipboard
-- Position
x INTEGER,
y INTEGER,
delta_x INTEGER,
delta_y INTEGER,
-- Mouse/key
button INTEGER,
click_count INTEGER,
key_code INTEGER,
modifiers INTEGER,
-- Text content
text_content TEXT,
text_length INTEGER,
-- App context
app_name TEXT,
app_pid INTEGER,
window_title TEXT,
browser_url TEXT,
-- Element context (from accessibility APIs)
element_role TEXT,
element_name TEXT,
element_value TEXT,
element_description TEXT,
element_automation_id TEXT,
element_bounds TEXT, -- JSON: {"x":0,"y":0,"width":100,"height":50}
-- Frame correlation
frame_id INTEGER,
-- Sync columns
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME
);
CREATE INDEX idx_ui_events_timestamp ON ui_events(timestamp);
CREATE INDEX idx_ui_events_event_type ON ui_events(event_type);
CREATE INDEX idx_ui_events_app_name ON ui_events(app_name);
CREATE INDEX idx_ui_events_session_id ON ui_events(session_id);
CREATE INDEX idx_ui_events_frame_id ON ui_events(frame_id);
CREATE INDEX idx_ui_events_sync_id ON ui_events(sync_id);
CREATE INDEX idx_ui_events_synced_at ON ui_events(synced_at);
CREATE INDEX idx_ui_events_unsynced ON ui_events(synced_at) WHERE synced_at IS NULL;
CREATE VIRTUAL TABLE ui_events_fts USING fts5(
text_content,
app_name,
window_title,
element_name,
content='ui_events',
content_rowid='id',
tokenize='unicode61'
)
/* ui_events_fts(text_content,app_name,window_title,element_name) */;
CREATE TABLE IF NOT EXISTS 'ui_events_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'ui_events_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'ui_events_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'ui_events_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER ui_events_ad AFTER DELETE ON ui_events BEGIN
INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)
VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);
END;
CREATE TRIGGER ui_events_au AFTER UPDATE ON ui_events BEGIN
INSERT INTO ui_events_fts(ui_events_fts, rowid, text_content, app_name, window_title, element_name)
VALUES('delete', OLD.id, OLD.text_content, OLD.app_name, OLD.window_title, OLD.element_name);
INSERT INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)
VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);
END;
CREATE UNIQUE INDEX idx_audio_transcription_chunk_text
ON audio_transcriptions(audio_chunk_id, transcription);
CREATE INDEX idx_video_chunks_device_name ON video_chunks(device_name);
CREATE INDEX idx_video_chunks_device_name_id ON video_chunks(device_name, id DESC);
CREATE TABLE pipe_executions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
pipe_name TEXT NOT NULL,
status TEXT NOT NULL DEFAULT 'queued',
trigger_type TEXT NOT NULL DEFAULT 'manual',
pid INTEGER,
model TEXT,
provider TEXT,
started_at TEXT,
finished_at TEXT,
stdout TEXT DEFAULT '',
stderr TEXT DEFAULT '',
exit_code INTEGER,
error_type TEXT,
error_message TEXT,
duration_ms INTEGER
, session_path TEXT);
CREATE INDEX idx_pipe_exec_name_status ON pipe_executions(pipe_name, status);
CREATE INDEX idx_pipe_exec_running ON pipe_executions(status) WHERE status = 'running';
CREATE INDEX idx_pipe_exec_name_time ON pipe_executions(pipe_name, id DESC);
CREATE TABLE pipe_scheduler_state (
pipe_name TEXT PRIMARY KEY,
last_run_at TEXT,
last_success_at TEXT,
consecutive_failures INTEGER DEFAULT 0
);
CREATE TABLE IF NOT EXISTS "frames" (
id INTEGER PRIMARY KEY AUTOINCREMENT,
video_chunk_id INTEGER DEFAULT NULL,
offset_index INTEGER NOT NULL DEFAULT 0,
timestamp TIMESTAMP NOT NULL,
name TEXT,
app_name TEXT DEFAULT NULL,
window_name TEXT DEFAULT NULL,
focused BOOLEAN DEFAULT NULL,
browser_url TEXT DEFAULT NULL,
device_name TEXT NOT NULL DEFAULT '',
sync_id TEXT,
machine_id TEXT,
synced_at DATETIME,
-- New event-driven capture columns
snapshot_path TEXT DEFAULT NULL,
accessibility_text TEXT DEFAULT NULL,
accessibility_tree_json TEXT DEFAULT NULL,
content_hash INTEGER DEFAULT NULL,
simhash INTEGER DEFAULT NULL,
capture_trigger TEXT DEFAULT NULL,
text_source TEXT DEFAULT NULL, cloud_blob_id TEXT DEFAULT NULL, full_text TEXT DEFAULT NULL, elements_ref_frame_id INTEGER DEFAULT NULL,
FOREIGN KEY (video_chunk_id) REFERENCES video_chunks(id)
);
CREATE INDEX idx_frames_timestamp ON frames(timestamp);
CREATE INDEX idx_frames_video_chunk_id ON frames(video_chunk_id);
CREATE INDEX idx_frames_timestamp_device
ON frames(timestamp, device_name);
CREATE INDEX idx_frames_snapshot_path
ON frames(snapshot_path) WHERE snapshot_path IS NOT NULL;
CREATE TRIGGER ui_events_ai AFTER INSERT ON ui_events BEGIN
INSERT OR IGNORE INTO ui_events_fts(rowid, text_content, app_name, window_title, element_name)
VALUES (NEW.id, NEW.text_content, NEW.app_name, NEW.window_title, NEW.element_name);
END;
CREATE TABLE meetings (
id INTEGER PRIMARY KEY AUTOINCREMENT,
meeting_start TEXT NOT NULL,
meeting_end TEXT,
meeting_app TEXT NOT NULL,
title TEXT,
attendees TEXT,
detection_source TEXT NOT NULL DEFAULT 'app',
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
, note TEXT);
CREATE INDEX idx_meetings_start ON meetings(meeting_start);
CREATE INDEX idx_meetings_end ON meetings(meeting_end);
CREATE TABLE elements (
id INTEGER PRIMARY KEY AUTOINCREMENT,
frame_id INTEGER NOT NULL,
source TEXT NOT NULL, -- 'ocr' | 'accessibility'
role TEXT NOT NULL, -- OCR: 'page','block','paragraph','line','word'
-- AX: 'AXButton','AXTextField','AXStaticText', etc.
text TEXT, -- element text content (NULL for container nodes)
parent_id INTEGER, -- self-referential FK for tree hierarchy (NULL = root)
depth INTEGER NOT NULL DEFAULT 0, -- tree depth (0 = root)
left_bound REAL, -- normalized 0-1 bounding box
top_bound REAL,
width_bound REAL,
height_bound REAL,
confidence REAL, -- OCR confidence (0-100), NULL for AX
sort_order INTEGER NOT NULL DEFAULT 0, properties TEXT, -- sibling order within parent
FOREIGN KEY (frame_id) REFERENCES frames(id),
FOREIGN KEY (parent_id) REFERENCES elements(id)
);
CREATE INDEX idx_elements_frame_id ON elements(frame_id);
CREATE INDEX idx_elements_parent_id ON elements(parent_id);
CREATE INDEX idx_elements_source ON elements(source);
CREATE INDEX idx_elements_frame_source ON elements(frame_id, source);
CREATE VIRTUAL TABLE elements_fts USING fts5(
text,
role,
frame_id UNINDEXED,
content='elements',
content_rowid='id',
tokenize='unicode61'
)
/* elements_fts(text,role,frame_id) */;
CREATE TABLE IF NOT EXISTS 'elements_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'elements_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'elements_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'elements_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER elements_ai AFTER INSERT ON elements
WHEN NEW.text IS NOT NULL AND NEW.text != ''
BEGIN
INSERT INTO elements_fts(rowid, text, role, frame_id)
VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);
END;
CREATE TRIGGER elements_ad AFTER DELETE ON elements
WHEN OLD.text IS NOT NULL AND OLD.text != ''
BEGIN
INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)
VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);
END;
CREATE TRIGGER elements_au AFTER UPDATE ON elements
WHEN OLD.text IS NOT NULL AND OLD.text != ''
BEGIN
INSERT INTO elements_fts(elements_fts, rowid, text, role, frame_id)
VALUES ('delete', OLD.id, OLD.text, OLD.role, OLD.frame_id);
INSERT INTO elements_fts(rowid, text, role, frame_id)
VALUES (NEW.id, NEW.text, NEW.role, NEW.frame_id);
END;
CREATE VIRTUAL TABLE audio_transcriptions_fts USING fts5(
transcription,
device,
speaker_id,
content='audio_transcriptions',
content_rowid='id',
tokenize='unicode61'
)
/* audio_transcriptions_fts(transcription,device,speaker_id) */;
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'audio_transcriptions_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER audio_transcriptions_ai AFTER INSERT ON audio_transcriptions
WHEN NEW.transcription IS NOT NULL AND NEW.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, NEW.transcription, COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_delete AFTER DELETE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
END;
CREATE TRIGGER audio_transcriptions_update AFTER UPDATE ON audio_transcriptions
WHEN OLD.transcription IS NOT NULL AND OLD.transcription != ''
BEGIN
INSERT INTO audio_transcriptions_fts(audio_transcriptions_fts, rowid, transcription, device, speaker_id)
VALUES ('delete', OLD.id, OLD.transcription, COALESCE(OLD.device, ''), OLD.speaker_id);
INSERT INTO audio_transcriptions_fts(rowid, transcription, device, speaker_id)
VALUES (NEW.id, COALESCE(NEW.transcription, ''), COALESCE(NEW.device, ''), NEW.speaker_id);
END;
CREATE INDEX idx_video_chunks_cloud_blob_id
ON video_chunks(cloud_blob_id) WHERE cloud_blob_id IS NULL;
CREATE INDEX idx_frames_cloud_blob_id
ON frames(cloud_blob_id) WHERE cloud_blob_id IS NULL AND snapshot_path IS NOT NULL;
CREATE TABLE memories (
id INTEGER PRIMARY KEY AUTOINCREMENT,
content TEXT NOT NULL,
source TEXT NOT NULL DEFAULT 'user',
source_context TEXT,
tags TEXT DEFAULT '[]',
importance REAL DEFAULT 0.5,
created_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now')),
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ', 'now'))
, frame_id INTEGER REFERENCES frames(id) ON DELETE SET NULL);
CREATE INDEX idx_memories_created_at ON memories(created_at);
CREATE INDEX idx_memories_importance ON memories(importance DESC);
CREATE INDEX idx_memories_source ON memories(source);
CREATE VIRTUAL TABLE memories_fts USING fts5(
content,
tags,
content='memories',
content_rowid='id',
tokenize='unicode61'
)
/* memories_fts(content,tags) */;
CREATE TABLE IF NOT EXISTS 'memories_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'memories_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'memories_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'memories_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER memories_ai AFTER INSERT ON memories
WHEN NEW.content IS NOT NULL AND NEW.content != ''
BEGIN
INSERT INTO memories_fts(rowid, content, tags)
VALUES (NEW.id, NEW.content, COALESCE(NEW.tags, ''));
END;
CREATE TRIGGER memories_ad AFTER DELETE ON memories
WHEN OLD.content IS NOT NULL AND OLD.content != ''
BEGIN
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));
END;
CREATE TRIGGER memories_au AFTER UPDATE ON memories
WHEN OLD.content IS NOT NULL AND OLD.content != ''
BEGIN
INSERT INTO memories_fts(memories_fts, rowid, content, tags)
VALUES ('delete', OLD.id, OLD.content, COALESCE(OLD.tags, ''));
INSERT INTO memories_fts(rowid, content, tags)
VALUES (NEW.id, COALESCE(NEW.content, ''), COALESCE(NEW.tags, ''));
END;
CREATE VIRTUAL TABLE frames_fts USING fts5(
full_text,
app_name,
window_name,
browser_url,
id UNINDEXED,
tokenize='unicode61'
)
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
|
720
|
17
|
5
|
2026-04-11T12:09:39.363085+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909379363_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"","depth":4,"value":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
-4034464612027230115
|
7936206669882842100
|
clipboard
|
accessibility
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
719
|
|
721
|
17
|
6
|
2026-04-11T12:09:42.682733+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909382682_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
-332181317459790359
|
7936206669614402548
|
visual_change
|
accessibility
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
|
722
|
17
|
7
|
2026-04-11T12:09:56.125812+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909396125_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹ 40lhl100% C-zshDOCKER• ₴1DEV (-zsh)O $2APP (-zsh)• *3-zsh• 84-zshlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*)BY date(timestamp);"2026-04-0915232026-04-11|197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $|• *5-zsh• 86frames FROM frames GROUPSat 11 Apr 15:09:55T81-zshX7BY date(timestamp)ORDER...
|
NULL
|
3700243769288638945
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹ 40lhl100% C-zshDOCKER• ₴1DEV (-zsh)O $2APP (-zsh)• *3-zsh• 84-zshlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*)BY date(timestamp);"2026-04-0915232026-04-11|197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $|• *5-zsh• 86frames FROM frames GROUPSat 11 Apr 15:09:55T81-zshX7BY date(timestamp)ORDER...
|
721
|
|
723
|
17
|
8
|
2026-04-11T12:09:56.753136+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909396753_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelp‹ $0(ahl100% <7-zshDOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• ₴з-zsh• 84-zshlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*)BY date(timestamp);"2026-04-0915232026-04-11|197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ l• ₴5-zshO 886frames FROM frames GROUPSat 11 Apr 15:09:56181-zsh*7BY date(timestamp)ORDER...
|
NULL
|
-9129933927592684585
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShelllEditViewSessionScriptsProfilesWindowHe iTerm2ShelllEditViewSessionScriptsProfilesWindowHelp‹ $0(ahl100% <7-zshDOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• ₴з-zsh• 84-zshlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*)BY date(timestamp);"2026-04-0915232026-04-11|197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ l• ₴5-zshO 886frames FROM frames GROUPSat 11 Apr 15:09:56181-zsh*7BY date(timestamp)ORDER...
|
NULL
|
|
724
|
17
|
9
|
2026-04-11T12:09:57.390178+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909397390_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
-332181317459790359
|
7936206669614402548
|
click
|
accessibility
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
723
|
|
725
|
17
|
10
|
2026-04-11T12:09:58.370975+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909398370_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-1 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-1 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"","depth":4,"value":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-1 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
8864343563964157069
|
7936347407102757812
|
clipboard
|
accessibility
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-1 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
|
726
|
17
|
11
|
2026-04-11T12:10:29.432329+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909429432_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelplhl-zshDOCKER• ₴1DEV (-zsh)-O $2APP (-zsh)• *3-zsh• 84-zshlukas@Lukas-Kovaliks-MacBook-Pro-JiminnyBY~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*)date(timestamp);"2026-04-0915232026-04-11|197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/ screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;"iTerm2|185113.9Dial3112.3Safaril2011.5Claude|1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $|• *5100% CSat 11 Apr 15:10:29T81-zshO ₴6-zsh*7frames FROM frames GROUPBY date(timestamp)ORDER...
|
NULL
|
905455032535114476
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelplhl-zshDOCKER• ₴1DEV (-zsh)-O $2APP (-zsh)• *3-zsh• 84-zshlukas@Lukas-Kovaliks-MacBook-Pro-JiminnyBY~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*)date(timestamp);"2026-04-0915232026-04-11|197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/ screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;"iTerm2|185113.9Dial3112.3Safaril2011.5Claude|1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $|• *5100% CSat 11 Apr 15:10:29T81-zshO ₴6-zsh*7frames FROM frames GROUPBY date(timestamp)ORDER...
|
725
|
|
727
|
17
|
12
|
2026-04-11T12:10:31.128387+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909431128_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹$0(ahl100% <7• 0-zshDOCKERO ₴1DEV (-zsh)-O $2APP (-zsh)• ₴з-zsh• 84-zsh• ₴5lukas@Lukas-Kovaliks-MacBook-Pro-JiminnyBY~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*)asdate(timestamp);"2026-04-0915232026-04-11|197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECTapp_name, COUNT(*) as frames,ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;"iTerm2|185113.9Dial3112.3Safaril2011.5Claude|1210.9UserNotificationCenter1410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ П-zshO ₴6frames FROM frames GROUPSat 11 Apr 15:10:30181-zsh*7BY date(timestamp)ORDER...
|
NULL
|
-8523551236030448221
|
NULL
|
visual_change
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹$0(ahl100% <7• 0-zshDOCKERO ₴1DEV (-zsh)-O $2APP (-zsh)• ₴з-zsh• 84-zsh• ₴5lukas@Lukas-Kovaliks-MacBook-Pro-JiminnyBY~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*)asdate(timestamp);"2026-04-0915232026-04-11|197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECTapp_name, COUNT(*) as frames,ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;"iTerm2|185113.9Dial3112.3Safaril2011.5Claude|1210.9UserNotificationCenter1410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ П-zshO ₴6frames FROM frames GROUPSat 11 Apr 15:10:30181-zsh*7BY date(timestamp)ORDER...
|
NULL
|
|
728
|
17
|
13
|
2026-04-11T12:10:31.782354+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909431782_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
7975991961833669851
|
7936347407106952116
|
click
|
accessibility
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
727
|
|
729
|
17
|
14
|
2026-04-11T12:10:32.514407+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909432514_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"","depth":4,"value":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
4165807506915910114
|
7936347407106952116
|
clipboard
|
accessibility
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
|
730
|
17
|
15
|
2026-04-11T12:10:34.147103+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909434147_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT browser_url, COUNT(*) as frames
FROM frames
WHERE date(timestamp) = date('now', '-1 day')
AND browser_url IS NOT NULL
GROUP BY browser_url
ORDER BY frames DESC
LIMIT 20;
"
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT browser_url, COUNT(*) as frames\nFROM frames\nWHERE date(timestamp) = date('now', '-1 day')\nAND browser_url IS NOT NULL\nGROUP BY browser_url\nORDER BY frames DESC\nLIMIT 20;\n\"","depth":4,"value":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT browser_url, COUNT(*) as frames\nFROM frames\nWHERE date(timestamp) = date('now', '-1 day')\nAND browser_url IS NOT NULL\nGROUP BY browser_url\nORDER BY frames DESC\nLIMIT 20;\n\"","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
8552368549857249682
|
7937473341373533108
|
visual_change
|
accessibility
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT browser_url, COUNT(*) as frames
FROM frames
WHERE date(timestamp) = date('now', '-1 day')
AND browser_url IS NOT NULL
GROUP BY browser_url
ORDER BY frames DESC
LIMIT 20;
"
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
729
|
|
731
|
17
|
16
|
2026-04-11T12:10:53.117178+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909453117_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelplhl-zshDOCKER• ₴1DEV (-zsh)O $2APP (-zsh)• *з-zsh• 84-zshlukas@Lukas-Kovaliks-MacBook-Pro-JiminnyBY~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*)date(timestamp);"2026-04-0915232026-04-11|197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECTapp_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutesFROM framesWHERE date(timestamp) = date("now', '-2 day')AND app_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;"iTerm2|185113.9Dial3112.3Safaril2011.5Claude|1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date("now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $• *5100% C-zsh• ₴6frames FROM frames GROUPSat 11 Apr 15:10:52T81-zsh*7BY date(timestamp)ORDER...
|
NULL
|
-2687616628962651192
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelplhl-zshDOCKER• ₴1DEV (-zsh)O $2APP (-zsh)• *з-zsh• 84-zshlukas@Lukas-Kovaliks-MacBook-Pro-JiminnyBY~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*)date(timestamp);"2026-04-0915232026-04-11|197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECTapp_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutesFROM framesWHERE date(timestamp) = date("now', '-2 day')AND app_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;"iTerm2|185113.9Dial3112.3Safaril2011.5Claude|1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date("now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $• *5100% C-zsh• ₴6frames FROM frames GROUPSat 11 Apr 15:10:52T81-zsh*7BY date(timestamp)ORDER...
|
NULL
|
|
732
|
17
|
17
|
2026-04-11T12:10:54.789098+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909454789_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹$0(ahl100% <7Sat 11 Apr 15:10:54• 0-zsh181DOCKERO ₴1DEV (-zsh)-O $2APP (-zsh)• *з-zsh• 84-zsh• ₴5-zshO ₴6-zsh*7lukas@Lukas-Kovaliks-MacBook-Pro-Jiminnydate(timestamp);"BY date(timestamp)BY~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*)asframes FROM frames GROUPORDER2026-04-0915232026-04-11|197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECTapp_name, COUNT(*) as frames,ROUND(COUNT(*) * 4.5 / 60.0, 1) asest_minutesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;"iTerm2|185113.9Dial3112.3Safaril2011.5Claude|1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ П...
|
NULL
|
-1059676791695118817
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹$0(ahl100% <7Sat 11 Apr 15:10:54• 0-zsh181DOCKERO ₴1DEV (-zsh)-O $2APP (-zsh)• *з-zsh• 84-zsh• ₴5-zshO ₴6-zsh*7lukas@Lukas-Kovaliks-MacBook-Pro-Jiminnydate(timestamp);"BY date(timestamp)BY~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*)asframes FROM frames GROUPORDER2026-04-0915232026-04-11|197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECTapp_name, COUNT(*) as frames,ROUND(COUNT(*) * 4.5 / 60.0, 1) asest_minutesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;"iTerm2|185113.9Dial3112.3Safaril2011.5Claude|1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ П...
|
731
|
|
733
|
17
|
18
|
2026-04-11T12:10:55.804976+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909455804_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT browser_url, COUNT(*) as frames
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND browser_url IS NOT NULL
GROUP BY browser_url
ORDER BY frames DESC
LIMIT 20;
"
[URL_WITH_CREDENTIALS] ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT browser_url, COUNT(*) as frames\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND browser_url IS NOT NULL\nGROUP BY browser_url\nORDER BY frames DESC\nLIMIT 20;\n\"\nhttps://play.hbomax.com/video/watch/16b35e6c-e745-4416-bc16-0ef5092ba4e0/07b58730-24cb-419c-b5a0-1e258a77cd21|13\nhttps://location-tracker.lakylak.xyz/dashboard|4\nhttps://nas.lakylak.xyz/desktop/?os=ugospro#/|2\nhttps://play.hbomax.com/show/06f986dd-dd6a-4596-9a0a-f473ef99c64b|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT browser_url, COUNT(*) as frames\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND browser_url IS NOT NULL\nGROUP BY browser_url\nORDER BY frames DESC\nLIMIT 20;\n\"\nhttps://play.hbomax.com/video/watch/16b35e6c-e745-4416-bc16-0ef5092ba4e0/07b58730-24cb-419c-b5a0-1e258a77cd21|13\nhttps://location-tracker.lakylak.xyz/dashboard|4\nhttps://nas.lakylak.xyz/desktop/?os=ugospro#/|2\nhttps://play.hbomax.com/show/06f986dd-dd6a-4596-9a0a-f473ef99c64b|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
9206977607410668598
|
7936347475826428852
|
click
|
accessibility
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT browser_url, COUNT(*) as frames
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND browser_url IS NOT NULL
GROUP BY browser_url
ORDER BY frames DESC
LIMIT 20;
"
[URL_WITH_CREDENTIALS] ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
|
734
|
17
|
19
|
2026-04-11T12:10:56.864575+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909456864_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT browser_url, COUNT(*) as frames
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND browser_url IS NOT NULL
GROUP BY browser_url
ORDER BY frames DESC
LIMIT 20;
"
[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, event_type, COUNT(*) as events
FROM ui_events
WHERE date(timestamp) = date('now', '-1 day')
AND app_name IS NOT NULL
GROUP BY app_name, event_type
ORDER BY events DESC
LIMIT 30;
"
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT browser_url, COUNT(*) as frames\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND browser_url IS NOT NULL\nGROUP BY browser_url\nORDER BY frames DESC\nLIMIT 20;\n\"\nhttps://play.hbomax.com/video/watch/16b35e6c-e745-4416-bc16-0ef5092ba4e0/07b58730-24cb-419c-b5a0-1e258a77cd21|13\nhttps://location-tracker.lakylak.xyz/dashboard|4\nhttps://nas.lakylak.xyz/desktop/?os=ugospro#/|2\nhttps://play.hbomax.com/show/06f986dd-dd6a-4596-9a0a-f473ef99c64b|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, event_type, COUNT(*) as events\nFROM ui_events\nWHERE date(timestamp) = date('now', '-1 day')\nAND app_name IS NOT NULL\nGROUP BY app_name, event_type\nORDER BY events DESC\nLIMIT 30;\n\"","depth":4,"value":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT browser_url, COUNT(*) as frames\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND browser_url IS NOT NULL\nGROUP BY browser_url\nORDER BY frames DESC\nLIMIT 20;\n\"\nhttps://play.hbomax.com/video/watch/16b35e6c-e745-4416-bc16-0ef5092ba4e0/07b58730-24cb-419c-b5a0-1e258a77cd21|13\nhttps://location-tracker.lakylak.xyz/dashboard|4\nhttps://nas.lakylak.xyz/desktop/?os=ugospro#/|2\nhttps://play.hbomax.com/show/06f986dd-dd6a-4596-9a0a-f473ef99c64b|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, event_type, COUNT(*) as events\nFROM ui_events\nWHERE date(timestamp) = date('now', '-1 day')\nAND app_name IS NOT NULL\nGROUP BY app_name, event_type\nORDER BY events DESC\nLIMIT 30;\n\"","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
-4731763117813192749
|
7937473375733269428
|
clipboard
|
accessibility
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT browser_url, COUNT(*) as frames
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND browser_url IS NOT NULL
GROUP BY browser_url
ORDER BY frames DESC
LIMIT 20;
"
[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, event_type, COUNT(*) as events
FROM ui_events
WHERE date(timestamp) = date('now', '-1 day')
AND app_name IS NOT NULL
GROUP BY app_name, event_type
ORDER BY events DESC
LIMIT 30;
"
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
733
|
|
735
|
17
|
20
|
2026-04-11T12:11:26.355864+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909486355_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT browser_url, COUNT(*) as frames
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND browser_url IS NOT NULL
GROUP BY browser_url
ORDER BY frames DESC
LIMIT 20;
"
[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, event_type, COUNT(*) as events
FROM ui_events
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name, event_type
ORDER BY events DESC
LIMIT 30;
"
iTerm2|click|283
Dia|click|171
iTerm2|key|122
Dia|key|56
Safari|click|56
Claude|click|50
iTerm2|app_switch|34
Dia|clipboard|17
Safari|key|11
Claude|app_switch|9
Dia|app_switch|9
UserNotificationCenter|click|8
Claude|key|6
iTerm2|clipboard|6
UserNotificationCenter|app_switch|4
Safari|app_switch|3
Slack|app_switch|1
Slack|click|1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT browser_url, COUNT(*) as frames\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND browser_url IS NOT NULL\nGROUP BY browser_url\nORDER BY frames DESC\nLIMIT 20;\n\"\nhttps://play.hbomax.com/video/watch/16b35e6c-e745-4416-bc16-0ef5092ba4e0/07b58730-24cb-419c-b5a0-1e258a77cd21|13\nhttps://location-tracker.lakylak.xyz/dashboard|4\nhttps://nas.lakylak.xyz/desktop/?os=ugospro#/|2\nhttps://play.hbomax.com/show/06f986dd-dd6a-4596-9a0a-f473ef99c64b|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, event_type, COUNT(*) as events\nFROM ui_events\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name, event_type\nORDER BY events DESC\nLIMIT 30;\n\"\niTerm2|click|283\nDia|click|171\niTerm2|key|122\nDia|key|56\nSafari|click|56\nClaude|click|50\niTerm2|app_switch|34\nDia|clipboard|17\nSafari|key|11\nClaude|app_switch|9\nDia|app_switch|9\nUserNotificationCenter|click|8\nClaude|key|6\niTerm2|clipboard|6\nUserNotificationCenter|app_switch|4\nSafari|app_switch|3\nSlack|app_switch|1\nSlack|click|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT browser_url, COUNT(*) as frames\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND browser_url IS NOT NULL\nGROUP BY browser_url\nORDER BY frames DESC\nLIMIT 20;\n\"\nhttps://play.hbomax.com/video/watch/16b35e6c-e745-4416-bc16-0ef5092ba4e0/07b58730-24cb-419c-b5a0-1e258a77cd21|13\nhttps://location-tracker.lakylak.xyz/dashboard|4\nhttps://nas.lakylak.xyz/desktop/?os=ugospro#/|2\nhttps://play.hbomax.com/show/06f986dd-dd6a-4596-9a0a-f473ef99c64b|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, event_type, COUNT(*) as events\nFROM ui_events\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name, event_type\nORDER BY events DESC\nLIMIT 30;\n\"\niTerm2|click|283\nDia|click|171\niTerm2|key|122\nDia|key|56\nSafari|click|56\nClaude|click|50\niTerm2|app_switch|34\nDia|clipboard|17\nSafari|key|11\nClaude|app_switch|9\nDia|app_switch|9\nUserNotificationCenter|click|8\nClaude|key|6\niTerm2|clipboard|6\nUserNotificationCenter|app_switch|4\nSafari|app_switch|3\nSlack|app_switch|1\nSlack|click|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
2193639622446553113
|
7937336967571948468
|
click
|
accessibility
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT browser_url, COUNT(*) as frames
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND browser_url IS NOT NULL
GROUP BY browser_url
ORDER BY frames DESC
LIMIT 20;
"
[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, event_type, COUNT(*) as events
FROM ui_events
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name, event_type
ORDER BY events DESC
LIMIT 30;
"
iTerm2|click|283
Dia|click|171
iTerm2|key|122
Dia|key|56
Safari|click|56
Claude|click|50
iTerm2|app_switch|34
Dia|clipboard|17
Safari|key|11
Claude|app_switch|9
Dia|app_switch|9
UserNotificationCenter|click|8
Claude|key|6
iTerm2|clipboard|6
UserNotificationCenter|app_switch|4
Safari|app_switch|3
Slack|app_switch|1
Slack|click|1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
|
736
|
17
|
21
|
2026-04-11T12:11:31.472371+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909491472_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
ITerm2ShellEdit ViewSessionScriptsProfilesWindow ITerm2ShellEdit ViewSessionScriptsProfilesWindow Helpll.0100% C47-zshDOCKERO ₴1DEV (-zsh)O $2APP (-zsh)•*3-zshControl Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY framesDESCLIMIT 20;• *4-[URL_WITH_CREDENTIALS] ~/.screenpipe $• *5-zsh* *6Sat 11 Apr 15:11:31-zshT81*7...
|
NULL
|
-881415928532834425
|
NULL
|
click
|
ocr
|
NULL
|
ITerm2ShellEdit ViewSessionScriptsProfilesWindow ITerm2ShellEdit ViewSessionScriptsProfilesWindow Helpll.0100% C47-zshDOCKERO ₴1DEV (-zsh)O $2APP (-zsh)•*3-zshControl Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY framesDESCLIMIT 20;• *4-[URL_WITH_CREDENTIALS] ~/.screenpipe $• *5-zsh* *6Sat 11 Apr 15:11:31-zshT81*7...
|
735
|
|
737
|
17
|
22
|
2026-04-11T12:11:32.051765+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909492051_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2Shell Edit ViewSessionScriptsProfilesWindo iTerm2Shell Edit ViewSessionScriptsProfilesWindowHelpC$Ш OOA100% C47-zshDOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• *3-zshControl Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY framesDESCLIMIT 20;• *4-[URL_WITH_CREDENTIALS] ~/.screenpipe $• *5-zshS-₴66Sat 11 Apr 15:11:31-zshT81X7...
|
NULL
|
377600499821858474
|
NULL
|
visual_change
|
ocr
|
NULL
|
iTerm2Shell Edit ViewSessionScriptsProfilesWindo iTerm2Shell Edit ViewSessionScriptsProfilesWindowHelpC$Ш OOA100% C47-zshDOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• *3-zshControl Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY framesDESCLIMIT 20;• *4-[URL_WITH_CREDENTIALS] ~/.screenpipe $• *5-zshS-₴66Sat 11 Apr 15:11:31-zshT81X7...
|
NULL
|
|
738
|
17
|
23
|
2026-04-11T12:11:32.842626+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909492842_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2Shell Edit ViewSessionScriptsProfilesWindo iTerm2Shell Edit ViewSessionScriptsProfilesWindowHelpC$Ш OOA100% C47-zshDOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• *3-zshControl Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY framesDESCLIMIT 20;• *4-[URL_WITH_CREDENTIALS] ~/.screenpipe $• *5-zsh₴86Sat 11 Apr 15:11:32-zshT81X7...
|
NULL
|
-6888013795616692278
|
NULL
|
clipboard
|
ocr
|
NULL
|
iTerm2Shell Edit ViewSessionScriptsProfilesWindo iTerm2Shell Edit ViewSessionScriptsProfilesWindowHelpC$Ш OOA100% C47-zshDOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• *3-zshControl Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY framesDESCLIMIT 20;• *4-[URL_WITH_CREDENTIALS] ~/.screenpipe $• *5-zsh₴86Sat 11 Apr 15:11:32-zshT81X7...
|
737
|
|
739
|
17
|
24
|
2026-04-11T12:11:45.963964+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909505963_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT browser_url, COUNT(*) as frames
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND browser_url IS NOT NULL
GROUP BY browser_url
ORDER BY frames DESC
LIMIT 20;
"
[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, event_type, COUNT(*) as events
FROM ui_events
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name, event_type
ORDER BY events DESC
LIMIT 30;
"
iTerm2|click|283
Dia|click|171
iTerm2|key|122
Dia|key|56
Safari|click|56
Claude|click|50
iTerm2|app_switch|34
Dia|clipboard|17
Safari|key|11
Claude|app_switch|9
Dia|app_switch|9
UserNotificationCenter|click|8
Claude|key|6
iTerm2|clipboard|6
UserNotificationCenter|app_switch|4
Safari|app_switch|3
Slack|app_switch|1
Slack|click|1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT browser_url, COUNT(*) as frames\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND browser_url IS NOT NULL\nGROUP BY browser_url\nORDER BY frames DESC\nLIMIT 20;\n\"\nhttps://play.hbomax.com/video/watch/16b35e6c-e745-4416-bc16-0ef5092ba4e0/07b58730-24cb-419c-b5a0-1e258a77cd21|13\nhttps://location-tracker.lakylak.xyz/dashboard|4\nhttps://nas.lakylak.xyz/desktop/?os=ugospro#/|2\nhttps://play.hbomax.com/show/06f986dd-dd6a-4596-9a0a-f473ef99c64b|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, event_type, COUNT(*) as events\nFROM ui_events\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name, event_type\nORDER BY events DESC\nLIMIT 30;\n\"\niTerm2|click|283\nDia|click|171\niTerm2|key|122\nDia|key|56\nSafari|click|56\nClaude|click|50\niTerm2|app_switch|34\nDia|clipboard|17\nSafari|key|11\nClaude|app_switch|9\nDia|app_switch|9\nUserNotificationCenter|click|8\nClaude|key|6\niTerm2|clipboard|6\nUserNotificationCenter|app_switch|4\nSafari|app_switch|3\nSlack|app_switch|1\nSlack|click|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT browser_url, COUNT(*) as frames\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND browser_url IS NOT NULL\nGROUP BY browser_url\nORDER BY frames DESC\nLIMIT 20;\n\"\nhttps://play.hbomax.com/video/watch/16b35e6c-e745-4416-bc16-0ef5092ba4e0/07b58730-24cb-419c-b5a0-1e258a77cd21|13\nhttps://location-tracker.lakylak.xyz/dashboard|4\nhttps://nas.lakylak.xyz/desktop/?os=ugospro#/|2\nhttps://play.hbomax.com/show/06f986dd-dd6a-4596-9a0a-f473ef99c64b|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, event_type, COUNT(*) as events\nFROM ui_events\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name, event_type\nORDER BY events DESC\nLIMIT 30;\n\"\niTerm2|click|283\nDia|click|171\niTerm2|key|122\nDia|key|56\nSafari|click|56\nClaude|click|50\niTerm2|app_switch|34\nDia|clipboard|17\nSafari|key|11\nClaude|app_switch|9\nDia|app_switch|9\nUserNotificationCenter|click|8\nClaude|key|6\niTerm2|clipboard|6\nUserNotificationCenter|app_switch|4\nSafari|app_switch|3\nSlack|app_switch|1\nSlack|click|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
2193639622446553113
|
7937336967571948468
|
click
|
accessibility
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT browser_url, COUNT(*) as frames
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND browser_url IS NOT NULL
GROUP BY browser_url
ORDER BY frames DESC
LIMIT 20;
"
[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, event_type, COUNT(*) as events
FROM ui_events
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name, event_type
ORDER BY events DESC
LIMIT 30;
"
iTerm2|click|283
Dia|click|171
iTerm2|key|122
Dia|key|56
Safari|click|56
Claude|click|50
iTerm2|app_switch|34
Dia|clipboard|17
Safari|key|11
Claude|app_switch|9
Dia|app_switch|9
UserNotificationCenter|click|8
Claude|key|6
iTerm2|clipboard|6
UserNotificationCenter|app_switch|4
Safari|app_switch|3
Slack|app_switch|1
Slack|click|1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
|
740
|
17
|
25
|
2026-04-11T12:12:17.202755+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909537202_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT browser_url, COUNT(*) as frames
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND browser_url IS NOT NULL
GROUP BY browser_url
ORDER BY frames DESC
LIMIT 20;
"
[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, event_type, COUNT(*) as events
FROM ui_events
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name, event_type
ORDER BY events DESC
LIMIT 30;
"
iTerm2|click|283
Dia|click|171
iTerm2|key|122
Dia|key|56
Safari|click|56
Claude|click|50
iTerm2|app_switch|34
Dia|clipboard|17
Safari|key|11
Claude|app_switch|9
Dia|app_switch|9
UserNotificationCenter|click|8
Claude|key|6
iTerm2|clipboard|6
UserNotificationCenter|app_switch|4
Safari|app_switch|3
Slack|app_switch|1
Slack|click|1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT browser_url, COUNT(*) as frames\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND browser_url IS NOT NULL\nGROUP BY browser_url\nORDER BY frames DESC\nLIMIT 20;\n\"\nhttps://play.hbomax.com/video/watch/16b35e6c-e745-4416-bc16-0ef5092ba4e0/07b58730-24cb-419c-b5a0-1e258a77cd21|13\nhttps://location-tracker.lakylak.xyz/dashboard|4\nhttps://nas.lakylak.xyz/desktop/?os=ugospro#/|2\nhttps://play.hbomax.com/show/06f986dd-dd6a-4596-9a0a-f473ef99c64b|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, event_type, COUNT(*) as events\nFROM ui_events\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name, event_type\nORDER BY events DESC\nLIMIT 30;\n\"\niTerm2|click|283\nDia|click|171\niTerm2|key|122\nDia|key|56\nSafari|click|56\nClaude|click|50\niTerm2|app_switch|34\nDia|clipboard|17\nSafari|key|11\nClaude|app_switch|9\nDia|app_switch|9\nUserNotificationCenter|click|8\nClaude|key|6\niTerm2|clipboard|6\nUserNotificationCenter|app_switch|4\nSafari|app_switch|3\nSlack|app_switch|1\nSlack|click|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT browser_url, COUNT(*) as frames\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND browser_url IS NOT NULL\nGROUP BY browser_url\nORDER BY frames DESC\nLIMIT 20;\n\"\nhttps://play.hbomax.com/video/watch/16b35e6c-e745-4416-bc16-0ef5092ba4e0/07b58730-24cb-419c-b5a0-1e258a77cd21|13\nhttps://location-tracker.lakylak.xyz/dashboard|4\nhttps://nas.lakylak.xyz/desktop/?os=ugospro#/|2\nhttps://play.hbomax.com/show/06f986dd-dd6a-4596-9a0a-f473ef99c64b|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, event_type, COUNT(*) as events\nFROM ui_events\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name, event_type\nORDER BY events DESC\nLIMIT 30;\n\"\niTerm2|click|283\nDia|click|171\niTerm2|key|122\nDia|key|56\nSafari|click|56\nClaude|click|50\niTerm2|app_switch|34\nDia|clipboard|17\nSafari|key|11\nClaude|app_switch|9\nDia|app_switch|9\nUserNotificationCenter|click|8\nClaude|key|6\niTerm2|clipboard|6\nUserNotificationCenter|app_switch|4\nSafari|app_switch|3\nSlack|app_switch|1\nSlack|click|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
2193639622446553113
|
7937336967571948468
|
idle
|
accessibility
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT browser_url, COUNT(*) as frames
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND browser_url IS NOT NULL
GROUP BY browser_url
ORDER BY frames DESC
LIMIT 20;
"
[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, event_type, COUNT(*) as events
FROM ui_events
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name, event_type
ORDER BY events DESC
LIMIT 30;
"
iTerm2|click|283
Dia|click|171
iTerm2|key|122
Dia|key|56
Safari|click|56
Claude|click|50
iTerm2|app_switch|34
Dia|clipboard|17
Safari|key|11
Claude|app_switch|9
Dia|app_switch|9
UserNotificationCenter|click|8
Claude|key|6
iTerm2|clipboard|6
UserNotificationCenter|app_switch|4
Safari|app_switch|3
Slack|app_switch|1
Slack|click|1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
739
|
|
741
|
17
|
26
|
2026-04-11T12:12:47.324131+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909567324_m1.jpg...
|
iTerm2
|
-zsh
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT browser_url, COUNT(*) as frames
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND browser_url IS NOT NULL
GROUP BY browser_url
ORDER BY frames DESC
LIMIT 20;
"
[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, event_type, COUNT(*) as events
FROM ui_events
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name, event_type
ORDER BY events DESC
LIMIT 30;
"
iTerm2|click|283
Dia|click|171
iTerm2|key|122
Dia|key|56
Safari|click|56
Claude|click|50
iTerm2|app_switch|34
Dia|clipboard|17
Safari|key|11
Claude|app_switch|9
Dia|app_switch|9
UserNotificationCenter|click|8
Claude|key|6
iTerm2|clipboard|6
UserNotificationCenter|app_switch|4
Safari|app_switch|3
Slack|app_switch|1
Slack|click|1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT browser_url, COUNT(*) as frames\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND browser_url IS NOT NULL\nGROUP BY browser_url\nORDER BY frames DESC\nLIMIT 20;\n\"\nhttps://play.hbomax.com/video/watch/16b35e6c-e745-4416-bc16-0ef5092ba4e0/07b58730-24cb-419c-b5a0-1e258a77cd21|13\nhttps://location-tracker.lakylak.xyz/dashboard|4\nhttps://nas.lakylak.xyz/desktop/?os=ugospro#/|2\nhttps://play.hbomax.com/show/06f986dd-dd6a-4596-9a0a-f473ef99c64b|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, event_type, COUNT(*) as events\nFROM ui_events\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name, event_type\nORDER BY events DESC\nLIMIT 30;\n\"\niTerm2|click|283\nDia|click|171\niTerm2|key|122\nDia|key|56\nSafari|click|56\nClaude|click|50\niTerm2|app_switch|34\nDia|clipboard|17\nSafari|key|11\nClaude|app_switch|9\nDia|app_switch|9\nUserNotificationCenter|click|8\nClaude|key|6\niTerm2|clipboard|6\nUserNotificationCenter|app_switch|4\nSafari|app_switch|3\nSlack|app_switch|1\nSlack|click|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","depth":4,"value":")\n/* frames_fts(full_text,app_name,window_name,browser_url,id) */;\nCREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;\nCREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);\nCREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);\nCREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;\nCREATE TRIGGER frames_ai AFTER INSERT ON frames\nWHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''\nBEGIN\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n VALUES (\n NEW.id,\n NEW.full_text,\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n );\nEND;\nCREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\n INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)\n SELECT\n NEW.id,\n COALESCE(NEW.full_text, ''),\n COALESCE(NEW.app_name, ''),\n COALESCE(NEW.window_name, ''),\n COALESCE(NEW.browser_url, '')\n WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';\nEND;\nCREATE TRIGGER frames_ad AFTER DELETE ON frames\nBEGIN\n DELETE FROM frames_fts WHERE id = OLD.id;\nEND;\nCREATE INDEX idx_memories_frame_id ON memories(frame_id);\nCREATE INDEX idx_elements_source_role_text\n ON elements(source, role, frame_id)\n WHERE text IS NOT NULL;\nCREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;\nCREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);\"\n2026-04-09|523\n2026-04-11|197\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name\nORDER BY frames DESC;\n\"\niTerm2|185|13.9\nDia|31|2.3\nSafari|20|1.5\nClaude|12|0.9\nUserNotificationCenter|4|0.3\nControl Centre|3|0.2\nSlack|2|0.1\nActivity Monitor|2|0.1\nFinder|1|0.1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT browser_url, COUNT(*) as frames\nFROM frames\nWHERE date(timestamp) = date('now', '-2 day')\nAND browser_url IS NOT NULL\nGROUP BY browser_url\nORDER BY frames DESC\nLIMIT 20;\n\"\nhttps://play.hbomax.com/video/watch/16b35e6c-e745-4416-bc16-0ef5092ba4e0/07b58730-24cb-419c-b5a0-1e258a77cd21|13\nhttps://location-tracker.lakylak.xyz/dashboard|4\nhttps://nas.lakylak.xyz/desktop/?os=ugospro#/|2\nhttps://play.hbomax.com/show/06f986dd-dd6a-4596-9a0a-f473ef99c64b|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite \"\nSELECT app_name, event_type, COUNT(*) as events\nFROM ui_events\nWHERE date(timestamp) = date('now', '-2 day')\nAND app_name IS NOT NULL\nGROUP BY app_name, event_type\nORDER BY events DESC\nLIMIT 30;\n\"\niTerm2|click|283\nDia|click|171\niTerm2|key|122\nDia|key|56\nSafari|click|56\nClaude|click|50\niTerm2|app_switch|34\nDia|clipboard|17\nSafari|key|11\nClaude|app_switch|9\nDia|app_switch|9\nUserNotificationCenter|click|8\nClaude|key|6\niTerm2|clipboard|6\nUserNotificationCenter|app_switch|4\nSafari|app_switch|3\nSlack|app_switch|1\nSlack|click|1\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.140625,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.14479166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.28125,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.28541666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.421875,"top":0.05888889,"width":0.140625,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.42604166,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.5625,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.56666666,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.7027778,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.70694447,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.84305555,"top":0.05888889,"width":0.14027777,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8472222,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9548611,"top":0.032222223,"width":0.03888889,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.48819444,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
2193639622446553113
|
7937336967571948468
|
idle
|
accessibility
|
NULL
|
)
/* frames_fts(full_text,app_name,window_name,bro )
/* frames_fts(full_text,app_name,window_name,browser_url,id) */;
CREATE TABLE IF NOT EXISTS 'frames_fts_data'(id INTEGER PRIMARY KEY, block BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_idx'(segid, term, pgno, PRIMARY KEY(segid, term)) WITHOUT ROWID;
CREATE TABLE IF NOT EXISTS 'frames_fts_content'(id INTEGER PRIMARY KEY, c0, c1, c2, c3, c4);
CREATE TABLE IF NOT EXISTS 'frames_fts_docsize'(id INTEGER PRIMARY KEY, sz BLOB);
CREATE TABLE IF NOT EXISTS 'frames_fts_config'(k PRIMARY KEY, v) WITHOUT ROWID;
CREATE TRIGGER frames_ai AFTER INSERT ON frames
WHEN NEW.full_text IS NOT NULL AND NEW.full_text != ''
BEGIN
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
VALUES (
NEW.id,
NEW.full_text,
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
);
END;
CREATE TRIGGER frames_au AFTER UPDATE OF full_text, app_name, window_name, browser_url ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
INSERT INTO frames_fts(id, full_text, app_name, window_name, browser_url)
SELECT
NEW.id,
COALESCE(NEW.full_text, ''),
COALESCE(NEW.app_name, ''),
COALESCE(NEW.window_name, ''),
COALESCE(NEW.browser_url, '')
WHERE NEW.full_text IS NOT NULL AND NEW.full_text != '';
END;
CREATE TRIGGER frames_ad AFTER DELETE ON frames
BEGIN
DELETE FROM frames_fts WHERE id = OLD.id;
END;
CREATE INDEX idx_memories_frame_id ON memories(frame_id);
CREATE INDEX idx_elements_source_role_text
ON elements(source, role, frame_id)
WHERE text IS NOT NULL;
CREATE INDEX idx_frames_sync_id ON frames(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_audio_transcriptions_sync_id ON audio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;
CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clear
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDER BY date(timestamp);"
2026-04-09|523
2026-04-11|197
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, COUNT(*) as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutes
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name
ORDER BY frames DESC;
"
iTerm2|185|13.9
Dia|31|2.3
Safari|20|1.5
Claude|12|0.9
UserNotificationCenter|4|0.3
Control Centre|3|0.2
Slack|2|0.1
Activity Monitor|2|0.1
Finder|1|0.1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT browser_url, COUNT(*) as frames
FROM frames
WHERE date(timestamp) = date('now', '-2 day')
AND browser_url IS NOT NULL
GROUP BY browser_url
ORDER BY frames DESC
LIMIT 20;
"
[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "
SELECT app_name, event_type, COUNT(*) as events
FROM ui_events
WHERE date(timestamp) = date('now', '-2 day')
AND app_name IS NOT NULL
GROUP BY app_name, event_type
ORDER BY events DESC
LIMIT 30;
"
iTerm2|click|283
Dia|click|171
iTerm2|key|122
Dia|key|56
Safari|click|56
Claude|click|50
iTerm2|app_switch|34
Dia|clipboard|17
Safari|key|11
Claude|app_switch|9
Dia|app_switch|9
UserNotificationCenter|click|8
Claude|key|6
iTerm2|clipboard|6
UserNotificationCenter|app_switch|4
Safari|app_switch|3
Slack|app_switch|1
Slack|click|1
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
739
|
|
742
|
17
|
27
|
2026-04-11T12:12:52.147253+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909572147_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelplhl100% <47Sat 11 Apr 15:12:51••-zshT&1DOCKERO ₴1DEV (-zsh)O ₴2APP (-zsh)• *3-zsh• 84-zsh• *5-zshO ₴6-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) asest_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter1410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
NULL
|
6808448918636672336
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelplhl100% <47Sat 11 Apr 15:12:51••-zshT&1DOCKERO ₴1DEV (-zsh)O ₴2APP (-zsh)• *3-zsh• 84-zsh• *5-zshO ₴6-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ON elements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) asest_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter1410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
739
|
|
743
|
17
|
28
|
2026-04-11T12:12:53.761857+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909573761_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl100% <7Sat 11 Apr 15:12:53-zshT81DOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO ₴6-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ONelements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) asest_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
NULL
|
6244750661853324751
|
NULL
|
visual_change
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl100% <7Sat 11 Apr 15:12:53-zshT81DOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO ₴6-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ONelements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) asest_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
NULL
|
|
744
|
17
|
29
|
2026-04-11T12:12:55.265086+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909575265_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl100% <7Sat 11 Apr 15:12:54-zshT81DOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO ₴6-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ONelements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) asest_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
NULL
|
6704958684862977867
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl100% <7Sat 11 Apr 15:12:54-zshT81DOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO ₴6-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ONelements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) asest_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
743
|
|
745
|
17
|
30
|
2026-04-11T12:13:25.658224+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909605658_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl100% <7Sat 11 Apr 15:13:25-zshT81DOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO ₴6-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ONelements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) asest_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
NULL
|
-7108317995447543909
|
NULL
|
idle
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl100% <7Sat 11 Apr 15:13:25-zshT81DOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO ₴6-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ONelements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) asest_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
NULL
|
|
746
|
NULL
|
0
|
2026-04-11T12:13:56.172130+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909636172_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl100% <7Sat 11 Apr 15:13:55-zshT81DOCKERO ₴1DEV (-zsh)О 882APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO 886-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ONelements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
NULL
|
-1611754639886970229
|
NULL
|
idle
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl100% <7Sat 11 Apr 15:13:55-zshT81DOCKERO ₴1DEV (-zsh)О 882APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO 886-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ONelements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
745
|
|
747
|
18
|
0
|
2026-04-11T12:14:26.676370+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909666676_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl100% <7Sat 11 Apr 15:14:26-zshT81DOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO ₴6-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ONelements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) asest_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
NULL
|
6622883273444145346
|
NULL
|
idle
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl100% <7Sat 11 Apr 15:14:26-zshT81DOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO ₴6-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ONelements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) asest_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
NULL
|
|
748
|
18
|
1
|
2026-04-11T12:14:57.157584+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909697157_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl100% <7Sat 11 Apr 15:14:56-zshT81DOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO ₴6-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ONelements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) asest_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
NULL
|
4800071514566830075
|
NULL
|
idle
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl100% <7Sat 11 Apr 15:14:56-zshT81DOCKERO ₴1DEV (-zsh)O $2APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO ₴6-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ONelements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) asest_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
747
|
|
749
|
18
|
2
|
2026-04-11T12:15:27.666731+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909727666_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl100% <7Sat 11 Apr 15:15:27-zsh181DOCKERO ₴1DEV (-zsh)О 882APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO 886-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ONelements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
NULL
|
-3225603978522301467
|
NULL
|
idle
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl100% <7Sat 11 Apr 15:15:27-zsh181DOCKERO ₴1DEV (-zsh)О 882APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO 886-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ONelements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
NULL
|
|
750
|
18
|
3
|
2026-04-11T12:15:58.216944+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-11/1775 /Users/lukas/.screenpipe/data/data/2026-04-11/1775909758216_m1.jpg...
|
NULL
|
NULL
|
True
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl100% <7Sat 11 Apr 15:15:58-zshT81DOCKERO ₴1DEV (-zsh)О 882APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO 886-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ONelements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
NULL
|
2167576166789446156
|
NULL
|
idle
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp(ahl100% <7Sat 11 Apr 15:15:58-zshT81DOCKERO ₴1DEV (-zsh)О 882APP (-zsh)• ₴з-zsh• 84-zsh• ₴5-zshO 886-zsh*7WHERE text IS NOT NULL;CREATE INDEX idx_frames_sync_id ON frames(sync_id)WHEREsync_id IS NOT NULL;CREATE INDEX idx_ocr_text_sync_id ON ocr_text(sync_id) WHEREsync_id IS NOT NULL;CREATE INDEX idx_audio_transcriptions_sync_id ONaudio_transcriptions(sync_id) WHERE sync_id IS NOT NULL;CREATE INDEX idx_elements_frame_source_role ONelements(frame_id, source, role) WHERE text IS NOT NULL;lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/.screenpipe $ clearlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny:~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT date(timestamp), COUNT(*) as frames FROM frames GROUP BY date(timestamp) ORDERBY date(timestamp);"2026-04-0915232026-04-111197lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $sqlite3~/.screenpipe/db.sqlite"SELECTapp_name, COUNT(*)as frames, ROUND(COUNT(*) * 4.5 / 60.0, 1) as est_minutesFROM framesWHEREdate(timestamp)= date('now', '-2 day')ANDapp_name IS NOT NULLGROUP BY app_nameORDER BY frames DESC;iTerm2|185|13.9Dial3112.3Safaril2011.5Claude |1210.9UserNotificationCenter|410.3Control Centrel310.2Slack|210.1Activity Monitor|210.1Finder|110.1lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT browser_url, COUNT(*) as framesFROM framesWHERE date(timestamp) = date('now', '-2 day')AND browser_url IS NOT NULLGROUP BY browser_urlORDER BY frames DESCLIMIT 20;[URL_WITH_CREDENTIALS] ~/.screenpipe $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name,event_type, COUNT(*) as eventsFROM ui_eventsWHERE date(timestamp) = date('now', '-2 day')AND app_name IS NOT NULL...
|
749
|